FFMPEG COMMAND

Convert MOV to MP4 with FFmpeg

A MOV is a container, so the right command depends on what is inside it. Re-encode to H.264 when it holds ProRes or HEVC and you need compatibility; remux without re-encoding when the video is already H.264.

Verified with FFmpeg 9.0.1 on 26 August 2026. Search intent: ffmpeg mov to mp4.

the command
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset medium -pix_fmt yuv420p -c:a aac -b:a 160k -movflags +faststart output.mp4

Re-encodes whatever the MOV contains (ProRes, HEVC, MJPEG, PCM audio) into the most compatible MP4: 8-bit 4:2:0 H.264 video, AAC audio, index at the front. A 119 MB ProRes HQ test file became a 9.2 MB MP4 that plays in every browser.

Flags, explained

-c:v libx264 -crf 23 -preset medium
Re-encode the video to H.264 at the default quality and speed trade-off.
-pix_fmt yuv420p
Force 8-bit 4:2:0 chroma. ProRes is 10-bit 4:2:2; without this flag x264 keeps that format and produces a High 4:2:2 file most players reject.
-c:a aac -b:a 160k
MOV files from cameras often carry uncompressed PCM audio, which MP4 cannot hold. AAC at 160 kbps is the standard replacement.
-movflags +faststart
Puts the index at the start of the MP4 so playback starts before the download completes.
-c copy
Copy the streams unchanged. Only works when the codecs are allowed in MP4 (H.264, HEVC, AAC, MP3 among others).
-tag:v hvc1
The four-character code Apple players expect for HEVC. FFmpeg writes hev1 by default, which QuickTime and Safari ignore.

Variants

Remux without re-encoding when the MOV already holds H.264 and AAC

shell
ffmpeg -i input.mov -c copy -movflags +faststart output.mp4

Copies the streams into an MP4 container in 0.04 s on the test file, with no quality change. Fails with "Could not find tag for codec" when the MOV contains ProRes or PCM audio, because MP4 cannot carry them: re-encode instead.

Keep HEVC from an iPhone but fix the tag

shell
ffmpeg -i input.mov -c copy -tag:v hvc1 -movflags +faststart output.mp4

iPhone footage is HEVC in a MOV. Copying it into an MP4 keeps the quality and size (2.7 MB in, 2.7 MB out); the hvc1 tag is what Safari and QuickTime need to play it.

HEVC to H.264 for players that do not support HEVC

shell
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset medium -pix_fmt yuv420p -c:a aac -b:a 160k -movflags +faststart output.mp4

Same as the primary command, shown for the HEVC case: the 720p HEVC test file became a 3.7 MB H.264 MP4 that older Android devices, Windows without the HEVC extension and most web players accept.

Pitfalls we hit

  • Forgetting -pix_fmt yuv420p with a ProRes source produced a High 4:2:2 10-bit H.264 file (yuv422p10le, 12.8 MB) that browsers and phones will not play. With the flag: yuv420p, 9.2 MB.
  • -c copy fails on ProRes MOVs: "Could not find tag for codec prores in stream #0, codec not currently supported in container". It also fails on PCM audio. Re-encode those streams.
  • HEVC copied without -tag:v hvc1 plays in VLC and Chrome but not in Safari or QuickTime.
  • MOV and MP4 are both MPEG-4 Part 12 containers. Renaming the file changes nothing; the codecs inside decide what plays.

How we verified it

Run with FFmpeg 9.0.1 on 26 August 2026. ProRes HQ MOV (1920x1080, yuv422p10le, PCM, 119,259,914 bytes) → primary command: H.264 High yuv420p, AAC, 9,166,214 bytes; without -pix_fmt: High 4:2:2 yuv422p10le, 12,791,420 bytes. H.264 MOV → -c copy: 0.04 s, 4,808,662 bytes, streams unchanged. HEVC MOV (2,689,537 bytes) → -c copy -tag:v hvc1: 2,689,482 bytes, hvc1; → libx264: 3,682,905 bytes. ProRes MOV with -c copy failed as described.

The same edit as a typed operation

convert_video_to_mp4 probes the source first and picks stream copy when the codecs already fit MP4, or an H.264 yuv420p plus AAC re-encode with faststart when they do not. The 4:2:2 and PCM traps are handled without any option.

MCP tool: convert_video_to_mp4POST /api/v1/tools/video-to-mp4
request body
{
  "inputs": [{ "id": "main", "url": "https://example.com/video.mov" }],
  "options": {}
}

FAQ

Why is my MP4 huge after converting from MOV?

Either the MOV held an already compressed H.264 stream that you re-encoded at a low CRF, or you kept a 10-bit 4:2:2 pixel format. Remux with -c copy when the codec fits, or add -pix_fmt yuv420p and a CRF of 23 or higher.

Does converting MOV to MP4 lose quality?

Not with -c copy, which keeps the exact same streams. A re-encode from ProRes or HEVC to H.264 loses a little, kept invisible at CRF 18 to 23.

Why does the MP4 not play on my iPhone or in Safari?

Usually one of two things: HEVC without the hvc1 tag, or 10-bit 4:2:2 H.264 from a ProRes source. The primary command and the hvc1 variant above avoid both.

What is the fastest way to convert MOV to MP4?

Remuxing with -c copy: it rewrites the container without touching the video, in a fraction of a second. It only works when the MOV already contains MP4-compatible codecs such as H.264, HEVC and AAC.

Related commands

All FFmpeg commands