Updated November 2026: the HDR-VMAF v1.1.8 models Netflix released on 26 October 2026 and how to run them, libvmaf 3.2.1, FFmpeg 9.0 usage, and new FAQ answers on HDR and on why VMAF replaced PSNR and SSIM.

What is VMAF? The short answer

VMAF (Video Multimethod Assessment Fusion) is Netflix's open-source, full-reference video quality metric: it compares a compressed video with its original and predicts, on a 0–100 scale, how good the copy looks to a human viewer. It fuses several simple quality measurements with a machine-learning model trained on human opinion scores, which is why it tracks the eye better than PSNR or SSIM. Higher is better: scores in the 90s are what streaming services target for premium video, and a gap of about 6 points is the smallest difference most viewers notice. A VMAF number only means something with its model named: the long-standing default is vmaf_v0.6.1, in June 2026 Netflix released the v1 models, which add banding and colour awareness, and on 26 October 2026 it added HDR-VMAF v1.1.8, the first official models for HDR video.

Question VMAF at a glance
Full formVideo Multimethod Assessment Fusion
Who made itNetflix, with the University of Southern California, University of Nantes and UT Austin; open-sourced in June 2016
TypeFull-reference: needs the original video to compare against
Scale0–100 per frame, pooled to one number (the v1 4K-at-3H model runs to 110)
Higher or lower is better?Higher. A lower VMAF value means worse picture quality
Just-noticeable differenceAbout 6 points; gaps under about 2 points are noise
Models to namev0: vmaf_v0.6.1, phone, vmaf_4k_v0.6.1; v1 (2026): vmaf_v1.0.16 1080p, phone, 4K; HDR (October 2026): hdr_vmaf_v1.1.8
Main toolFFmpeg libvmaf filter (GPU: libvmaf_cuda) or the vmaf command-line tool
Not valid forLive or user-generated video with no master; comparing scores from different models

Why this matters

VMAF is the quality number the streaming industry now argues in. It decides bitrate ladders, settles "which encoder is better" debates, gates releases, and shows up in every modern FFmpeg quality report — usually quoted as a bare "VMAF 95" with no model named, which is the single most common way engineers fool themselves with it. This article gives you the metric in full: the fusion idea that makes it perceptual, the training that grounds it in human opinion, the score scale and the just-noticeable-difference threshold, the model-selection rules, and the blind spots you must name before you trust a number. It is the deep dive that the encoder-side quality-metrics overview in our Video Encoding section points to.

What VMAF actually is

Start with the problem VMAF was built to solve. PSNR measures pixel error and correlates weakly with what people see. SSIM measures structural similarity and tracks the eye better, but it still measures only one kind of thing, and it saturates near the top of its scale where streaming-grade encodes live. Netflix, grading thousands of encodes a day across a vast catalogue, needed a number that matched human opinion closely enough to drive real bitrate decisions. No single existing metric did the job on all their content.

Their answer was to stop looking for one perfect measurement and instead combine several imperfect ones. The full name says it: Video Multimethod Assessment Fusion. VMAF takes a handful of established quality measurements — each good at catching a different kind of damage — and fuses them with a model that learned, from human ratings, how to weigh them. The result is a single score from 0 to 100 that predicts the Mean Opinion Score a panel of viewers would give the clip (Netflix Technology Blog, "Toward a Practical Perceptual Video Quality Metric", June 2016).

Two facts about VMAF frame everything else. First, like PSNR and SSIM, it is a full-reference metric: it needs the pristine original on disk to compare the impaired video against, frame for frame. No reference, no VMAF — which rules it out for live and user-generated content with no master to compare (the three setups are covered in full-reference, reduced-reference, no-reference metrics). Second, VMAF is trained, not derived. PSNR comes from a formula; VMAF comes from a model fitted to human scores. That is why it is more accurate, and also why it carries baggage a formula never would — a training set, a viewing condition, and a way to be gamed.

A short VMAF timeline

Year What changed Why it matters today
2016Netflix open-sources VMAF (VIF, DLM and motion fused by an SVM)The v0 design most published numbers still use
2017–2018Phone model, then the 4K model and bootstrapped confidence intervals (2018)Name the viewing condition; read the error bars
2020libvmaf v2 API and the NEG (no-enhancement-gain) modelEncoder comparisons that sharpening cannot game
2021CAMBI banding detector; Technology and Engineering Emmy for VMAFBanding becomes measurable
2023libvmaf v3.0.0 with CUDA supportGPU scoring in FFmpeg via libvmaf_cuda
June 2026VMAF v1 models (vmaf_v1.0.16) in libvmaf v3.2.0Banding, colour and NEG built in; do not mix with v0 scores
October 2026HDR-VMAF v1.1.8 models (hdr_vmaf_v1.1.8) added to Netflix/vmaf on 26 OctoberHDR10 and other PQ content finally has an official VMAF model

Sources: Netflix Technology Blog posts listed in the references, the Netflix/vmaf repository news and releases (accessed 2026-11-11).

The fusion idea: what VMAF combines

Here is the analogy to carry through the article. PSNR is a single judge who only counts spelling mistakes. VMAF is a small panel of specialist judges — one watches for lost information, one watches for lost detail, one watches how the picture moves — and a chairman who learned from experience how much to trust each judge on each kind of footage. The panel beats any single judge because each specialist catches something the others miss.

