Rotate MP4
Rotating an MP4 has two mechanics: set a rotation metadata tag (instant, no re-encode - the player rotates on playback) or physically rotate the pixels (needed for players that ignore the tag). Here's the ffmpeg command for each direction and case, and what Wave preserves automatically.
What actually changes
MP4's track header has a transformation matrix that most modern players respect - a 90/180/270-degree rotation encoded in the container tells the player to rotate the pixels during playback. Setting or changing this tag is a metadata-only operation, so the video bytes never change - only the header value that says "display this rotated". Takes seconds regardless of source length, no quality loss (see Remux vs re-encode for why metadata-only edits are so much faster than pixel-touching ones).
The command to set a rotation metadata tag: `ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4` (for 90° clockwise). Values are 90, 180, 270 (clockwise); use 90 for portrait-shot-as-landscape corrections, 180 for upside-down cameras, 270 for portrait mode captured sideways. No re-encoding. Wave automatically preserves the source rotation tag when converting - a MOV recorded on iPhone in portrait keeps the same rotation tag in the output MP4.
For players that ignore the rotation tag (some older Android media apps, some embedded players, pre-2016 smart TVs), a physical pixel rotation is required. That means re-encoding with a transpose filter: `ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4` for 90° clockwise. Filter values: transpose=0 (90° counterclockwise + vertical flip), transpose=1 (90° clockwise), transpose=2 (90° counterclockwise), transpose=3 (90° clockwise + vertical flip). For 180°, chain two transposes: `-vf "transpose=1,transpose=1"`. Re-encodes at real-time or faster on modern hardware.
Wave's current build handles rotation via the source metadata tag - the source's rotation is preserved into the output MP4 (Wave calls this out in the Plan callout when a rotated source is detected). Wave doesn't currently offer a "flip this video 90°" button; that's roadmap. Until then, for a rotated MP4 that plays incorrectly on a specific player, either update the metadata tag (fast, no quality loss) or physically rotate (slower but universally compatible) with the ffmpeg commands above.
Three steps.
-
01
Step 1
For metadata-only rotation (fast, works in modern players): ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4. Values are 90, 180, 270 (clockwise).
-
02
Step 2
For pixel-level rotation (slower, works everywhere): ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4. For 180°: -vf "transpose=1,transpose=1". For 270°: -vf "transpose=2".
-
03
Step 3
The metadata approach is instant and lossless; the pixel approach re-encodes the video track.
Answers, specifically.
When to use metadata rotation vs. pixel rotation?
Metadata for modern players (iOS, macOS, Windows 11, Android 10+, all major browsers, Chromecast, current smart TVs) - all respect the tag. Pixel rotation for older players, embedded players in some apps, and any workflow that will re-encode the video later (a re-encode strips the rotation metadata unless you explicitly preserve it).
How can I tell if my player respects rotation metadata?
Play the file in the target player. If it appears upright, the player respects the tag. If it appears rotated, the player ignores the tag and you need pixel rotation. QuickTime Player, iOS Photos, VLC, browsers all respect it; some older Android apps and some smart TV apps do not.
What happens to rotation metadata when I re-encode?
It gets baked into the pixels automatically by ffmpeg if you don't specify otherwise - the encoder reads the rotation, rotates the frames physically, and writes an unrotated MP4 that plays upright everywhere. To preserve the metadata tag through a re-encode: `-metadata:s:v:0 rotate=X` on the output. To not bake in the rotation: `-noautorotate` before -i.
Does Wave rotate videos?
Not with a rotate button, no. Wave preserves the source's rotation tag automatically when converting - a rotated iPhone MOV becomes a rotated MP4 with the same tag. A dedicated rotate mode with clockwise/counterclockwise/180° buttons is on the roadmap. For today: ffmpeg locally is the fastest path.
iOS Photos to rotate?
Yes. Photos → open video → Edit → tap the crop icon (bottom bar) → tap the rotate button at top-left to rotate 90° counterclockwise. Save. Physically rotates the video (bakes in the rotation).
macOS QuickTime Player to rotate?
Yes. QuickTime Player → open video → Edit → Rotate Left / Rotate Right. Command+S to save. Preserves original quality via metadata-only rotation.
The video is upside down (180° rotation). Any special case?
Nothing special. Either `-metadata:s:v:0 rotate=180` for the metadata approach, or `-vf "transpose=1,transpose=1"` (or equivalently `-vf "hflip,vflip"` which is faster because it doesn't transpose axes) for pixel rotation. Both produce identical results.