Measuring video quality: PSNR, SSIM and VMAF
What each quality metric actually measures, why PSNR misleads, and how to use VMAF without fooling yourself.
Updated
“Does this encode look good?” is a question about human perception, and the only unimpeachable answer is a room full of people scoring clips. That is slow and expensive, so the industry uses metrics: numbers computed from the pixels that try to predict what those people would have said.
They work well enough to be indispensable and badly enough to be dangerous.
PSNR: the one everybody starts with
Peak signal-to-noise ratio measures the average squared error between the original and the encode, expressed in decibels. Higher is better; 40 dB is generally excellent, 30 dB is visibly compressed.
PSNR is trivial to compute, which is why it is everywhere, and it has one fatal habit: it treats all error as equal. A codec that smooths away film grain scores well because the average error is small, while a codec that preserves grain but shifts it slightly scores badly, even though a viewer prefers the second. PSNR is also blind to where the error is, so damage in the middle of a face counts the same as damage in an out-of-focus corner.
Use it to catch gross breakage, not to choose between two reasonable encodes.
SSIM: structure instead of error
Structural similarity compares local patterns of luminance, contrast and structure rather than raw pixel differences. It correlates better with human judgement than PSNR because it recognises that changing every pixel slightly is less objectionable than destroying an edge.
SSIM scores run 0 to 1, and the useful range is uncomfortably compressed: almost everything acceptable lands between 0.95 and 1.0, so differences look tiny when they are not. MS-SSIM, the multi-scale version, is the one worth using if you use SSIM at all.
VMAF: a model trained on opinions
Netflix’s Video Multi-Method Assessment Fusion takes several elementary metrics and fuses them with a model trained on actual human scores. The output is a 0 to 100 scale designed so the numbers mean something to a person: about 93 and up is generally indistinguishable from the source, 70 is watchable, 50 is visibly rough.
VMAF is the best general-purpose option available, and our codec comparisons are scored with it. It has real caveats.
It was trained on a particular viewing setup. The default model assumes a 1080p display at a normal living-room distance. Score a 4K encode with it, or a clip destined for a phone, and the number is answering a question you did not ask. There are separate models for 4K and for phone viewing; use the one that matches.
It can be gamed. Sharpening a video before encoding raises its VMAF score without making it more faithful to the source, which is the opposite of what a fidelity metric should reward. Netflix’s answer is NEG mode (no-enhancement gain), which withholds credit for that kind of enhancement. NEG began as a separate model for the v0 generation; with the v1 models released in June 2026 it is on by default. Research has since shown NEG is harder to game rather than impossible, so treat a suspiciously good score as a prompt to look at the frames.
It says nothing about temporal artifacts. VMAF scores frames and averages them. Judder, pulsing between GOPs, and flicker in flat areas can all leave the average untouched while ruining the watch.
How to use metrics without being fooled
Compare like with like. A metric is meaningful when comparing two encodes of the same source at the same resolution. Comparing scores across different content tells you which clip is easier to encode, not which encoder is better.
Use BD-rate for codec comparisons. Bjøntegaard-Delta rate answers the question people actually mean: at matched quality, how much less bitrate does codec A need than codec B, averaged across a range of rates. A single score at a single bitrate is nearly meaningless, and it is why serious codec claims are stated as BD-rate percentages.
Always look at the frames. Every metric has failure modes, and the cheapest check in the business is opening the two files side by side. That is what the comparison slider exists for: the scores are printed next to encodes you can actually inspect, rather than quoted on their own.
Beware averages. A clip that scores 95 on average can contain a two-second stretch at 60 in the shot everybody remembers. Percentiles and per-frame plots catch what the mean hides.