In the original and long-dominant VMAF design (the "v0" generation, models named vmaf_v0.6.1 and friends), the panel had three kinds of judge.

Visual Information Fidelity, or VIF — how much of the picture's information survived. VIF treats the original frame as a source of visual information and asks how much of that information makes it through compression to your eye, modelled on how the human visual system takes in a scene. It is computed at four spatial scales, from coarse to fine, so it notices both broad and fine losses (Sheikh and Bovik, "Image Information and Visual Quality", IEEE Transactions on Image Processing, 2006). When compression strips away the subtle texture of skin or foliage, VIF is the judge that reacts.

Detail Loss Metric, or DLM — how much fine detail was destroyed, separately from noise that was added. DLM splits the damage into two parts: detail that was lost (which makes the picture less clear) and impairment that was added (extra junk that distracts the eye), and it scores the detail loss on its own (Li, Zhang, Ma, and Ngan, "Image Quality Assessment by Separately Evaluating Detail Losses and Additive Impairments", IEEE Transactions on Multimedia, 2011). This is the judge that catches blur and the smearing-away of texture.

Motion — how much the picture is moving. VMAF measures the temporal difference between neighbouring frames — in the open-source package, the mean co-located pixel difference on the luma (brightness) channel. Motion matters because the eye forgives more distortion when the scene is moving fast; a still frame is scrutinised, a fast pan is not. Feeding motion into the model lets it calibrate how harshly to judge the spatial damage.

Each of these produces a number per frame. On its own, none is VMAF. The point of VMAF is what happens next.

How VMAF is built, read top to bottom. Three feature boxes in a row: information fidelity, VIF at 4 spatial scales, texture that survived; detail loss, DLM, detail versus noise, blur and smeared texture; motion, luma change per frame, fast pans hide damage. An arrow from each goes down into one wide box: trained model, Support Vector Regression, fitted to opinion scores from human viewers (MOS). An arrow from it goes down to the output: VMAF, 0 to 100, predicted viewer score. Note: VMAF v1 (2026) drops VIF and adds banding (CAMBI) and chroma features Figure 1. The classic VMAF (v0) design: per-frame features feed a model trained on human scores, which fuses them into one perceptual number. The 2026 v1 generation changes the feature set — see below.

How the model learned: training on human scores

The judges' scores are combined by a trained model — in the open-source VMAF, a Support Vector Machine regressor, a standard machine-learning model that learns a smooth mapping from a set of input numbers (the feature scores) to one output number (the predicted quality). It is "trained" in the literal sense: it was shown thousands of examples where the feature scores were known and the true quality was measured, and it fitted the weights that best reproduce the true quality from the features (Netflix Technology Blog, 2016).

Where did the "true quality" come from? From people. Netflix built a dataset of clips from its own catalogue, each ten seconds long, encoded at a grid of resolutions and quality levels to produce a wide range of impairments. Human viewers rated each one in a controlled lab test using the Absolute Category Rating method — watch a clip, score it on a scale from bad to excellent — defined in ITU-T P.910. Those raw opinions were cleaned of unreliable voters and noise into stable per-clip scores, then mapped onto the VMAF scale, where roughly "bad" lands near 20 and "excellent" lands at 100 (Netflix VMAF documentation, model notes, accessed 2026-10-10).

Can you get that ground truth yourself? Partly. The full training sets are not public, but Netflix publishes a sample, the NFLX Public Dataset, for training and testing custom models: YUV clips available on request through a Google Drive folder linked from the repository's datasets.md, with the expert score in each file name and non-expert mean opinion scores in the dataset file. The same page points to the VQEG HD3 subjective test (about 84 GB, from cdvl.org) as a second public set (Netflix/vmaf datasets documentation, accessed 2026-10-10).

This is the whole basis of VMAF's authority, and the reason to respect it: the metric is a model of human opinion, fitted to real human opinion. Remember the central rule of this section — every objective metric is a proxy validated against subjective scores, and the eye is the ground truth (the distinction is laid out in subjective vs objective quality). VMAF wears that relationship on its sleeve: it was literally built by regression onto subjective scores. When VMAF and a careful subjective test disagree, the test wins and the model failed on that content — the same as for any metric.

Reading a VMAF score: the 0-to-100 scale

VMAF runs from 0 to 100. Higher is better; 100 is the ceiling, reached when the encode is perceptually indistinguishable from the source under the model's viewing condition. The scale is designed to be roughly linear with human opinion, which is its great usability advantage over SSIM: a jump from 60 to 70 means about as much perceptual improvement as a jump from 80 to 90, so you can reason about differences arithmetically.

The rough, content-dependent bands are worth committing to memory. Below about 60, most viewers find the quality poor or annoying. Around 70 is fair — watchable but visibly compressed. Around 80 is good. The 90s are where streaming services aim for premium content: at roughly 93 and above, most viewers stop noticing compression under normal viewing. Treat these as orientation, not law — what a given VMAF "looks like" depends on the content, the screen, and the viewer, and only a subjective test is ground truth.

So what does a VMAF score mean in practice? Read it as a predicted viewer rating, not a percentage of the original: a lower VMAF value always means a worse-looking picture.

VMAF score (1080p, default model) What most viewers see Typical use
93–100Compression rarely noticed at normal viewingTop rungs of premium streaming ladders
80–93Good; artefacts visible on close inspectionMid ladder rungs, mobile delivery
70–80Fair; visibly compressed but watchableLow-bandwidth rungs
60–70Poor to fairEmergency rungs only
below 60Poor or annoyingUsually a failed encode

