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 thehvc1tag 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:
- Settings → Camera → Formats
- 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.