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:

TagWhere decoder config livesCompatibility
hev1Inline in the bitstreamSome players fail at first frame
hvc1In the container sample descriptionQuickTime, 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.


FFmpeg Cheat Sheet (PDF): container conversion, codec tags, and compatibility commands on a single A4.


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