Short answer
IntactFile diagnoses and repairs "moov atom not found" MP4s in your browser — drop the file and it runs entirely on your device, with 0 bytes uploaded (open the Network tab and watch: no request carries your video off the machine). It fixes files today when the moov atom survived in damaged, truncated, or mis-offset form, rebuilding a working index for your frames with nothing to install. The honest limit: reconstructing the index for a file with no moov atom at all is still in development — if yours is missing entirely, untrunc is the current recommendation.
Repair the file now
- Drop the file
- Repair runs locally
- Download the result
Drop the MP4 above. The tool reads it locally and reports whether the moov is damaged or absent entirely, which decides the repair path. Nothing is installed and nothing is uploaded.
Where the engine stands, honestly: the structural remux repair (for files whose moov exists but is damaged, truncated, or mis-offset) runs today. Full index reconstruction for files with no moov at all is in development.
What the error means
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x...] moov atom not found Invalid data found when processing inputAn MP4 stores your compressed frames in one large block (the mdat atom) and, separately, the moov atom: the index that records where every frame starts, how long it lasts, and how audio and video interleave. The moov is written when recording is finalized, because frame sizes and counts aren't known until encoding ends. A crash, power cut, or full card before that moment leaves the data block on disk and the index nowhere.
That's why the second ffmpeg line says invalid data: the demuxer isn't reporting destroyed footage, it's reporting that it has no index to interpret the footage with. Different problem, and a far more fixable one.
Why ffmpeg can't fix this
If you're here, you've probably already tried ffmpeg -i broken.mp4 -c copy out.mp4 and maybe -movflags faststart. Both failed for the same reason: they operate on the output of a successful read. Stream copying needs the demuxer to hand it packets; faststart relocates a moov that must already exist. When the input has no moov, the read fails before either flag matters. This isn't a flag you haven't found; it's a genuine boundary of what a converter can do. Fixing the file means reconstruction, not conversion: scanning the raw data block for frame boundaries and rebuilding the sample tables from what's found.
vs. untrunc — and where our engine stands
untrunc is the established free tool for exactly this reconstruction, and it works. The friction is real, though: you compile it yourself (or trust a third-party build), run it from the command line, and it requires a reference file: a healthy recording from the same device with the same settings, used to interpret the raw frames in the broken file.
Our position, stated plainly: IntactFile's in-browser engine performs structural remux repair today: files whose moov survived in damaged form. The untrunc-class reconstruction of a file with no moov is in development, and we won't pretend it ships before it does. If your moov is missing entirely and you need the fix this minute, untrunc is the honest recommendation; if the diagnosis above shows a damaged-but-present index, the browser repair handles it now — no compiling, no reference hunt, no upload.
What this can and can't fix
Rebuilding an index, by any tool, works when the media data survived. It usually did: mdat is written continuously during recording, so everything up to the interruption is physically in the file. What no software can do is repair a file whose data was never written. The tell is size: an "hour-long recording" occupying 12 KB, or a file that reads as mostly zeros because the SD card died mid-write, has nothing inside to index. Check the size against the recording length before spending time on any tool — ours or anyone's. And a failed repair is never charged.