The bands are rules of thumb from Netflix guidance and industry practice, not a standard; screen, content and viewer move them.

The most useful single fact for working with VMAF is the just-noticeable difference, or JND: about 6 VMAF points. Netflix's guidance is that a difference of roughly 6 points is the threshold at which most viewers (more than half) start to notice a quality change. A delta under about 2 points is in the noise and irrelevant; deltas above 2 begin to matter; deltas of 6 or more are visible to most people (Netflix VMAF guidance, 2017). That single number turns VMAF from an abstract score into a decision tool, as the worked example below shows.

The VMAF scale from 0 to 100 as a bar with rule-of-thumb bands: poor below 60, fair 60 to 70, good 70 to 80, very good 80 to 93, and a green band from 93 to 100 where most viewers stop noticing compression. Below it, the worked example zoomed to 85 to 100: encode B at 93.4 (3.0 Mbps) and encode A at 95.2 (4.5 Mbps). A bracket marks the gap of 1.8 points; a longer orange bracket from B marks the just-noticeable difference of about 6 points. Notes: under 2 points is noise, 6 or more is visible to most viewers; gap 1.8 is noise, pick B and save 33% of the bitrate Figure 2. The VMAF scale and its bands are content-dependent rules of thumb. The ~6-point JND is the practical threshold: smaller gaps are below what most viewers notice.

A worked example: turning a VMAF gap into a bitrate decision

Numbers make this concrete. Suppose you are choosing between two encodes of the same master, measured with the same model (default 1080p) and the same pooling (mean), apples-to-apples on the same frames:

  • Encode A: 4.5 Mbps, VMAF 95.2
  • Encode B: 3.0 Mbps, VMAF 93.4

Work the two questions out loud. First, is the quality difference one a viewer would see? Subtract the scores:

VMAF gap = 95.2 − 93.4 = 1.8 points

That 1.8 is below the ~6-point JND, and even below the ~2-point "irrelevant" floor. Most viewers would not see the difference between A and B. Second, what does choosing B cost in quality and save in bandwidth?

bitrate saving = (4.5 − 3.0) / 4.5 = 1.5 / 4.5 = 0.333 = 33%

Encode B delivers a 33% bitrate saving for a quality drop most people will never notice. Multiply that across millions of streams and it is the difference between an affordable service and an expensive one — which is exactly why Netflix built VMAF, and why a metric that tracks the eye pays for itself (the broader argument is in the business case for measuring quality). The decision rests entirely on the JND: without it, 1.8 points looks like a real difference; with it, you can see the saving is nearly free.

One caveat the example needs. VMAF predictions carry uncertainty, and the 0.6.2 and 0.6.3 models can report a 95% confidence interval computed by bootstrapping the model on its training residuals (Netflix Technology Blog, "VMAF: The Journey Continues", October 2018). If Encode B's score is reported as 93.4 with a 95% interval of, say, ±1.2 points — the range [92.2, 94.6] — then a second run on slightly different frames could land anywhere in that band. A gap of 1.8 points between two encodes, with intervals that wide, is well inside the noise. Reporting VMAF without its interval, then treating a sub-point difference as real, is a classic error. VMAF gives you error bars; use them. The practical depth on models, pooling, and confidence intervals is the subject of VMAF in depth.

A VMAF score is meaningless without its model

This is the point that separates people who use VMAF well from people who quote it badly. "VMAF 95" is not a quality statement until you name the model. The default model was trained for one specific viewing condition — a 1080p HDTV in a living room, viewed from three times the screen height. Change the screen or the distance and the right model changes, because the same distortion is more or less visible depending on how big the picture is and how close you sit.

Netflix ships several models for exactly this reason. The classic v0 set, still the one most published numbers use, is (Netflix VMAF model documentation, accessed 2026-10-10):

  • The default model (vmaf_v0.6.1) predicts quality on a 1080p TV at three times the screen height. It is the right default for most living-room streaming.
  • The phone model, invoked with a phone-viewing option, predicts quality on a small handset screen. Because a phone is small and held at a comfortable distance, the same compression is less visible, so the phone model reports higher scores than the default for the same encode. An encode that scores 88 on the default model can score in the high 90s on the phone model — and both are correct, for their viewing conditions.
  • The 4K model (vmaf_4k_v0.6.1, added 2018) predicts quality on a 4K TV viewed from 1.5 times the screen height, the distance at which a viewer can actually appreciate 4K sharpness.

The 2026 v1 generation replaces this set with four models of its own, listed in the next section. Whichever generation you use, the tools still fall back to vmaf_v0.6.1 when no model is named: that is the default of FFmpeg's libvmaf filter (FFmpeg filter documentation, accessed 2026-10-10).

The rule is strict: a VMAF comparison is only valid when every number uses the same model, computed by the same tool and version, on the same frames at the same resolution. Compare a phone-model score against a default-model score and you are comparing two different questions. When you report VMAF, state the model — "VMAF 93.4, default v0.6.1 model, mean pooling" — never just "VMAF 93.4".

