VidKeep

Troubleshooting

Is That Download Actually Complete?

Portrait of Daniel Okafor, VidKeep engineer
Daniel OkaforVideo-tools engineer, VidKeep
· Published 2026-08-01 · Updated 2026-08-01 · 6 min read
Download options showing the expected file size for each quality

A partial download behaves in one of two ways, and only one of them is obvious. Either the file refuses to open at all, or it plays normally and stops early — reporting the full duration while containing a fraction of the video. The second kind is what ruins flights and presentations, because it looks fine until the moment it matters.

Why some broken files play and some do not

An MP4 keeps an index describing where everything is. Whether a truncated file opens depends entirely on where that index sat.

We tested both. A 30-second video cut to a third of its bytes with the index at the end produced moov atom not found and would not open at all. The same video prepared with the index at the front, cut identically, reported a duration of 30 seconds, opened happily, and threw partial file errors as it ran out of data.

Index positionTruncated file behaves as
At the end (default)Will not open — obvious failure
At the front (streaming-optimised)Opens, claims full duration, stops early

The second row is the dangerous one. The file reports the right length because the index was written before the data was cut off — the metadata describes a video that is no longer entirely there.

Download options showing the expected file size for each quality
The size shown before downloading is what you compare against afterwards.

The thirty-second check

  1. Compare the file size to what was promised. A few per cent off is normal; a third of the expected size is a truncated download.
  2. Skip to the last minute. Drag the playback position near the end rather than watching from the start. A partial file fails there and nowhere else.
  3. Check the reported duration matches the source. If the platform said ten minutes and the file says four, it stopped early in a way that also broke the index.

Step two is the one that matters and the one nobody does. Playing the first ten seconds proves the file opens, which is a different question from whether it is whole.

Do it before the moment you need it. A file checked at home is a minor inconvenience if it is wrong; the same file discovered on a plane or in front of an audience is not recoverable.

The technical check, if you want certainty

ffprobe, which ships with ffmpeg, reads a file without playing it:

ffprobe -v error -show_entries format=duration,size -of default=nw=1 video.mp4

A whole file answers with a duration and a size. A badly truncated one reports moov atom not found instead — the index is missing, so there is nothing to read.

For the deceptive case, decode the whole thing without producing output:

ffmpeg -v error -i video.mp4 -f null -

Silence means the file decoded end to end. Any output — partial file, Invalid data, errors about frames — means it did not, whatever the duration claimed. On our test the streaming-optimised truncated file passed the first check and failed this one, which is exactly the pattern to catch.

What a partial file cannot be

Worth stating plainly because it saves time spent on the wrong idea.

It cannot be repaired. The missing data was never received. Tools advertising video repair rebuild an index so a file opens; they do not restore content, and the video still stops where the download did.

It cannot be resumed. A file assembled for you does not exist on a server to continue from, so the transfer restarts — covered in full here.

The part that arrived is genuinely fine. If you only needed the first two minutes, a truncated file containing them is usable. Nothing is wrong with the data that made it; there is simply less of it.

What causes truncation in the first place

All four produce the same result and none announces itself. Which is why the check matters more than the cause: you cannot prevent every interruption, and you can always verify what you ended up with.

Building the habit into an archive

For anything you are keeping rather than watching immediately, verification belongs in the routine.

Check on arrival, not on use. The gap between downloading and needing a file is where the source disappears — deleted posts, closed accounts, expired VODs.

Record the expected size. A line in a text file beside the video makes the comparison possible months later, when nothing else remembers what it should have been.

Verify before deleting anything. The one irreversible step in archiving an account is the deletion, and it should come after the files are confirmed — the order of operations matters.

Re-download while you still can. A truncated file discovered today is a minor annoyance; the same file discovered after the source is gone is a permanent loss.

Why we cannot verify this for you, and what we do instead

The obvious question is why a service that sends you a file cannot confirm it arrived intact. The answer is that we genuinely cannot see the outcome, and it is worth explaining where our knowledge ends.

We stream the file out in chunks. From our side, success means the last chunk was handed to the network — not that it reached your device, not that your browser wrote it fully to storage, and certainly not that the file on your phone is complete. Everything after that hand-off is invisible to us, and any claim we made about it would be a guess.

What we do instead is give you the number to check against. Every quality carries the file size the platform reports, shown before you commit, and that figure is what makes the comparison in this article possible at all. Without it there is nothing to compare a finished download to — which is precisely the situation on tools that reveal size only after the fact, or not at all.

We also pass through Content-Length whenever the source provides it. That is what gives your browser a progress bar and lets it recognise a transfer that ended early. A download with no declared length looks the same whether it finished or stopped, and browsers treat unknown-length transfers with more suspicion for exactly that reason.

The limit worth admitting: where a platform reports no size, we show a blank rather than an estimate, so for those downloads the size comparison is unavailable and the playback check is all you have. TikTok is the common case. An invented figure would restore the appearance of a check while removing its value, which is worse than the gap.

The wider principle is that a service should be honest about where its knowledge stops. We know what the platform reported, what we fetched and what we sent. We do not know what happened on your device, and a progress bar that claims otherwise is describing our side of the connection while implying yours.

Frequently asked questions

How do I know if a downloaded video is complete?

Compare the file size to what was shown before downloading, then skip to the last minute and confirm it plays there. Playing the beginning proves nothing.

Why does a broken file sometimes play normally?

Because its index was written before the data was cut off. The file reports the full duration and stops early — the metadata describes a video that is no longer all there.

Can a partial video be repaired?

No. The missing data was never received. Repair tools rebuild the index so a file opens; the video still stops where the download did.

What does 'moov atom not found' mean?

The index that describes the file's contents is missing, usually because the download stopped before the end. It is the obvious kind of truncation.

Can I resume an interrupted download?

Usually not. A file assembled for you does not exist on a server to continue from, so the transfer restarts.

Why can the service not check the file for me?

We only know the last chunk left our server. Whether it reached your device and was written fully is invisible to us — which is why we show the expected size instead.

Try it yourself

VidKeep runs in your browser — paste a link, pick a quality, keep the file. No account, no app.

Open VidKeep

Last updated: 2026-08-01. We revise our guides as the platforms change.