faststart
MP4 · MOV · M4V · lossless

Slow to start?
The index is at the end.

A video player can't begin until it has read the file's index, the moov box. Many tools write it last, so the browser has to fetch the end of the file before it can play the beginning. This moves it to the front. Same video, same quality, same size.

Start of fileEnd
mdat · media moov

The player reads left to right. With moov last, it has to jump to the end first. faststart puts it straight after the header.

Check your videos

Drop files below. The page reads only the box headers and the index, never the video itself, so large files are fine and nothing leaves your computer.

A 4-second test clip, saved the slow way.

What actually happens

An MP4 is a row of boxes. Three matter here.

01 · ftyp

The header

A few bytes that say what kind of file this is. Always first.

02 · mdat

The media

All the compressed video and audio. This is almost the whole file.

03 · moov

The index

Where every frame lives, the duration, the tracks. The player needs it before frame one. Moving it means rewriting the chunk offsets inside it, which is all faststart changes.

For folders, servers and CI

The command-line version checks whole media folders and exits non-zero when it finds a slow file, so it can guard an upload step or a build.

# install
pip install git+https://github.com/peakxdev/faststart

# list slow files (exit 1 if any)
faststart check media/

# write fixed copies, or replace in place after verifying
faststart fix media/ -o fixed/
faststart fix clip.mp4 --in-place

Encoding new files yourself? Add -movflags +faststart to your ffmpeg command and they'll be right from the start.

Questions

Does it re-encode or change quality?
No. The video and audio bytes are copied untouched. Only the index moves, and its offsets are updated to match.
Is anything uploaded?
No. The page is static and the work happens in your browser. Check the network tab if you like.
How big a file can it handle?
Large ones. It reads the index (usually well under a megabyte) and stitches the rest together from slices of your original file.
What about WebM or MKV?
Those use a different layout and aren't covered. Fragmented MP4, the kind used for streaming, is already fine and is left alone.