Table: one encode scored by three VMAF models. Default model, vmaf_v0.6.1, 1080p TV at 3 times screen height: 88. Phone model, phone option, handset at about 5 times screen height: 96, higher. 4K model, vmaf_4k_v0.6.1, 4K TV at 1.5 times screen height: 85. Each score is drawn as a bar on a 0 to 100 scale. Notes: all three numbers are correct, each for its own screen; compare only scores from the same model, tool, version and pooling Figure 3. The same encode scores differently under each model because each predicts a different viewing condition. Name the model, or the number is ambiguous.

VMAF v1: what changed in the 2026 models

VMAF v1 is the generation of VMAF models Netflix released in June 2026: it adds banding (CAMBI) and colour features, a new additive-impairment feature, viewing-distance-aware models for 1080p, phone and 4K, and NEG behaviour by default, and it drops the expensive VIF feature. It is the first substantial change to the feature set since the metric launched, and v1 scores are not comparable with v0 scores (Netflix Technology Blog, "VMAF v1: Good Is Not Good Enough", Bampis, Li, Swanson, Fons Miret and Madhusudanarao, June 2026). The models shipped in libvmaf v3.2.0, released on 20 June 2026 as the initial public release for v1; libvmaf v3.2.1, a small fix release, followed on 14 September 2026.

Five changes stand out. First, v1 adds a banding detector. Plain v0 was largely blind to banding — the staircase steps that appear in what should be a smooth sky or gradient — so an encode could band visibly while VMAF stayed high. V1 folds in CAMBI, Netflix's banding-artifact detector, as a feature, so the score now reacts to banding (banding itself is covered in banding: when smooth gradients break into steps). Second, v1 sees colour. V0 used only luma (brightness) features and was unaware of chroma artifacts like colour bleeding; v1 applies a modified SpEED-QA measure to the chroma channels so colour damage now affects the score. Third, v1 punishes compression artifacts more than downscaling. A new additive-impairment feature (AIM) is combined with DLM so blockiness and other distracting artifacts cost more than a clean, slightly softer picture. Fourth, v1 handles viewing distance inside the model: instead of v0's polynomial mapping for phones, it modulates DLM's contrast sensitivity function by the normalised viewing distance. Fifth, and surprising: v1 drops VIF. The information-fidelity feature that anchored v0 was the most expensive to compute, and with the new features it no longer paid its way, so v1 is faster than v0 while matching or beating it on most of Netflix's test datasets.

