Your iPhone video won’t play after copying to a PC — that’s usually HEVC inside a .mov plus a subtle codec-tag mismatch. FFmpeg can fix it in one command, without re-encoding, preserving image quality bit-for-bit. This guide covers the fast remux, the hvc1 tag trick, a full H.264 re-encode for stubborn older players, batch scripts for Windows/macOS/Linux, and the iPhone setting that avoids the problem entirely. ~8 min read.

Tested on: FFmpeg 6.1 / Windows 11 / macOS Sonoma / Ubuntu 24.04


What you’ll learn

  1. Why iPhone .mov files choke on Windows (hev1 vs hvc1)
  2. Lossless fix: -c copy + -tag:v hvc1 in one command
  3. Max compatibility: re-encode to H.264
  4. Batch-convert a whole folder
  5. Switching iPhone to record H.264 directly
  6. FAQ

1. Why iPhone .mov files break elsewhere

Since iOS 11, iPhone records to HEVC (H.265) in a .mov container by default. Two things can go wrong.

A: the .mov container

.mov is Apple’s QuickTime container. Structurally it’s nearly identical to MP4, but some older players, editors, and upload services refuse it.

B: hev1 vs hvc1 tag

HEVC streams live under one of two codec tags:

Tag Where decoder config lives Compatibility
hev1 Inline in the bitstream Some players fail at first frame
hvc1 In the container sample description QuickTime, iOS, Safari, Discord all happy

iPhone writes hvc1 natively, but third-party editors or older FFmpeg pipelines sometimes re-tag to hev1, breaking Windows playback. Re-asserting hvc1 with FFmpeg fixes it (FFmpeg wiki H.265).


2. The fast fix: remux + hvc1 tag

Seconds, lossless, and the video is suddenly compatible everywhere.

ffmpeg -i iphone.mov -c copy -tag:v hvc1 -movflags +faststart iphone.mp4
  • -c copy — copy without re-encoding
  • -tag:v hvc1 — force the hvc1 tag on the video stream
  • -movflags +faststart — relocate moov atom to the front (required for web / SNS)

Output plays correctly on Windows Films & TV, macOS QuickTime, Discord, and Twitter.


3. Max-compatibility: re-encode to H.264

For truly old environments that can’t decode HEVC at all (Windows 8-era PCs, older Android, some smart TVs), re-encode to H.264. The file will be roughly 1.5–2× larger but plays virtually everywhere.

ffmpeg -i iphone.mov \
  -c:v libx264 -crf 20 -preset medium \
  -c:a aac -b:a 192k \
  -movflags +faststart \
  iphone_h264.mp4
  • -crf 20 — high quality (18–23 is the sensible range)
  • -preset medium — balanced speed/size
  • -c:a aac -b:a 192k — iPhone audio is usually already AAC, but we pin it explicitly

iPhone 4K HDR footage also needs HDR → SDR tonemapping → HDR to SDR guide

Keeping portrait orientation

iPhone portrait video uses rotation metadata rather than physically rotated pixels. When you re-encode, some pipelines drop that metadata and the result is sideways. To bake the rotation in:

ffmpeg -i iphone_vertical.mov \
  -c:v libx264 -crf 20 -preset medium \
  -c:a aac -b:a 192k \
  -movflags +faststart -metadata:s:v rotate=0 \
  iphone_vertical.mp4

-metadata:s:v rotate=0 resets rotation metadata on the output, and the video is stored as native-orientation pixels. See our rotate/flip guide for details.


4. Batch conversion

macOS / Linux

for f in *.mov *.MOV; do
  [ -f "$f" ] || continue
  ffmpeg -i "$f" -c copy -tag:v hvc1 -movflags +faststart "${f%.*}.mp4"
done

Windows .bat (drag-and-drop multiple files)

Save as iphone_to_mp4.bat:

@echo off
setlocal enabledelayedexpansion
if "%~1"=="" (
  echo Drag one or more MOV files onto this .bat
  pause & exit /b 1
)
:loop
if "%~1"=="" goto end
ffmpeg -i "%~1" -c copy -tag:v hvc1 -movflags +faststart "%~dpn1.mp4"
shift
goto loop
:end
echo Done!
pause

Don’t have FFmpeg yet? See FFmpeg install guide (Windows / macOS / Linux).


5. Switching iPhone to H.264 at capture

To skip conversion entirely, flip iPhone’s camera format:

  1. Settings → Camera → Formats
  2. Select Most Compatible (H.264)

From then on, recordings are H.264 MP4. Note: 4K 60fps and HDR modes still force HEVC per Apple’s HT207022.

Existing HEVC clips still need conversion.


6. Troubleshooting

Windows won’t play the MP4 even after -tag:v hvc1

Why: Windows has no built-in HEVC decoder.
Fix: Install Microsoft’s “HEVC Video Extensions” from the Store (small paid app), or re-encode to H.264.

No audio on the converted file

Why: Some older iPhones recorded ALAC or raw PCM in certain modes — MP4 can’t play that back in every player.
Fix: Re-encode audio only:

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

Converting Live Photo .MOV

Why: Live Photos are 1–3 second .MOV paired with a HEIC still. Same conversion works:

ffmpeg -i IMG_1234.MOV -c copy -tag:v hvc1 IMG_1234.mp4

Audio drift after Twitter re-encode

Why: iPhone’s VFR (variable frame rate) + Twitter’s re-encode produces A/V drift.
Fix: Convert to CFR first:

ffmpeg -i iphone.mov -c:v libx264 -crf 20 -r 30 -c:a aac -b:a 192k -movflags +faststart output.mp4

-r 30 pins the frame rate to 30. See VFR to CFR conversion.

Slow-motion video plays at normal speed

Why: iPhone’s 240fps slo-mo uses playback-rate metadata that FFmpeg remux drops.
Fix: Explicitly slow the clip:

ffmpeg -i slowmo.mov -filter:v "setpts=8*PTS" -r 30 -c:a copy output.mp4

setpts=8*PTS plays at 1/8 speed. For audio sync add -filter:a atempo=0.125.


FAQ

Q1. What’s the difference between .MOV and .mp4?
A. They’re almost the same container structurally. .mov is Apple’s original QuickTime format; .mp4 is the ISO standard (MPEG-4 Part 14). With the same codecs inside, remuxing between them is trivial.

Q2. Does remuxing change file size?
A. Barely (±1–3%). Only container headers differ — the video/audio data is copied verbatim.

Q3. Can I convert with Apple’s built-in apps?
A. macOS “Preview” and QuickTime Player can export to H.264 via File → Export, but format choices are limited (e.g., 720p cap) and there’s no batch mode. FFmpeg is more flexible.

Q4. Should I add -tag:v hvc1 to H.264 videos too?
A. No — that tag is H.265-specific. H.264 files use avc1 by default without any extra option.

Q5. How do I view iPhone 4K HDR footage on a regular PC?
A. The HEVC Main 10 + HDR10 source looks washed out on SDR. Tonemap:

ffmpeg -i iphone_4k_hdr.mov \
  -vf "zscale=t=linear:npl=100,tonemap=hable:desat=0,zscale=p=bt709:t=bt709:m=bt709,format=yuv420p" \
  -c:v libx264 -crf 20 -c:a aac -b:a 192k output_sdr.mp4

Full details in HDR to SDR Tonemapping.



Tested on ffmpeg 6.1.1 / Windows 11 + macOS Sonoma + Ubuntu 24.04
Primary sources: ffmpeg.org/ffmpeg.html / FFmpeg wiki H.265 / Apple HT207022