convert .mov video to .mp4 with ffmpeg
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
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
)