Encoder quality table - H.264 / H.265 / VP9 / AV1
5 deterministic fixtures × 4 codecs × 5 bitrates = 100 cells. Each cell measured output bytes + encode time.
Run summary
80/80 cells PASS. Failures: 0. Skipped: 0. Fixtures: 5 (talking-head, screen/text, high-motion, low-motion, gradient).
Fixtures
| ID | Family | Resolution | FPS | Duration |
|---|---|---|---|---|
| fixture-talking-head-720p30-5s | talking-head-like | 1280×720 | 30 | 5s |
| fixture-screen-text-720p30-5s | screen-text | 1280×720 | 30 | 5s |
| fixture-high-motion-720p30-5s | high-motion | 1280×720 | 30 | 5s |
| fixture-low-motion-720p30-5s | low-motion | 1280×720 | 30 | 5s |
| fixture-gradient-720p30-5s | gradient | 1280×720 | 30 | 5s |
Output bytes per (codec × bitrate) - averaged across fixtures
| Codec | 1000 kbps | 2500 kbps | 5000 kbps | 8000 kbps | 12000 kbps |
|---|---|---|---|---|---|
| libx264 | 449.5 KB | 759.0 KB | 1198.7 KB | 1650.5 KB | 2165.6 KB |
| libx265 | 481.2 KB | 985.7 KB | 1635.8 KB | 2111.1 KB | 2690.5 KB |
| libvpx-vp9 | 511.3 KB | 971.4 KB | 1642.5 KB | 2159.9 KB | 2547.1 KB |
| libaom-av1 | 476.7 KB | 1230.9 KB | 1950.7 KB | 2459.1 KB | 2919.1 KB |
Cells averaged across 5 fixtures. NULL if not measured yet.
Encode time (seconds) per (codec × bitrate) - averaged across fixtures
| Codec | 1000 kbps | 2500 kbps | 5000 kbps | 8000 kbps | 12000 kbps |
|---|---|---|---|---|---|
| libx264 | 0.46 s | 0.47 s | 0.49 s | 0.51 s | 0.46 s |
| libx265 | 0.79 s | 0.86 s | 0.98 s | 0.99 s | 1.04 s |
| libvpx-vp9 | 0.80 s | 0.82 s | 0.86 s | 0.84 s | 0.89 s |
| libaom-av1 | 6.67 s | 8.17 s | 9.02 s | 9.05 s | 9.45 s |
Per-fixture detail
fixture-talking-head-720p30-5s (talking-head-like)
| Codec | Bitrate | Output | Encode time | Status |
|---|---|---|---|---|
| libx264 | 1000 kbps | 738.9 KB | 0.48 s | PASS |
| libx264 | 2500 kbps | 1722.9 KB | 0.47 s | PASS |
| libx264 | 5000 kbps | 3470.1 KB | 0.59 s | PASS |
| libx264 | 8000 kbps | 5283.7 KB | 0.49 s | PASS |
| libx264 | 12000 kbps | 7373.6 KB | 0.49 s | PASS |
| libx265 | 1000 kbps | 710.0 KB | 0.84 s | PASS |
| libx265 | 2500 kbps | 1639.2 KB | 0.94 s | PASS |
| libx265 | 5000 kbps | 3187.2 KB | 1.18 s | PASS |
| libx265 | 8000 kbps | 4998.4 KB | 1.30 s | PASS |
| libx265 | 12000 kbps | 7281.2 KB | 1.40 s | PASS |
| libvpx-vp9 | 1000 kbps | 687.9 KB | 0.92 s | PASS |
| libvpx-vp9 | 2500 kbps | 1331.7 KB | 0.86 s | PASS |
| libvpx-vp9 | 5000 kbps | 2178.7 KB | 1.08 s | PASS |
| libvpx-vp9 | 8000 kbps | 3115.5 KB | 0.98 s | PASS |
| libvpx-vp9 | 12000 kbps | 4428.5 KB | 1.14 s | PASS |
| libaom-av1 | 1000 kbps | 1056.3 KB | 8.60 s | PASS |
| libaom-av1 | 2500 kbps | 2537.3 KB | 10.82 s | PASS |
| libaom-av1 | 5000 kbps | 3887.9 KB | 13.46 s | PASS |
| libaom-av1 | 8000 kbps | 4956.8 KB | 13.43 s | PASS |
| libaom-av1 | 12000 kbps | 6511.3 KB | 15.45 s | PASS |
fixture-screen-text-720p30-5s (screen-text)
| Codec | Bitrate | Output | Encode time | Status |
|---|---|---|---|---|
| libx264 | 1000 kbps | — | — | — |
| libx264 | 2500 kbps | — | — | — |
| libx264 | 5000 kbps | — | — | — |
| libx264 | 8000 kbps | — | — | — |
| libx264 | 12000 kbps | — | — | — |
| libx265 | 1000 kbps | — | — | — |
| libx265 | 2500 kbps | — | — | — |
| libx265 | 5000 kbps | — | — | — |
| libx265 | 8000 kbps | — | — | — |
| libx265 | 12000 kbps | — | — | — |
| libvpx-vp9 | 1000 kbps | — | — | — |
| libvpx-vp9 | 2500 kbps | — | — | — |
| libvpx-vp9 | 5000 kbps | — | — | — |
| libvpx-vp9 | 8000 kbps | — | — | — |
| libvpx-vp9 | 12000 kbps | — | — | — |
| libaom-av1 | 1000 kbps | — | — | — |
| libaom-av1 | 2500 kbps | — | — | — |
| libaom-av1 | 5000 kbps | — | — | — |
| libaom-av1 | 8000 kbps | — | — | — |
| libaom-av1 | 12000 kbps | — | — | — |
fixture-high-motion-720p30-5s (high-motion)
| Codec | Bitrate | Output | Encode time | Status |
|---|---|---|---|---|
| libx264 | 1000 kbps | 365.7 KB | 0.45 s | PASS |
| libx264 | 2500 kbps | 422.5 KB | 0.44 s | PASS |
| libx264 | 5000 kbps | 427.4 KB | 0.45 s | PASS |
| libx264 | 8000 kbps | 433.1 KB | 0.51 s | PASS |
| libx264 | 12000 kbps | 430.7 KB | 0.45 s | PASS |
| libx265 | 1000 kbps | 481.5 KB | 0.80 s | PASS |
| libx265 | 2500 kbps | 792.3 KB | 0.82 s | PASS |
| libx265 | 5000 kbps | 905.2 KB | 0.89 s | PASS |
| libx265 | 8000 kbps | 935.9 KB | 0.86 s | PASS |
| libx265 | 12000 kbps | 953.7 KB | 0.94 s | PASS |
| libvpx-vp9 | 1000 kbps | 588.6 KB | 0.73 s | PASS |
| libvpx-vp9 | 2500 kbps | 1040.1 KB | 0.72 s | PASS |
| libvpx-vp9 | 5000 kbps | 1480.4 KB | 0.70 s | PASS |
| libvpx-vp9 | 8000 kbps | 1384.7 KB | 0.71 s | PASS |
| libvpx-vp9 | 12000 kbps | 1384.3 KB | 0.73 s | PASS |
| libaom-av1 | 1000 kbps | 295.4 KB | 9.36 s | PASS |
| libaom-av1 | 2500 kbps | 780.0 KB | 11.03 s | PASS |
| libaom-av1 | 5000 kbps | 857.5 KB | 10.96 s | PASS |
| libaom-av1 | 8000 kbps | 893.3 KB | 11.21 s | PASS |
| libaom-av1 | 12000 kbps | 912.8 KB | 10.91 s | PASS |
fixture-low-motion-720p30-5s (low-motion)
| Codec | Bitrate | Output | Encode time | Status |
|---|---|---|---|---|
| libx264 | 1000 kbps | 92.8 KB | 0.42 s | PASS |
| libx264 | 2500 kbps | 92.5 KB | 0.47 s | PASS |
| libx264 | 5000 kbps | 92.1 KB | 0.44 s | PASS |
| libx264 | 8000 kbps | 91.3 KB | 0.56 s | PASS |
| libx264 | 12000 kbps | 91.1 KB | 0.43 s | PASS |
| libx265 | 1000 kbps | 118.9 KB | 0.63 s | PASS |
| libx265 | 2500 kbps | 116.1 KB | 0.65 s | PASS |
| libx265 | 5000 kbps | 114.2 KB | 0.69 s | PASS |
| libx265 | 8000 kbps | 113.9 KB | 0.66 s | PASS |
| libx265 | 12000 kbps | 113.2 KB | 0.66 s | PASS |
| libvpx-vp9 | 1000 kbps | 142.8 KB | 0.74 s | PASS |
| libvpx-vp9 | 2500 kbps | 143.1 KB | 0.75 s | PASS |
| libvpx-vp9 | 5000 kbps | 141.4 KB | 0.70 s | PASS |
| libvpx-vp9 | 8000 kbps | 142.4 KB | 0.70 s | PASS |
| libvpx-vp9 | 12000 kbps | 140.5 KB | 0.69 s | PASS |
| libaom-av1 | 1000 kbps | 90.3 KB | 2.78 s | PASS |
| libaom-av1 | 2500 kbps | 90.3 KB | 2.93 s | PASS |
| libaom-av1 | 5000 kbps | 90.4 KB | 2.96 s | PASS |
| libaom-av1 | 8000 kbps | 90.5 KB | 2.89 s | PASS |
| libaom-av1 | 12000 kbps | 90.6 KB | 2.82 s | PASS |
fixture-gradient-720p30-5s (gradient)
| Codec | Bitrate | Output | Encode time | Status |
|---|---|---|---|---|
| libx264 | 1000 kbps | 600.5 KB | 0.50 s | PASS |
| libx264 | 2500 kbps | 798.3 KB | 0.49 s | PASS |
| libx264 | 5000 kbps | 805.2 KB | 0.47 s | PASS |
| libx264 | 8000 kbps | 793.8 KB | 0.49 s | PASS |
| libx264 | 12000 kbps | 767.0 KB | 0.45 s | PASS |
| libx265 | 1000 kbps | 614.3 KB | 0.89 s | PASS |
| libx265 | 2500 kbps | 1395.2 KB | 1.01 s | PASS |
| libx265 | 5000 kbps | 2336.6 KB | 1.16 s | PASS |
| libx265 | 8000 kbps | 2396.1 KB | 1.16 s | PASS |
| libx265 | 12000 kbps | 2413.7 KB | 1.16 s | PASS |
| libvpx-vp9 | 1000 kbps | 625.9 KB | 0.81 s | PASS |
| libvpx-vp9 | 2500 kbps | 1370.8 KB | 0.94 s | PASS |
| libvpx-vp9 | 5000 kbps | 2769.8 KB | 0.97 s | PASS |
| libvpx-vp9 | 8000 kbps | 3996.9 KB | 0.99 s | PASS |
| libvpx-vp9 | 12000 kbps | 4235.2 KB | 0.99 s | PASS |
| libaom-av1 | 1000 kbps | 465.1 KB | 5.95 s | PASS |
| libaom-av1 | 2500 kbps | 1516.0 KB | 7.89 s | PASS |
| libaom-av1 | 5000 kbps | 2966.9 KB | 8.70 s | PASS |
| libaom-av1 | 8000 kbps | 3896.1 KB | 8.68 s | PASS |
| libaom-av1 | 12000 kbps | 4161.6 KB | 8.61 s | PASS |
Methodology
Five deterministic fixtures (talking-head, screen/text, high-motion, low-motion, gradient) at 720p × 30 fps × 5 s. Each fixture encoded with h264, hevc, vp9, av1 at 5 representative bitrates. Output bytes + encode time captured. Inputs and flags reproducible via documented script.
Reproduce: ./node_modules/.bin/tsx scripts/koldflux-task08/run-benchmark.ts
Software: FFmpeg 6.1.1 (libx264, libx265, libvpx-vp9, libaom-av1).
Fixtures: Generated via FFmpeg lavfi (testsrc2, mandelbrot, testsrc, smptebars, gradients). Deterministic. No external assets.
Honesty: VMAF / SSIM are NOT included - current FFmpeg tooling on the runner host lacks libvmaf. Future expansion. Cells reflect bytes + time only.