When an iPhone video will not play after you copy it to a PC, the cause is usually the HEVC (H.265) video inside the .mov file. FFmpeg can fix container and tag problems in one command without re-encoding, so the picture stays bit-for-bit the same. For players that cannot play HEVC at all, such as Windows without the HEVC extension, re-encode to H.264.

1. Why iPhone .mov files break elsewhere

Since iOS 11, iPhones record HEVC (H.265) video in a .mov container by default. This can cause two problems.

A: the .mov container

.mov is Apple’s QuickTime container. Its structure is almost the same as MP4, but some older players, editors, and upload services do not accept it.

B: hev1 vs hvc1 tag

HEVC video is stored under one of two codec tags:

Tag Where decoder config lives Compatibility
hev1 Inline in the bitstream Apple players (QuickTime, iOS, Safari) may refuse it
hvc1 In the container sample description The tag Apple recommends; plays in QuickTime, iOS, Safari

The iPhone itself writes hvc1. Some third-party editors, and FFmpeg when it re-encodes, can produce hev1 instead, and Apple players (QuickTime, Safari, iOS) may refuse to play that. Setting the tag back to hvc1 with FFmpeg fixes it (FFmpeg wiki H.265).

2. The fast fix: remux + hvc1 tag

This takes seconds, loses no quality, and fixes both the container and the tag.

ffmpeg -i iphone.mov -c copy -tag:v hvc1 -movflags +faststart iphone.mp4
  • -c copy — copies the streams without re-encoding
  • -tag:v hvc1 — sets the hvc1 tag on the video stream
  • -movflags +faststart — moves the moov atom (the file’s index) to the front, so web players can start before the whole file has downloaded

The video is still HEVC. It plays where HEVC is supported, such as QuickTime on a Mac. The built-in Windows apps cannot play it without the HEVC Video Extensions (see Troubleshooting). For those, re-encode to H.264 as shown in the next section.

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

For older devices that cannot decode HEVC at all (Windows 8-era PCs, older Android phones, some smart TVs), re-encode to H.264. An H.264 file is larger than HEVC at the same visual quality, but it plays almost everywhere.

ffmpeg -i iphone.mov \
  -c:v libx264 -crf 20 -preset medium -pix_fmt yuv420p \
  -c:a aac -b:a 192k \
  -movflags +faststart \
  iphone_h264.mp4
  • -crf 20 — high quality (18–23 is the usual range)
  • -preset medium — a balance between speed and file size
  • -pix_fmt yuv420p — makes 8-bit video that almost every player supports. Without it, a 10-bit HDR clip becomes 10-bit H.264, which many devices cannot play.
  • -c:a aac -b:a 192k — encodes the audio as AAC at 192 kbps. iPhone audio is usually AAC already; this sets it explicitly.

iPhone 4K HDR footage also needs tone mapping from HDR to SDR. See the HDR to SDR guide.

Keeping portrait orientation

In an iPhone portrait video, the pixels are not rotated. The file carries rotation metadata instead. When you re-encode, FFmpeg rotates the pixels to match that metadata and then removes it, so the result stays upright without any extra option:

# FFmpeg applies the rotation metadata to the pixels automatically
ffmpeg -i iphone_vertical.mov \
  -c:v libx264 -crf 20 -preset medium -pix_fmt yuv420p \
  -c:a aac -b:a 192k \
  -movflags +faststart \
  iphone_vertical.mp4

If you add a rotation filter such as transpose here, the video is rotated a second time and ends up sideways. See the rotate/flip guide for details.

4. Batch conversion

macOS / Linux

for f in *.[mM][oO][vV]; do
  [ -f "$f" ] || continue
  codec=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of csv=p=0 "$f")
  if [ "$codec" = "hevc" ]; then
    ffmpeg -i "$f" -c copy -tag:v hvc1 -movflags +faststart "${f%.*}.mp4"
  else
    ffmpeg -i "$f" -c copy -movflags +faststart "${f%.*}.mp4"
  fi
done

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

Save this as iphone_to_mp4.bat, then drag MOV files onto it:

@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
set "tag="
for /f %%c in ('ffprobe -v error -select_streams v:0 -show_entries stream^=codec_name -of csv^=p^=0 "%~1"') do if "%%c"=="hevc" set "tag=-tag:v hvc1"
ffmpeg -i "%~1" -c copy !tag! -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 avoid converting at all, change the iPhone’s camera format:

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

After that, new recordings are H.264 (still in a .mov file), as Apple’s HT207022 describes. 4K at 60 fps and HDR video need HEVC, so they are not available with this setting.

Clips you have already recorded in HEVC still need converting.

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 Microsoft Store (a low-cost paid app), or re-encode to H.264.

No audio on the converted file

Why: Your player may not support the audio format.
Fix: Re-encode only the audio:

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

For H.264 video, leave out -tag:v hvc1.

Converting Live Photo .MOV

Why: A Live Photo is a .MOV clip of 1–3 seconds paired with a still image (HEIC, or JPEG under Most Compatible). The same conversion works:

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

If the clip is H.264 (recorded with Most Compatible), leave out -tag:v hvc1.

Audio drift after uploading to X (Twitter)

Why: iPhone video can have a variable frame rate (VFR). With correct timestamps, VFR sound and picture stay in sync, but a tool that ignores the timestamps can put them out of step.
Fix: First check that the original plays in sync. If it does, try uploading a copy with a constant frame rate (CFR):

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

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

Slow-motion video plays at normal speed

Why: Slo-mo clips are recorded at normal speed with a high frame rate, such as 240 fps. The Photos app slows them down when it plays them. Other players play them at the recorded speed.
Fix: Slow the clip down yourself (240 fps footage played at 30 fps runs at 1/8 speed):

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

setpts=8*PTS makes the video play at 1/8 speed. To slow the audio as well, replace -c:a copy with -filter:a "atempo=0.5,atempo=0.5,atempo=0.5" -c:a aac. atempo cannot go below 0.5, so three in a row give 1/8.

FAQ

Q1. What’s the difference between .MOV and .mp4?
A. Their structure is almost the same. .mov is Apple’s original QuickTime format, and .mp4 is the ISO standard (MPEG-4 Part 14). When the codecs inside are the same, moving the streams from one to the other (remuxing) is quick and simple.

Q2. Does remuxing change file size?
A. Hardly. Only the container headers change; the video and audio data are copied unchanged.

Q3. Can I convert with Apple’s built-in apps?
A. QuickTime Player on a Mac can export H.264 with File → Export As (4K, 1080p, 720p or 480p), but only as a QuickTime movie (.mov), not as MP4. In Finder you can also select videos and choose Services → Encode Selected Video Files. FFmpeg gives you more control when you need specific settings.

Q4. Should I add -tag:v hvc1 to H.264 videos too?
A. No. That tag is only for H.265. On H.264, FFmpeg rejects it with Tag hvc1 incompatible with output codec id '27' (avc1). H.264 files get the avc1 tag by default without any extra option.

Q5. How do I view iPhone 4K HDR footage on a regular PC?
A. iPhone HDR video is recorded in Dolby Vision (HLG-based HEVC 10-bit). On a screen without HDR support, the brightness and colors may look wrong. Convert it with tone mapping:

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

For details, see HDR to SDR Tonemapping.