MP4 / MOV Structure Inspector
See the container structure, codec parameters and true bitrate of an MP4/M4A/MOV - and diagnose what breaks streaming.
Whether a video can stream, what its bitrate really is, which codec it uses - the answers are all inside the container, but no player surfaces them. This tool walks the box tree of an MP4/M4A/MOV byte by byte per the ISO-BMFF specification: from the ftyp brands through the moov track definitions down into the avcC/esds codec records, with every box's byte offset and size shown alongside.
Parsing runs in your browser and never uploads the file. Beyond listing parameters it runs self-diagnostics: whether moov sits before mdat (which decides if streaming works), whether the file is fragmented (fMP4), and whether duration and timescale look trustworthy - the direct causes behind "transcoding failed" and "seeking takes forever" complaints.
Why moov position decides the playback experience
All container metadata lives in the moov box: a player must read it before it can decode anything. When moov sits at the head of the file (faststart), progressive playback just works; when it sits at the tail, the player must download the entire file before the first frame - the classic reason videos on file-hosting services take ages to start or seek. The fix is a remux with ffmpeg -movflags +faststart, which takes seconds and does not re-encode.
Why actual and declared bitrates disagree
The btrt box or the encoder declares a target bitrate, but the real one comes from summing every sample's actual byte count in the sample-size (stsz) table. Large gaps mean one of two things: simple content (static shots, speech) uses far less than the target, or a fragmented file scatters its statistics across moof boxes so the header numbers are stale. This tool prefers the value computed from actual bytes.
The box tree is an X-ray for file health
ISO-BMFF nests everything in boxes named by four-character types. The structure view lists each box's type, offset and size: mdat should occupy nearly all of the file, moov typically tens to hundreds of KB. Zero-length boxes, a missing moov or a truncated tail are reliable signs of an incomplete download or a corrupted file. M4A audio and MOV video use the same container and are supported here too.
Frequently asked questions
- Is my video uploaded?
- No. Parsing reads the file's bytes in your browser with no upload path. Even multi-hundred-MB files are fine - only the header and moov regions are actually examined.
- Which files can it parse?
- The whole ISO-BMFF family: MP4 (.mp4/.m4v), audio (.m4a/.mp4a), QuickTime (.mov), including iPhone HEVC recordings. WebM/MKV use a different container (EBML) and are out of scope.
- How do I move moov to the front?
- Remux with ffmpeg: ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4. The -c copy flag means no re-encoding - it finishes in seconds with zero quality loss.
- Is a fragmented file (fMP4) broken?
- No. fMP4 is the standard for streaming (DASH/HLS): metadata is distributed into each fragment so recording and playback can start before the file is complete. It is only awkward for plain downloads, where some older players mishandle total duration - a remux to regular structure fixes that.