convert .mov video to .mp4 with ffmpeg

45,613

Solution 1

To convert videos, I like to use handbrake. You can find it here: https://handbrake.fr/ I use it on Linux but it should work well on MAC too.

For HandBrake:

handbrakecli -i {in-video}.mov -e x264 -E facc -o {out-video}.mp4

For ffmpeg:

ffmpeg -i {in-video}.mov -vcodec h264 -acodec aac {out-video}.mp4

Solution 2

Copy

You can stream copy if the MOV file contains video and audio that is compatible with MP4:

ffmpeg -i input.mov -c copy -movflags +faststart  output.mp4
  • Stream copy (-c copy) is like a "copy and paste" so the quality is preserved and the process is fast.
  • -movflags +faststart makes an output file that usable for HTML5 streaming, for example, putting all the necessary info to begin playback at the start of the file. If you only care about local desktop usage, you can leave that out.
  • Video formats compatible with MP4 include: H.264, H.265/HEVC, AV1 (new format, so not universally supported), MPEG-4 (old format, not supported in HTML5).
  • Audio formats compatible with MP4 include: AAC, MP3 (playback support depends on player), Opus (new format, so not universally supported).

Encode

This will convert the MOV to H.264 video and AAC audio:

ffmpeg -i input.mov -c:v libx264 -c:a aac -vf format=yuv420p -movflags +faststart output.mp4
  • -c:v libx264 choose encoder libx264 to output H.264 video.
  • -c:a aac choose encoder aac to output AAC audio.
  • -vf format=yuv420p chooses YUV 4:2:0 pixel format. libx264 supports many pixel formats and by default will choose a pixel format that most resembles the input. But not all pixel formats are supported by all players. yuv420p is the most compatible and universally supported.
  • -movflags +faststart same as the Web Optimized option in Handbrake. After encoding completes it moves a chunk of info from the end of file to the beginning so it can start playing faster when viewing via download.

See FFmpeg Wiki: H.264 and FFmpeg Wiki: AAC for more info, including CPU time vs. quality vs. bitrate settings. (x264's default is -preset medium -crf 23)

Share:
45,613

Related videos on Youtube

theonlygusti
Author by

theonlygusti

Updated on September 18, 2022

Comments

  • theonlygusti
    theonlygusti almost 2 years

    I am trying to convert a .mov video to .mp4 with ffmpeg:

    ffmpeg -i ~/Desktop/Sample.mov ~/Desktop/Sample.mp4
    

    This doesn't work though, and when I try to open the produced video in quicktime it tells me that the file is either corrupted or in a format quicktime doesn't understand.

    How do I get this to work?

  • Peter Cordes
    Peter Cordes about 3 years
    You can use -movflags +faststart with -c copy as well. It's just as useful / useless either way, depending on what you want to do with the file. (Allows the file to be streamed, e.g. from a web server.) Also, -c:a aac is a low quality encoder; libfaac is better. Or maybe you can keep the original audio and just transcode the video, e.g. for bitrate or codec reasons, like -c:v libx264 -c:a copy.
  • Peter Cordes
    Peter Cordes about 3 years
    Also, future readers that want to transcode should have a look at your FFmpeg wiki links for quality vs. encode-time vs. bitrate settings, like -preset slower to spend more CPU time to improve the quality per bitrate tradeoff. Very worth it for encode once, stream many times. And -crf 23 being the default, -crf 26 to quantize more (smaller file), -crf 20 or so to quantize less (higher quality).