Last updated
Why moov placement matters
A player needs moov before it can decode anything. When moov is at the end, a browser must first request the end of the file with an extra HTTP range request — or, if the server does not support range requests, download the entire file before showing the first frame. On slow connections this shows up as a long delay before playback starts.
Three ways to check
| Method | How |
|---|---|
| VideoZ | Drop the file above and read “Web streaming (faststart)” in Diagnostics. |
| ffprobe | ffprobe -v trace -i input.mp4 2>&1 | grep -m1 -e "type:'moov'" -e "type:'mdat'" — the first match tells you which comes first. |
| Remote file | curl -s -r 0-63 https://example.com/video.mp4 | xxd — look at which box type follows ftyp. |
How to fix it
Remux with faststart. -c copy copies the streams without re-encoding, so it takes seconds and does not change quality. In HandBrake, tick “Web Optimized”.
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4
Frequently asked questions
- Does faststart reduce video quality?
- No. It only moves the moov box to the front of the file; the audio and video data are copied unchanged.
- Do fragmented MP4 files need faststart?
- No. Fragmented MP4 (used by HLS and DASH) puts a small moov at the start and carries timing in each fragment, so it can play progressively already.
- Does YouTube need faststart?
- YouTube’s recommended upload settings list “moov atom at the front of the file (Fast Start)”, so it is good practice for uploads as well as web playback.