Encoding-Quality-Testing

Created with the voctoquality repo.

Reference content

Reference content is either our own (https://media.ccc.de) or from Xiph (https://media.xiph.org/video/derf/).

The specific sources are found in https://github.com/voc/voctoquality/blob/master/data/sources.json

All the reference content is converted to 8bit 1080p25.

Software

ffmpeg-4.1.4 (same as in buster)

libvmaf-1.3.15

libvpx-1.8.2 (bullseye)

libx264-2:0.155.2917+git0a84d98-2 (bullseye)

Testing VAAPI vs. software encoding for live streaming

The codec settings are the ones currently in use by the C3VOC for live streaming.

See https://github.com/voc/voctoquality/blob/master/data/profiles/voc_streaming.py for the specific ffmpeg options.

The codecs are tested with bitrates from 1Mbit/s to 5.2Mbit/s.

Graphs

streaming_rates.pdf streaming_refs.pdf streaming_speeds.pdf

Comments

Platform	Label	Hardware Codecs	Comments
Intel 6th Gen (i7-6600U)	skylake	h.264, h.265	h.264 scores better than our VP9 and x264 streaming settings and is pretty fast h.265 even scores a little bit higher but is considerably slower
Intel 8th Gen (i7-8665U)	whiskeylake	h.264, h.265, VP9	h.264 and h.265 results worse but faster than skylake, have to check whats up with that VP9 scores worse than H.264 and has broken rate-control for <2mbit/s
AMD Navi (RX 5700 XT) + Ryzen 2nd Gen (R5-2600)	navi10	h.264, h.265	h.264 is worse than x264 on veryfast… h.265 produces 1920×1088 output?
Nvidia Turing (RTX2080 Super)	turing	h.264, h.265	nvidia-driver-460, cuda-toolkit 9.1.85 best h.265 encode, h.264 behind Intel

Finding a Tracker VP9 Profile

HD-Profile

Goals:

improve quality over previous libvpx (VP8) profile

don't increase encoding time too much

smaller size but similar quality as x264 master

Notes:

realtime + speed ⇐ 3: slower and worse than quality good

-i $ref
-c:v libvpx-vp9
-quality:v good
-crf:v 30
-b:v 6000k
-maxrate:v 8000k
-minrate:v 2000k
-row-mt 1
-frame-parallel:v 1 -tile-columns:v 2

SD-Profile

worse parallelization and therefore speed than HD-profile

worse rate-control than HD-profile (doesn't reach target bitrate)

bufsize doesn't change anything

no threads parallelizes best

frame-parallel doesn't work (frame too small?)

bitrate with crf is more like maxrate