QuickTime .mov files come from Final Cut Pro, screen recorders, DSLRs, and macOS. Editors, web players, and messaging apps that expect .mp4 do not always accept them. Because the two formats are closely related, FFmpeg can often convert MOV to MP4 in seconds without losing quality, by changing only the container.

If your file came straight from an iPhone (often HEVC video with HDR or rotation metadata), see the iPhone MOV to MP4 guide.

1. MOV and MP4 Are Almost the Same Thing

Both .mov and .mp4 are containers: wrappers that hold the video, audio, and metadata streams. Their structure is nearly the same, because the ISO base media file format behind MP4 (made of “boxes”) was derived from the QuickTime file format (made of “atoms”). The main differences are the file extension and a few features that only QuickTime has.

.mov (QuickTime) .mp4 (MPEG-4 Part 14)
Base format QuickTime File Format (the basis of ISO BMFF) ISO BMFF (standardized from QuickTime)
Typical video H.264, HEVC, ProRes H.264, HEVC, AV1
Typical audio AAC, PCM, ALAC AAC
Best support Apple ecosystem Universal

If the streams inside your MOV already work in MP4 (H.264 or HEVC video with AAC audio), you do not need to re-encode. You only change the container.

2. The Fastest Lossless Conversion

If your MOV has H.264 or HEVC video and AAC audio, this one command is enough:

ffmpeg -i input.mov -c copy -movflags +faststart output.mp4
  • -c copy — copies the selected streams unchanged, without re-encoding. It finishes in seconds and loses no quality. Without -map, FFmpeg takes only one video and one audio stream, so add -map 0:v -map 0:a when the MOV has several audio tracks.
  • -movflags +faststart — moves the moov atom (the file’s index) to the front, so playback can start before the download finishes.

3. When Copy Works vs When You Must Re-encode

Stream copy works only when MP4 accepts the codec of every stream:

Codec in your MOV Copy to MP4? What to do
H.264 (AVC) video Yes -c copy
HEVC (H.265) video Yes (add -tag:v hvc1) -c:v copy -tag:v hvc1
ProRes video No Re-encode video to H.264/HEVC
AAC audio Yes -c copy
ALAC (Apple Lossless) Yes (-c copy) Copy works, but re-encode to AAC for broad web/player support
PCM (uncompressed) Depends on the format (FFmpeg 8.1 stores 16/24/32-bit integer PCM as ipcm and floating-point PCM as fpcm; 8-bit PCM and a few others can’t be copied; some players can’t play it) Re-encode audio to AAC (recommended)

If FFmpeg cannot copy a stream, it usually prints a message like Could not find tag for codec ... in stream. Re-encode that stream.

4. The Re-encode Command (ProRes / PCM)

When the codecs do not suit MP4 (ProRes video, or the PCM audio common in professional and screen-recording work), re-encode to H.264 and AAC. ALAC is valid in MP4/M4A and can be copied with -c copy, but re-encoding it to AAC is recommended so that more players and browsers can play it.

ffmpeg -i input.mov -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac output.mp4
  • -c:v libx264 — encodes the video as H.264, the most widely supported codec in MP4.
  • -crf 20 — the quality target. Lower values give higher quality and larger files; 18–23 is the usual range for clean-looking output.
  • -pix_fmt yuv420p — converts to the common 8-bit 4:2:0 format. Without it, ProRes (4:2:2 10-bit) becomes High 4:2:2 H.264, which many browsers and Apple devices can’t play.
  • -c:a aac — encodes the audio as AAC.

Re-encoding loses some quality, because the video is decoded and compressed again. It is also slower than copying. In return, the file plays almost everywhere. If the result is for web playback, add -movflags +faststart:

ffmpeg -i input.mov -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac -movflags +faststart output.mp4

Re-encode only what needs it

If only the audio is the problem (a MOV without ProRes, but with PCM audio), copy the video and re-encode only the audio. This is much faster than re-encoding everything:

ffmpeg -i input.mov -c:v copy -c:a aac -b:a 192k -movflags +faststart output.mp4

5. Why faststart Matters

By default, FFmpeg writes the moov atom (the index that tells a player where each frame is) at the end of the file. That is fine for playing a local file. On the web, playback starts later: the player must find the moov atom first, which can take extra HTTP range requests. Depending on the server and the player, it may not start until much or all of the file has downloaded.

-movflags +faststart adds a second pass after the file is written that moves the moov atom to the front, so playback can start while the file is still downloading. Add it to every file meant for the web. For more, see the moov atom guide.

6. Inspecting What’s Inside Your MOV

Before you choose between copying and re-encoding, check the codecs with ffprobe:

ffprobe -v error -show_entries stream=index,codec_type,codec_name -of default=noprint_wrappers=1 input.mov

This lists each stream’s type (video or audio) and codec name. With h264 and aac, copying works. With prores, the video must be re-encoded. For alac, or PCM such as pcm_s16le, see the table in Section 3: both can be copied, but re-encoding to AAC is recommended.

7. Troubleshooting

Error 1: Could not find tag for codec prores in stream

Cause: ProRes cannot be stored in an MP4 container. Fix: Re-encode the video: -c:v libx264 -crf 20 -pix_fmt yuv420p.

Error 2: HEVC MOV converts but won’t play on Apple devices

Cause: The HEVC video is tagged hev1, but Apple players expect hvc1. -c copy keeps the tag that the MOV already has. Fix: Add the tag while copying:

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

Error 3: No audio in the output MP4

Cause: The PCM audio from the source was copied unchanged. FFmpeg 8.1 stores most PCM formats in MP4 (as ipcm or fpcm), and players that don’t support them play no sound. Fix: Re-encode the audio: -c:a aac -b:a 192k.

Error 4: Video takes a long time to start on a website

Cause: The moov atom is at the end of the file. Fix: Run it again with -movflags +faststart. If the codecs are already compatible, a copy-only run is enough.

FAQ

Q1. Does converting MOV to MP4 reduce quality? A. Not with -c copy, which copies the streams bit for bit. Quality changes only when you re-encode (Section 4).

Q2. How do I know whether I can copy or must re-encode? A. Run the ffprobe command in Section 6. H.264 or HEVC video with AAC (or ALAC) audio can be copied. ProRes must be re-encoded. ALAC and most PCM formats can be copied, but re-encoding them to AAC is recommended because more players support it; some players can’t play PCM at all.

Q3. My MOV is from an iPhone. Do these steps still apply? A. Yes, but iPhone footage often comes with HEVC, HDR, and rotation issues. The iPhone MOV to MP4 guide covers those.

Q4. Why is copy so much faster than re-encode? A. Copying only moves the compressed packets into a new container. Re-encoding decodes every frame and compresses it again, which is far more work.

Q5. The file size barely changed after copy. Is that normal? A. Yes. Copying does not recompress anything, so the size stays close to the original, apart from small container differences. To make the file smaller, you must re-encode; see the video compression guide.