Rotate MP4, and change dimensions

.mp4videovideo editing

I have an MP4 video that was filmed on my Android phone, but the guy filmed it holding my phone some weird way.

When viewing it in QuickTime I have to rotate my laptop 90 degrees and then I will see it as a regular wide screen video and everything looks good.

In VLC the video is already widescreen with proper dimensions but its upside down so I have to flip my laptop upside down.

When I imported it into iMovie, I rotated it 90 degrees and it was the right side up but the video was squished and still taller then wide.

Not sure what's going on but how can I make it widescreen and right side up?

Best Answer

MP4 files can have a rotate flag, which tells the player to rotate the video during playback, without changing the way the actual video bitstream is encoded and oriented. VLC does support this flag since version 2.2.0.

The question is what you want to do with the video. You basically have two choices:

  • Keep it as-is and remove the rotation flag. If you want to edit the video later, flip it in whatever program you use to do so. If you want to play it, choose a player that supports on-the-fly rotation.
  • Rotate and transcode the video so it has a proper orientation. This will degrade the video quality a little though.

You can do all of that with ffmpeg. Download a static build for your operating system, and extract it to a directory, e.g. so that the ffmpeg executable file is in ~/Downloads. Then open up a terminal window and navigate to said directory:

cd ~/Downloads
./ffmpeg

This should run the ffmpeg binary. For more info read our blog article on ffmpeg.


Here are the actual commands you can use. If you want to keep the actual video bitstream and remove the rotation flag, you only need to remove the metadata for the first video stream v:0, and copy the video and audio bitstreams (-c copy):

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4

If you want to transcode the video, flipping it by 180°, you need to specify a video encoder (here, libx264) and the flipping filter. The audio stream will be copied over.

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -filter:v "hflip,vflip" -c:a copy output.mp4

You can adjust the CRF (Constant Rate Factor) to change the quality of the video. Sane values are anywhere between 18 and 28, depending on your input quality. Lower means better quality, so if your video ends up looking worse than the original, try a lower CRF value.

Related Question