How to Check Video Quality When You Don't Have the Original
Every well-known video quality metric has the same hidden requirement: a second file. SSIM, PSNR and VMAF all measure distortion relative to a reference. Feed them one video and they have nothing to say.
That is fine in an encoding lab, where you always have the master. It is useless in the situation most people are actually in: someone sent you a file, you suspect it is bad, and the original is not yours to have.
This is a no-reference problem, and a surprising amount of it is solvable.
What can be measured from one file
Bitrate against what the picture needs. A bitrate on its own means nothing — 5 Mbps is generous at 720p and starved at 4K. Divide by pixels and frame rate and you get bits per pixel per frame, which is comparable across any resolution. That single ratio catches the commonest real fault there is: a file upscaled to a big resolution without the bits to fill it.
Focus and noise, the same way as for a still, measured across frames sampled through the clip.
Compression blocking. Heavy encoding leaves structure on an 8-pixel grid. Measure how much of the frame’s edge energy sits exactly on that grid versus everywhere else.
Frozen frames. A repeated frame compresses to almost nothing, so in the compressed data a freeze is a ~36-byte packet sitting beside a 300KB median. You can find every freeze in a clip without decoding a single frame.
A padded frame rate. A file that says 60fps but was shot at 30 contains each picture twice. Count how many sampled frames are identical to the one before.
Frames that never arrived. If the gaps between frame timestamps are otherwise perfectly regular and then one is four times too long, something was dropped in capture or transfer.
What cannot
Be suspicious of any tool that claims otherwise.
Whether it was upscaled. This one looks tractable and is not. The obvious approach is to look for missing high-frequency detail, because upscaling invents no new detail. Measured across real footage, film grain and a correctly-exposed night scene both carry more energy in exactly that band than a clean native-resolution shot — because noise is broadband and fills it. The check calls grain “poor detail” and a real upscale “fine”. It is better to say nothing.
Whether it looks good. Every measurement above is about the file. Whether the shot works is not a measurable property and never will be.
A single number. You will see tools that produce one. Ask what it does with a video that is perfectly exposed, noise free, correctly encoded and completely out of focus. An average says 75%. The honest answer is that the file is unusable, which means the headline has to be the worst finding, not the mean of the findings.
One thing that is a measurement, not a finding
A number can be literally true and support no conclusion at all. Three real examples, all of which produced confident wrong answers before they were caught:
- A frame rate check is meaningless where the picture does not move. A title card, a slide, a locked-off shot — every frame is identical and the frame rate is entirely honest. Asking “are consecutive frames the same?” of still content and reporting “this file claims a rate it does not carry” is a false claim about how the file was made.
- A bitrate finding needs content to be about. Bits per pixel is a ratio against the frame’s dimensions. Six seconds of flat colour has a tiny one because the encoder had nothing to spend bits on. Telling someone to re-export at a higher bitrate would change nothing.
- The denominator is comparisons made, not samples taken. A one-frame video has no next frame to compare against. Reporting “every frame is a new picture” off zero comparisons is a confident answer computed from nothing.
The rule that falls out of all three: when a check cannot read a file, it should decline, and the report should say which checks declined. A missing row reads as a bug; a silent guess reads as a fact.
Try it
Upload one video and DiffALL reports bitrate, focus, noise, compression and frame rate, each with its own verdict and the measurement behind it, plus any frozen frames or gaps it found and where they are. Twenty seconds are sampled across the window rather than read end to end, because a median and a worst moment do not need a reading per second.
If you do have both files, compare them directly — a reference changes the question from is this file healthy to exactly what did this step cost, and that is a sharper answer when you can get it.
No original to compare against? DiffALL measures one file on its own and names what is wrong with it.
Check a file — free