v1 model file Viewing condition Score range
vmaf_v1.0.16_3d0h1080p at 3× screen height (the classic living-room case)0–100
vmaf_v1.0.16_5d0hPhone: normalised distance 5× screen height0–100
vmaf_v1.0.16_1d5h_21604K at 1.5× screen height; Netflix's recommended default for most users0–100
vmaf_v1.0.16_3d0h_2160Consumer 4K TV at 3× screen height0–110 (the extra 10 is 4K's benefit over 1080p)

Source: Netflix/vmaf models_v1.md (accessed 2026-11-11). Each file has a high-frame-rate twin in the vmaf_v1.0.16_hfr folder.

Three practical notes. V1 is best computed at 10-bit precision even for 8-bit SDR content, because the extra precision helps it see banding; you can measure an 8-bit encode at 10 bits by preprocessing both inputs. The high-frame-rate variants for ~50/60 fps content use a wider five-frame motion window, which reduces v0's under-prediction on fast content, but Netflix's own documentation says they do not yet fully capture the effect of high frame rates. The headline for a working engineer: if you are starting a new measurement program, evaluate v1 (the 4K 1.5H model unless you have a reason to pick another); if you have a history of v0 numbers, do not mix the two in one comparison — re-baseline.

HDR-VMAF: the v1 models for HDR video (October 2026)

HDR-VMAF v1.1.8 is the HDR version of VMAF v1: four models, released by Netflix on 26 October 2026, that score HDR10 and other PQ-encoded video after converting both inputs to a common HDR target. Until then, VMAF had no official HDR model. The new files follow the SDR naming with an hdr_ prefix: hdr_vmaf_v1.1.8_3d0h (1080p at 3H, the default), _5d0h (phone), _1d5h_2160 and _3d0h_2160 (4K), each with a high-frame-rate twin (Netflix/vmaf README and models_v1.md, accessed 2026-11-11).

They behave differently from the SDR models in four ways:

  • Before computing any features, libvmaf converts the reference and the distorted picture to PQ with BT.2020 primaries in the ICtCp colour space, 4:2:0 at 16 bits. The conversion uses zimg, so libvmaf must be built with -Denable_zimg=true.
  • You have to describe the colorimetry of each input with --color_range_ref, --color_primaries_ref, --color_trc_ref and --color_matrix_ref (and the _dist versions). If any of it is missing, the library stops with an error that names the missing attribute rather than guessing. When both inputs are tagged PQ and no model is given, the vmaf tool picks hdr_vmaf_v1.1.8_3d0h by default.
  • Each HDR model scores at a fixed display resolution of 1080 or 2160 lines and scales both pictures to it, so a 3840x2160 pair on a 1080 model is scored at 1920x1080. The reference and the distorted video still have to be the same size.
  • Netflix warns that an SDR model run on HDR pictures applies no conversion and shows no warning, so the score it returns is not meaningful.

On accuracy, Netflix reports a Spearman rank correlation of 0.8471 on LIVE-HDR-VQA, 0.7420 on the HDR subset of ICME-2025 and 0.9316 on the HDR subset of LIVE-HDR-SDR for the 4K 1.5H HDR model, with more results promised in an upcoming paper. As of 11 November 2026 the models live on the Netflix/vmaf master branch and the newest tagged libvmaf release is still v3.2.1 from September, so using them means building libvmaf from source.

NEG mode: when the metric can be gamed

VMAF has one property that is a feature in delivery and a trap in codec comparison: it rewards image enhancement. Because it was trained to predict what looks good, sharpening or boosting contrast before encoding can raise the VMAF score, even though nothing about the compression improved — the encoder just learned to please the metric (Netflix Technology Blog, "Toward a Better Quality Metric for the Video Community", December 2020).

That is fine when you really did enhance the picture for viewers, but it corrupts an encoder-versus-encoder test, where you want to measure compression gain alone. Netflix's fix is VMAF-NEG — No Enhancement Gain — a mode that disables the score boost from enhancement so a sharpening trick cannot inflate the result. With v0, use the standard model to predict delivered quality and vmaf_v0.6.1neg when comparing encoders so nobody can game the comparison. In v1 the no-enhancement-gain behaviour is on by default, with no separate model to select (Netflix Technology Blog, June 2026), so a v1 score is already NEG-style. This "gaming the metric" problem, and exactly when to report NEG, is the subject of its own article, VMAF-NEG explained.

How to use VMAF: the minimum FFmpeg command

You will almost never run the model yourself; the everyday path is FFmpeg with the libvmaf filter, which wraps Netflix's library. The filter takes two inputs — the distorted clip first, the reference second — and writes a log with the per-frame and pooled VMAF. A current invocation (FFmpeg 9.0 "Lei", released on 4 August 2026, with 9.0.2 the latest point release as of November 2026, built with --enable-libvmaf against libvmaf 3.x, with the filter options as the current FFmpeg documentation lists them) looks like this:

# VMAF of a distorted encode against its reference master.
# Distorted is the FIRST input, reference the SECOND.
# Writes a JSON log with per-frame and pooled VMAF.
ffmpeg -i distorted.mp4 -i reference.mp4 \
  -lavfi "libvmaf=log_path=vmaf.json:log_fmt=json:n_threads=4" \
  -f null -

Two rules the command hides. First, the two inputs must match in resolution and frame rate; if the distorted clip was encoded at a lower resolution, scale it up to the reference resolution first, or the numbers are meaningless. Second, if you do not name a model, you get the default (vmaf_v0.6.1) — so to use the phone, 4K, or v1 models, point the filter at the model explicitly:

# Use an explicit model file (here a v1 model) and also emit PSNR alongside.
ffmpeg -i distorted.mp4 -i reference.mp4 \
  -lavfi "[0:v]scale=1920:1080:flags=bicubic[dis];[dis][1:v]libvmaf=\
model='path=/usr/share/model/vmaf_v1.0.16/vmaf_v1.0.16_3d0h.json':\
feature='name=psnr':log_path=vmaf.json:log_fmt=json" \
  -f null -

The output JSON carries a VMAF value per frame plus the pooled score; the filter's pool option takes mean (the default), harmonic_mean or min, and low percentiles that surface the worst moments are computed from the per-frame log — a choice that matters as much as the model, covered in pooling: per-frame to one number. On NVIDIA hardware the libvmaf_cuda filter scores CUDA frames on the GPU. For HDR-VMAF, use the vmaf command-line tool for now: the FFmpeg filter documentation lists no options for passing input colorimetry, which the HDR models require. The full step-by-step workflow, with build checks, threads, GPU scoring and output parsing, lives in our FFmpeg VMAF tutorial; the encoder-side quick reference is in Video Encoding's FFmpeg cheat sheet.

To make the score concrete at your desk, we built a small, dependency-light script that runs VMAF on a pair of files, then parses the JSON to print the pooled score three ways — mean, harmonic mean, and 5th-percentile (the worst moments) — alongside the per-frame minimum and the implied just-noticeable-difference band, so you can see how much the single headline number hides. Download the VMAF measurement-and-pooling script (Python) and run it against your own encodes.

Where VMAF still lies

VMAF is the best widely-deployed full-reference metric, not an oracle. Naming its blind spots is the price of using it well, and the honest core of this section.

First, a bare VMAF number is ambiguous — without the model, pooling, and content named, it cannot be interpreted or compared, as the model section showed. This is less a flaw in VMAF than the most common flaw in how people quote it.

Second, it can be gamed by enhancement, which is why NEG exists. An encoder tuned to maximise VMAF can learn to please the metric in ways that do not please a viewer — the general hazard of optimising for any metric instead of the eye.

Third, it is trained, so it is weakest off its training distribution. VMAF learned from a particular kind of content — professionally-produced video clips. On content unlike its training set — screen recordings and text, video-game capture, heavy film grain, animation, extreme high dynamic range — its predictions are less reliable, and it can rank encodes in an order a viewer would not. The v0 generation was additionally blind to banding and colour; v1 narrows but does not erase these gaps. HDR now has its own models (October 2026), but an SDR model run on HDR input still returns a number with no warning, and that number means nothing. Which content fools which metric is catalogued in where objective metrics lie.

Fourth, mean pooling hides the worst seconds. A clip with one badly broken passage and a lot of clean footage can still post a high mean VMAF, because the good frames outvote the bad. When a localised failure matters, read a low percentile or the per-frame minimum, not just the mean.

Fifth, it is full-reference, so it is useless for live and user-generated content where there is no pristine master to compare against — that hard case needs the no-reference metrics covered in no-reference quality for live and UGC.

Two scatter plots side by side, predicted score from low to high against human mean opinion score from 1 to 5, one point per clip, with a dashed ideal diagonal where the prediction equals opinion. Left, VMAF: green points sit tight along the diagonal. Right, PSNR: orange points scatter widely around it. Notes: illustrative clips, not measured data; the fit is measured, not assumed, with PCC, SROCC and RMSE per ITU-T P.1401 Figure 4. Why VMAF tracks the eye better: against human Mean Opinion Scores, VMAF's predictions cluster closer to the ideal diagonal than PSNR's. The fit is measured by correlation coefficients, not assumed.

How VMAF compares with PSNR and SSIM

VMAF is the most perception-accurate of the three full-reference metrics you meet constantly, and the most demanding to quote correctly. The fastest way to hold all three in your head is side by side, with the columns that actually matter — what each one measures, and where each one lies.

Metric Scale What it measures Where it lies (blind spot) Best for
PSNR dB (≈20–50, ∞ if identical) Average pixel error vs the original Ignores where errors land; weak perceptual match Same-codec comparison, RDO, regression gates
SSIM 0–1 (higher better) Structural similarity: luminance, contrast, structure Luma-only, per-frame, saturates near 1; implementation-dependent A better-than-PSNR structural proxy; quality maps
VMAF 0–100 (higher better) Fused, perception-trained quality (model-dependent) Meaningless without the model named; v0 gameable by sharpening (NEG fixes it); trained-distribution limits Predicting viewer-perceived streaming quality at scale

Table 1. The three full-reference metrics at a glance. All need the original; they differ in how close they get to the eye and what they miss. Pick the row by the job, and always name the conditions — the tool and version for SSIM, the model and pooling for VMAF.

This is the deep dive on the bottom row. The encoder-operator's one-screen version of all three is in Video Encoding's quality-metrics article; when you are choosing between metrics for a specific job, choosing the right metric is the decision guide, and how each is graded against the eye is in validating metrics against human scores.

Common mistakes with VMAF

Mistake: quoting "VMAF 95" with no model named. The default, phone, and 4K models give different scores for the same encode because they predict different viewing conditions. A VMAF number without its model, pooling, and content is uninterpretable. Always report "VMAF 95, default v0.6.1, mean pooling".

Mistake: treating a sub-JND gap as a real difference. About 6 VMAF points is the just-noticeable difference; under ~2 points is noise. A 1-point "win" between two encodes is almost certainly not visible — and may be inside the model's confidence interval. Compare gaps against the JND, not against zero.

Mistake: using the standard model to compare encoders. Sharpening can inflate standard VMAF without improving compression. For encoder-versus-encoder tests use VMAF-NEG (vmaf_v0.6.1neg) or a v1 model, which has NEG behaviour built in, so the comparison measures compression alone.

Mistake: mixing VMAF versions or pooling methods. A v0 number and a v1 number are not comparable; neither are a mean-pooled and a harmonic-mean-pooled score. Apples-to-apples means same model, same version, same pooling, same frames, same resolution.

Mistake: scoring HDR video with an SDR model. No conversion happens and no warning appears, so the score is meaningless. Use an hdr_vmaf_v1.1.8 model and give the colorimetry of both inputs.

VMAF FAQ

What does VMAF stand for?

VMAF stands for Video Multimethod Assessment Fusion. "Multimethod" refers to the several quality measurements it combines, and "fusion" to the machine-learning model, trained on human ratings, that merges them into one score.

What is a good VMAF score?

For 1080p streaming on the default model, 93 and above is excellent (most viewers stop noticing compression), 80–93 is good, around 70 is fair and below 60 is poor. Premium streaming services aim for the 90s on their top ladder rungs; how to pick which VMAF score to target, and why 97 is more than viewers can see, is a separate decision.

Is a higher or lower VMAF score better?

Higher is better. VMAF predicts a viewer rating from 0 to 100, so a lower VMAF value means worse picture quality; 100 means the copy looks indistinguishable from the original under the model's viewing condition.

What is the VMAF just-noticeable difference?

About 6 VMAF points. A gap of roughly 6 points is where most viewers start to see a quality difference; gaps under about 2 points are noise.

What is VMAF v1?

VMAF v1 is the model generation Netflix released in June 2026 (vmaf_v1.0.16, shipped in libvmaf v3.2.0). It adds banding and colour features, NEG behaviour by default and viewing-distance-aware 1080p, phone and 4K models, and it removes VIF. V1 scores are not comparable with v0 scores. An HDR version, HDR-VMAF v1.1.8, followed on 26 October 2026.

Which VMAF model should I use?

For a new program, Netflix recommends the v1 4K model at 1.5× screen height (vmaf_v1.0.16_1d5h_2160) for most users; use the v1 phone model for mobile-first products. For HDR10 or other PQ content, use the matching HDR model, starting with hdr_vmaf_v1.1.8_3d0h. To stay comparable with existing results, keep the v0 model you already report, usually vmaf_v0.6.1.

How do I calculate VMAF with FFmpeg?

Run ffmpeg -i distorted.mp4 -i reference.mp4 -lavfi libvmaf=log_path=vmaf.json:log_fmt=json -f null - with the distorted file first and the reference second, both at the same resolution and frame rate. Without a model option the filter uses vmaf_v0.6.1.

What is VMAF NEG?

VMAF NEG (No Enhancement Gain) is a mode that stops sharpening and contrast boosts from inflating the score, so encoder comparisons measure compression alone. In v0 it is a separate model (vmaf_v0.6.1neg); in v1 it is on by default.

Does VMAF work for HDR video?

Yes, since 26 October 2026. Netflix released HDR-VMAF v1.1.8, four models that convert both inputs to PQ, BT.2020 and ICtCp before scoring. You must give each input's colorimetry and build libvmaf with zimg; an SDR model on HDR input returns a meaningless score.

Why did VMAF replace PSNR and SSIM for streaming?

Because it was trained on human opinion scores, VMAF predicts what viewers see more closely than PSNR, which counts pixel error, or SSIM, which saturates near the top of its scale. Its 0–100 scale and roughly 6-point just-noticeable difference also turn quality gaps into bitrate decisions.

Can I download the Netflix VMAF dataset with subjective scores?

Netflix publishes a sample, the NFLX Public Dataset, through the Netflix/vmaf repository: access to the YUV clips is granted on request, with expert scores in the file names and mean opinion scores in the dataset file. The full training data is not public.

↓ Free download: VMAF measurement-and-pooling scriptA standard-library Python script that runs FFmpeg’s libvmaf on a reference and a distorted file, then reports the score pooled four ways — mean, harmonic mean, 5th percentile and the single worst frame — so you can see how much one headline VMAF number hides.

Where Fora Soft fits in

Fora Soft has built video software since 2005 — streaming, WebRTC conferencing, OTT, e-learning, telemedicine, and surveillance — and VMAF is the metric we reach for when the question is "how good will this look to the viewer," because it is the closest widely-deployed proxy for the eye. We use it to set quality targets for bitrate ladders, to gate encoder changes before they reach users, and to put a defensible number on delivered quality — always with the model, pooling, and content stated, and always read against the ~6-point JND rather than chased to the last decimal. We move to VMAF-NEG for encoder comparisons so nobody games the result, and to a low percentile when the worst seconds matter more than the average. Our benchmark methodology records the exact model and pooling behind every VMAF figure we publish, because a quality number you cannot reproduce is marketing, not measurement. Our OTT platform development team uses VMAF targets to build per-title bitrate ladders, and our video transcoding engineers wire the same checks into CI so a quality drop never ships silently.

Video Streaming: ABR, CDNs, Players, WebRTC, DRM and the Economics of Streaming - book coverVideo Encoding: A Complete Guide to Video Compression - book coverAI for Video: Models, Inference, Computer Vision, Speech, Search and Generative Video - book cover

The handbook

Fora Soft Video Engineering Handbook

We wrote a seven-volume handbook that works through the whole video stack — encoding, delivery, audio and AI — so an engineer who reads it can design and build a pipeline whose VMAF numbers mean something. Volume 1 takes PSNR, SSIM and VMAF apart from the inside and shows the encoder decisions a quality target drives. Volume 3 turns those scores into a bitrate ladder, ABR logic and QoE monitoring, and Volume 6 covers the learned models behind perceptual metrics like VMAF. Written by Nikolay Sapunov, CEO at Fora Soft.

Browse the handbook on Amazon →7 volumes · Kindle & paperback

Is your “VMAF 95” telling you what viewers will see?

Send us two encodes and the numbers you already have. We will measure them with the model named, the pooling stated and the JND applied, and tell you where the bitrate can come down without anyone noticing — and where the score is hiding a bad passage. 250+ video products shipped since 2005.

Book a 30-min call →WhatsApp →Email us →

See our case studies

References

  1. Netflix Technology Blog, "Toward a Practical Perceptual Video Quality Metric," June 6, 2016. Tier 1 (metric-author defining work). The launch and open-sourcing of VMAF: the fusion idea, the SVM regressor, the VIF/DLM/motion features, and training on the NFLX subjective dataset. https://netflixtechblog.com/toward-a-practical-perceptual-video-quality-metric-653f208b9652
  2. Netflix Technology Blog, "VMAF: The Journey Continues," October 25, 2018. Tier 1 (metric-author). Adds the phone and 4K models, the bootstrapped 95% confidence interval (models 0.6.2/0.6.3), and best-practice guidance on pooling. https://netflixtechblog.com/vmaf-the-journey-continues-44b51ee9ed12
  3. Netflix Technology Blog, "Toward a Better Quality Metric for the Video Community," December 7, 2020. Tier 1 (metric-author). The libvmaf v2 API redesign, speed work, and the introduction of NEG (No Enhancement Gain) mode for codec evaluation. https://netflixtechblog.com/toward-a-better-quality-metric-for-the-video-community-7ed94e752a30
  4. Netflix Technology Blog, "VMAF v1: Good Is Not Good Enough," June 2026. Tier 1 (metric-author). The v1 generation: CAMBI banding feature, chroma features, normalised-viewing-distance feature adjustment, removal of VIF, and the accuracy/speed gains. https://netflixtechblog.com/vmaf-v1-good-is-not-good-enough-60d7e4244ea8
  5. Netflix/vmaf repository, "Models" and "Models (v1)" documentation (resource/doc/models.md, resource/doc/models_v1.md), accessed 2026-06-23. Tier 1/Tier 3 (metric-author reference implementation). The default/phone/4K viewing conditions and score mapping; the v1.0.16 model files, score ranges ([0,100] and [0,110]), 10-bit guidance, CAMBI encode-side parameters, and HFR variants. https://raw.githubusercontent.com/Netflix/vmaf/master/resource/doc/models_v1.md
  6. H. R. Sheikh and A. C. Bovik, "Image Information and Visual Quality," IEEE Transactions on Image Processing, vol. 15, no. 2, pp. 430–444, 2006. Tier 1 (metric-author defining paper). Defines Visual Information Fidelity (VIF), the information-fidelity feature in VMAF v0. https://ieeexplore.ieee.org/document/1576816
  7. S. Li, F. Zhang, L. Ma, and K. N. Ngan, "Image Quality Assessment by Separately Evaluating Detail Losses and Additive Impairments," IEEE Transactions on Multimedia, vol. 13, no. 5, pp. 935–949, 2011. Tier 1 (metric-author defining paper). Defines the Detail Loss Metric (DLM/ADM), the detail-loss feature in VMAF. https://ieeexplore.ieee.org/document/5765502
  8. Recommendation ITU-T P.1401 (01/2020), "Methods, metrics and procedures for statistical evaluation, qualification and comparison of objective quality prediction models." International Telecommunication Union. Tier 1. Defines PCC, SROCC, and RMSE — how VMAF and every objective metric is graded against subjective MOS. https://www.itu.int/rec/T-REC-P.1401
  9. Recommendation ITU-R BT.500-15 (2023), "Methodologies for the subjective assessment of the quality of television images." International Telecommunication Union. Tier 1. The subjective ground truth against which VMAF was trained and is validated. https://www.itu.int/rec/R-REC-BT.500
  10. FFmpeg, "libvmaf filter documentation," accessed 2026-10-10. Tier 3 (first-party tooling). The libvmaf filter (distorted-then-reference input order, model, feature, log_path/log_fmt, n_threads, pooling), the default vmaf_v0.6.1 model, and the input-matching requirement. https://ffmpeg.org/ffmpeg-filters.html#libvmaf
  11. Netflix/vmaf repository (libvmaf), release notes and CHANGELOG, accessed 2026-06-23. Tier 3 (metric-author tooling). libvmaf v2.0.0 (.json model format), v3.0.0 (Dec 2023, deprecated-API removal, CUDA), and the threading improvements that benefit v0 and v1 models. https://github.com/Netflix/vmaf/releases
  12. J. Ozer, "Finding the Just Noticeable Difference with Netflix VMAF," Streaming Learning Center, accessed 2026-06-23. Tier 6 (educational, orientation only). Source for the widely-cited ~6-point JND rule of thumb (delta <2 irrelevant, >6 noticeable by most viewers); the underlying guidance is Netflix's. https://streaminglearningcenter.com/codecs/finding-the-just-noticeable-difference-with-netflix-vmaf.html
  13. Netflix/vmaf repository, release v3.2.0, June 20, 2026 ("Initial public release for VMAF v1"; adds the VMAF v1.0.16 SDR models). Tier 3 (metric-author tooling). https://github.com/Netflix/vmaf/releases/tag/v3.2.0
  14. Netflix/vmaf repository, "VMAF v1 models" (resource/doc/models_v1.md), accessed 2026-10-10. Tier 1 (metric-author). Model files, viewing conditions, score ranges, the 4K 1.5H default, 10-bit guidance and HFR status. https://raw.githubusercontent.com/Netflix/vmaf/master/resource/doc/models_v1.md
  15. Netflix/vmaf repository, "Datasets" (resource/doc/datasets.md), accessed 2026-10-10. Tier 1 (metric-author). The NFLX Public Dataset and the VQEG HD3 dataset. https://raw.githubusercontent.com/Netflix/vmaf/master/resource/doc/datasets.md
  16. FFmpeg, "FFmpeg 8.1 'Hoare'" release news, March 16, 2026, and FFmpeg Filters Documentation, libvmaf and libvmaf_cuda, accessed 2026-11-11 (default model still vmaf_v0.6.1; pool options mean, harmonic_mean, min). Tier 3 (first-party tooling). https://ffmpeg.org/ffmpeg-filters.html#libvmaf
  17. Netflix/vmaf repository, README "News" (2026-10-26: "We are releasing an HDR version for VMAF-v1") and models_v1.md, "HDR models" section, accessed 2026-11-11. Tier 1 (metric-author). HDR-VMAF v1.1.8 model files, the PQ/BT.2020/ICtCp 4:2:0 16-bit conversion target, colorimetry flags, zimg build requirement, display-resolution scaling and SRCC results. https://raw.githubusercontent.com/Netflix/vmaf/master/resource/doc/models_v1.md
  18. Netflix/vmaf pull request #1709, "libvmaf: add the HDR-VMAF v1.1.8 models and default them for PQ sources," merged October 26, 2026. Tier 3 (metric-author tooling). https://github.com/Netflix/vmaf/pull/1709
  19. Netflix/vmaf repository, release v3.2.1, September 14, 2026 ("Small release with a fix"). Tier 3 (metric-author tooling). https://github.com/Netflix/vmaf/releases/tag/v3.2.1
  20. FFmpeg, download page (FFmpeg 9.0.2 "Lei") and release archive (ffmpeg-9.0 dated 2026-08-04, ffmpeg-9.0.2 dated 2026-09-18), accessed 2026-11-11. Tier 3 (first-party tooling). https://ffmpeg.org/download.html