Analyze video quality
Compare an encode with its reference using VMAF, a per-frame timeline, visual frame comparison, and side-by-side runs.
VMAF (Video Multi-Method Assessment Fusion) is a perceptual quality metric. It compares an encode with its source and scores how closely the encode preserves what viewers notice, rather than measuring raw pixel difference.
Video Commander can run the comparison, chart every frame, open problem frames side by side, compare runs against each other, and export the result without writing an FFmpeg command.
What VMAF measures
VMAF is a full-reference metric, so every run needs two files:
- The reference is the source or mezzanine file—the highest-quality version available.
- The distorted file is the encode you want to evaluate.
The score is relative to the reference, not an absolute grade. VMAF is most useful for comparing encoder settings on the same source, setting a quality floor for a delivery ladder, or catching a regression after changing an encoding pipeline.
Before you start
The files must contain the same content and timeline. Different frame rates, frame counts, trims, or extra leading frames misalign the frame-by-frame comparison and produce a misleading score.
VMAF also requires an FFmpeg build with the libvmaf filter. Open Settings →
Local Tools, view the selected build's capabilities, and confirm VMAF is
available. For faster iteration on long videos, analyze a representative range
before running the complete title.
Configure the analysis
Open the Analyze view and use the Options tab:
- Choose the reference and distorted files.
- Select a model for the intended viewing case. New runs use VMAF v1 1080p at 3H when the selected FFmpeg build supports it.
- If either file is HDR, choose a Dynamic Range setting. See Score HDR sources.
- Optionally add PSNR, SSIM, MS-SSIM, or CAMBI to the run.
- Optionally score every second, fourth, or eighth frame for a quicker first look, or trim the run to a representative range.
- Choose a scaling algorithm if the inputs do not have matching dimensions.
- Leave threading on Auto unless you are diagnosing a specific FFmpeg build.
Auto uses one thread per core, up to 16. On libvmaf 3.2.0, which can run out of memory on long threaded runs, Auto uses a single thread.
Recent job outputs are available from the file selectors, so an encode or delivery result can become the distorted input without searching for it again. Press Cmd/Ctrl+Enter to start.
Score HDR sources
Every published VMAF model is trained on SDR video. Scoring an HDR reference against an SDR encode directly returns a number that looks plausible but does not mean much.
The Dynamic Range setting controls this:
| Setting | Use it for |
|---|---|
| Score as encoded | SDR against SDR, or ranking HDR encodes of the same source against each other |
| Tone-map HDR to SDR | An HDR reference against an SDR deliverable |
Tone mapping converts each PQ or HLG input to BT.709 SDR before scoring and leaves SDR inputs as they are. BT.2390 is the broadcast-standard curve, mapped from the reference's mastering peak, its MaxCLL, or 1,000 nits. Hable, Möbius, and Reinhard are also available. Pick the curve that was used to make the SDR version, since the score measures how close the encode is to that picture.
The conversion runs inside the VMAF command, so no intermediate files are written. The setup reads both files' color tags as soon as you choose them and warns about an HDR/SDR pair before the run starts.
Read the summary
The headline score is the mean across the run. The cards around it describe the rest of the distribution:
| Result | What it tells you |
|---|---|
| Mean | Average quality across all compared frames |
| Harmonic mean | An average that weights low-scoring frames more heavily |
| 5th percentile | 95% of frames score higher than this |
| 1st percentile | 99% of frames score higher than this |
| Minimum | The worst-scoring frame, with its timecode |
| Maximum | The best-scoring frame |
| Standard deviation | How widely per-frame scores spread |
The gap between the mean and the low percentiles often matters more than the mean alone. A high average with a much lower 1st percentile points to a difficult cut, a high-motion sequence, or a scene where rate control underspent. Treat differences smaller than roughly one VMAF point cautiously; they are rarely a useful reason to choose one encode over another by themselves.
Below the cards, the Summary shows:
- a histogram of per-frame scores, with the share of frames at 95 and above, below 80, and below 60;
- the lowest-scoring moments, as one-second windows at least 10 seconds apart, each with Open in Frames;
- the reference and encode properties side by side, and the run's settings; and
- any additional metrics, with a note on which direction is better.
A warning appears when the files differ in dynamic range, frame count, or frame rate.
VMAF is one model of perceptual quality. It does not replace checking cadence, audio, captions, or real playback on target devices.
Find where quality drops
The Timeline plots every frame. Click a point to select its frame, drag to zoom, scroll sideways to pan, and step with the arrow keys or the previous- and next-frame buttons. A steady graph means rate control is holding quality consistently; isolated cliffs reveal the exact scenes that need review.
Frames shares the same selected frame. Open it to inspect the reference and encode side by side, drag a wipe between them, amplify their difference, or blink between A and B. Zoom and pan stay locked so the same region remains aligned. Worst frame moves directly to the minimum score.
Compare runs
The Compare tab puts up to three analyses next to a baseline. Choose Compare with… on the Summary to start from the run on screen.
The scorecard lists mean, harmonic mean, 1% and 5% lows, minimum, the share of frames below 80, bitrate, and size, with each run's change from the baseline. Below it, every run's per-frame VMAF shares a chart, and each run's difference from the baseline is plotted on a second one. The one-second windows that fell furthest are listed, and each opens that frame in Frames.
Runs are only comparable when they were scored against the same reference with the same model, tone mapping, and scoring resolution. Compare flags a run that differs, shows no score changes for it, and leaves it off the charts.
Choose the right model
The model should match the intended playback environment. 3H means a viewing distance of three times the screen height.
| Model | Use it for |
|---|---|
| VMAF v1 1080p, 3H | Most 1080p and general streaming work |
| VMAF v1 Phone, 5H | Mobile-specific encodes viewed on a smaller screen |
| VMAF v1 4K, 1.5H | Delivery intended for a 4K display viewed up close |
| VMAF v1 4K TV, 3H | 4K delivery for a living-room TV; scores run to 110 |
| VMAF v0.6.1 | Comparing with results scored before VMAF v1 |
Each v1 model has a 50/60 fps variant for high-frame-rate content. VMAF v1 needs feature extractors that some FFmpeg builds lack; the app checks the selected build once and defaults to v0.6.1 when v1 is unavailable.
The same encode can score differently under each model because the assumed viewing conditions differ. Do not use the phone model to approve an encode that will primarily be watched on a television, and do not compare scores from different models directly.
Keep or export a result
Completed analyses remain in job history and can be reopened from Load Previous Analysis. From Export on the Summary:
- Save Summary as PNG or Save Summary as PDF for a report or ticket. The PDF is A4 with selectable text.
- Export as CSV for charting and comparing frame data.
- Export as JSON for a regression check or automated workflow.
Encode to a quality target
The Target VMAF quality mode in Convert searches for the lowest-bitrate CRF that meets a score you choose. It encodes a representative probe, measures it, and adjusts CRF before running the final encode. See Convert a file for the complete workflow.
Common mistakes
- Mismatched files: different resolutions, frame rates, trims, or durations can break alignment. Verify the two files before blaming the encoder.
- The wrong reference: compare against the source that was actually encoded. Comparing a 1080p encode with a 4K master also measures the downscale.
- HDR against SDR as encoded: use tone mapping when the reference is HDR and the encode is SDR.
- Reading only the mean: use the percentiles, the lowest-scoring moments, and the timeline to find short visible failures hidden by a strong average.
- Mixing models: a v1 score and a v0.6.1 score are not on the same scale.
- Over-reading small differences: a fraction of a point is usually not a meaningful result.
