ENCODE · DECODE · MEASURE

Codec comparison with actual measured files

One synthetic source, nine reproducible encodes. Inspect the evidence and its limits.

Blue: H.264 · purple: H.265 · green: AV1. Points are measurements, not an interpolated quality curve.

Reference versus decoded frame

Loading reference and decoded images…

Actual encoded clip

Download selected encode · Measurement data

All measured samples

Bitrates in kbps; PSNR in dB; complete-file sizes in bytes
SampleRequestedActual fileBytesYUV PSNRLuma PSNR
h264-150150145.2787263942.48842.698
h264-300300265.62813281450.74751.100
h264-600600455.02022751059.38759.724
hevc-150150172.1708608544.02144.537
hevc-300300303.07215153651.52751.987
hevc-600600488.22424411259.79760.149
av1-150150180.2849014247.62048.433
av1-300300240.43212021652.51553.026
av1-600600298.51814925956.90057.570
Selected sample and reproducibility details

Inspect real encodes, not a universal quality ranking

Nine files were encoded from the same generated four-second test pattern: three requested bitrate settings for each of H.264, H.265 and AV1. The fixture is three hundred eighty-four by two hundred sixteen pixels, ten frames per second, eight-bit YUV420p, with no audio. The plotted points come from decoded-file comparisons with the uncompressed source. There are no invented VMAF values, smooth predicted quality curves or claims that one codec always wins. This small synthetic experiment teaches how to read evidence, not how to select a codec for every production workload.

Select a measured configuration

Codec chooses the libx264 H.264, libx265 H.265 or libaom AV1 encoder output. Requested bitrate selects one hundred fifty, three hundred or six hundred kilobits per second. Those are encoder requests, not guaranteed achieved rates. Metric chooses whole-frame YUV average PSNR or luma-only PSNR from the actual decoded comparison. The selected point is emphasized on the plot, while all nine measurements remain visible. The horizontal coordinate is actual complete-file size multiplied by eight and divided by the four-second duration, including container overhead. The numerical table provides the same evidence without relying on color or canvas.

Compare the decoded frame with its reference

The image panel shows the frame at two seconds. Left of the wipe is the uncompressed reference exported as PNG; right is a frame decoded from the selected compressed file. Reference share moves that boundary from all decoded to all reference. Crop zoom selects the complete frame or a centered two-times or four-times crop. Pixel smoothing is disabled so enlargement does not hide the sampled image structure. Changing codecs or bitrate loads a different measured frame. The image represents one time point, whereas the displayed PSNR measurement covers the complete forty-frame clip.

Try comparisons that expose the limits of a target bitrate

Select H.264 at the one-hundred-fifty target: its measured complete-file bitrate is about one hundred forty-five kilobits per second. Select AV1 at the same requested target: its achieved rate is about one hundred eighty. Comparing their quality as if those were equal-size outputs would hide an important difference. Now select the six-hundred target for AV1: this short fixture’s achieved rate is about two hundred ninety-nine, far below the request. The data demonstrate why equal requested settings are not automatically equal delivered bitrate. No interpolation estimates a missing equal-rate point.

Interpret PSNR and encoding time carefully

PSNR measures decoded pixel error relative to this source on a logarithmic decibel scale; higher values mean lower error under that metric. It is not VMAF, a viewer opinion score or a complete perceptual-quality assessment. The average metric incorporates the YUV planes according to the measurement filter; luma-only excludes chroma error from its reported value. Do not compare this PSNR number with a VMAF score on another scale. The provenance includes one observed local encode duration, but process startup, selected presets, thread configuration and machine load make it unsuitable as a general encoder-speed ranking.

Play or download the actual encoded sample

The video player contains the selected four-second silent output. Use its native play, pause and seek controls to inspect motion; it is a real clip, not a one-minute synthetic playback of a static score. Browser codec support varies. If a format cannot play, the decoded PNG frame, measurement table and download remain usable, and a message explains the playback failure. Download selected encode retrieves the actual measured file. Measurement data downloads the JSON provenance, including source-generation arguments, encoder flags, file hashes, frame hashes and metric commands. Restore defaults returns to the initial H.264 sample and image settings.

Reproduce and extend the experiment

The repository’s codec-fixture generator records the FFmpeg version, encoder executable hash and exact commands. It generates the synthetic source locally, encodes every sample, decodes against that source and exports the comparison frame. The checks independently regenerate the source and recompute all nine PSNR values. No customer video, licensed movie clip or remote API is used. The experiment does not include audio, HDR, higher resolutions, scene diversity, two-pass rate control, per-title tuning, quality-matched bitrate savings, device energy, patent licensing analysis or network delivery overhead beyond the stored containers. Use representative content and an explicit evaluation procedure before drawing broader conclusions.

Measurement reference: FFmpeg PSNR filter.

Views are my own and do not represent any employer, past or present.

Search