| Codec / encoder | VP9 · libvpx-vp9 -deadline good -cpu-used 2 -row-mt 1 |
|---|
| Command | ffmpeg -hide_banner -loglevel error -y -i SRC.y4m -frames:v 60 -pix_fmt yuv420p10le -c:v libvpx-vp9 -deadline good -cpu-used 2 -row-mt 1 -threads 8 -tile-columns 1 -g 30 -keyint_min 30 -lag-in-frames 19 -auto-alt-ref 1 -profile:v 2 -b:v <target> -minrate <target> -maxrate <target> -bufsize <vbv> -f ivf OUT |
|---|
| Points | target T = 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 180, 200, 220, 240 Mbit/s (step 10 up to 160, 20 up to 240, 40 up to 480; top = the codec's 8K60 limit at level 6.1); calibrated to 96–100 % of T; the ladder stops when a target is unreachable for the content |
|---|
| VBV | min(level MaxCPB, 1 s × target) |
|---|
| Profile | Profile 0 (8-bit) / Profile 2 (10-bit) |
|---|
| Level / buffer | libvpx level table (vp9_level_defs); VP9 carries no level in the bitstream, the level is a label only (CPB of 5.2–6.2 tentative in libvpx). Level = the lowest one covering size, sample rate and the actual bitrate; buffer in the name = that level's MaxCPB. |
|---|
| Structure | 60 frames = 2 GOP × 30 (keyframes at frames 0 and 30, closed GOP), 3 B-frames with pyramid, 4:2:0, bit depth as in the source. Container: .ivf. |
|---|
| Verification | reference decoder vpxdec (libvpx, high bit depth) → YUV md5, cross-checked with the ffmpeg decoder md5, 60 frames, keyframes at 0 and 30, profile/level read back with ffprobe, PSNR/SSIM against the source. |
|---|