Fast-start an MP4 (move moov to head)
MP4 files with the moov atom at the tail refuse to fast-start on mobile browsers, cloud storage previews, and most chat clients - the player has to buffer the whole file before playback begins. Wave rewrites the moov to the head in seconds without touching a video frame.
What actually changes
An MP4 file is a series of boxes (atoms in QuickTime speak) that hold either data or metadata. The moov atom is the metadata index - it lists every video and audio sample in the file, where each sample lives, how long it plays, what codec parameters it needs. The mdat atom is the actual media data - the compressed video and audio bytes. Players need the moov before they can play a single frame, because the moov tells them where in the file each frame is.
Where the encoder writes the moov depends on how it wrote the file. Real-time encoders (screen recorders, camcorders, Zoom, Teams, GoPro, iPhone in some modes) write the mdat as they encode and the moov at the end, once they know the final duration. Post-processing encoders (HandBrake with fast-start enabled, Wave, ffmpeg with `-movflags +faststart`) write the moov at the front, so a player fetching the file sequentially finds the metadata first and can start playing immediately.
The playback failure this fixes: an MP4 with the moov at the tail requires the player to either buffer the whole file (mobile browsers on slow connections) or make a seek-request to the end of the file (which requires an HTTP range request the server supports, which cloud storage often does not for embedded previews). On a 3 GB video that's a two-minute stall before playback starts. Fast-start rewrite runs in seconds and makes the same file play instantly.
Wave rewrites the moov atom without decoding a single video frame or audio sample. The operation opens the source MP4, reads all the atoms, produces an output MP4 with the moov as the second box (after ftyp) and the mdat with all its samples immediately after. The video and audio content is copied through bit-for-bit; only the index moves. This is the same operation ffmpeg's `-movflags +faststart` performs; the same operation HandBrake's "Web Optimized" checkbox performs; the same operation QuickTime Player's "Save As" with the "Ready for streaming" option performs. Wave does it in the browser, on any MP4 up to 8 GB.
Three steps.
-
01
Step 1
Drop your MP4 onto Wave. Wave detects the current moov placement and confirms whether the file already fast-starts.
-
02
Step 2
For files with moov at the tail, Wave runs the fast-start rewrite: no re-encoding, seconds to complete.
-
03
Step 3
Save the output. The MP4 now plays inline in every mobile browser, cloud storage preview, and chat client.
Answers, specifically.
What is the moov atom?
The metadata index of an MP4 file. It tells the player where every video and audio sample lives, how long each plays, and what codec parameters to use. Players cannot start playback without reading it first, which is why its placement in the file (head vs tail) determines whether the video fast-starts or has to buffer the whole file. See What is the moov atom? for the deeper explanation.
Which recorders write the moov at the tail?
Most real-time capture: Zoom local recording, Teams recording, iPhone Camera (in some modes), GoPro cameras, most action cameras, some screen recorders, OBS Studio when configured for MP4 output. Any recorder that doesn't know the final file duration in advance writes the moov at the tail because it can only construct the metadata after the recording ends.
How do I tell if my MP4 fast-starts?
Wave shows the moov position on the inspect screen after you drop the file. Command line: `MP4Box -info file.mp4 | grep -A1 moov` shows the offset. Practical test: upload the file to Google Drive, click Preview - if playback starts within 5 seconds, it's fast-start; if you wait for the whole file to download first, it's not.
Does fast-start rewrite lose any quality?
No. The rewrite copies the video and audio streams bit-for-bit; only the container index moves. Every frame in the output is byte-identical to the corresponding frame in the input.
How long does the rewrite take?
Roughly disk-copy speed. A 4 GB file rewrites in about 30-90 seconds on modern hardware - Wave has to read the whole file to find the atoms, then write it back with the moov relocated. There's no CPU-heavy encode step.
Every Wave MP4 output is already fast-start?
Yes. Wave writes moov at the head for every MP4 it produces, whether the source was a MOV, an MKV, a WebM, or another MP4 that needed the container swap. This is the default and cannot currently be turned off.
What about the moov at the tail for streaming server generation?
Modern streaming (HLS, DASH) uses a different structure - fragmented MP4 (fMP4) with multiple small moov + mdat pairs, each independently playable. Fast-start on a monolithic MP4 is for the "one file, seek anywhere" use case. If your goal is to serve a video as HLS, the fragmented workflow is different and needs a segmenter (ffmpeg's `-f hls` output).