Набор тестовых видео

Для кодирования подобраны следующие тестовых видео

Характер видеоИсточник
ActionTears of Steal
МультфильмNetflix Sol Levante
ФильмHarmonic Venice Carnival
Netflix Food Market
Netflix Meridian
Netflix Wind and Nature
ПриродаHarmonic Birds of Pray
Harmonic Monkey Pool
Harmonic Monkey Fur Closeup
Harmonic Waterfall
Статичное видеоКостёр на пляже
ТелеконMixKit Coworkers

Примеры видео

Tears of Steal, action scene
Netflix Sol Levante, animation
Harmonic Venice carnival
Netflix Food market
Netflix Meridian
Netflix Wind and Nature
Harmonic Birds of Prey
Harmonic Snow monkeys, monkey pool scene
Harmonic Snow monkeys, monkey fur closeup scene
Harmonic Snow monkeys, waterfall scene
ProArtInc Campfire on Ruby Beach, static scene
MixKit Coworkers, teleconference

Все исходные видео имеют следующий набор размеров кадра для кодирования в соответствующий набор битрейтов

Размер кадраЦелевые битрейты
256×144«27K», «62K», «97K», «132K», «167K», «203K», «238K», «273K», «308K», «343K»
412×232«49K», «111K», «174K», «236K», «299K», «361K», «424K», «486K», «549K», «611K»
640×360«95K», «216K», «338K», «459K», «581K», «702K», «824K», «945K», «1067K», «1188K»
852×480«148K», «337K», «526K», «714K», «903K», «1092K», «1281K», «1469K», «1658K», «1847K»
1280×720«260K», «591K», «921K», «1252K», «1583K», «1913K», «2244K», «2575K», «2905K», «3236K»
1920×1080«461K», «1046K», «1632K», «2217K», «2802K», «3388K», «3973K», «4558K», «5144K», «5729K»
2560×1440«671K», «1523K», «2374K», «3226K», «4078K», «4929K», «5781K», «6633K», «7484K», «8336K»
3840×2160«1000K», «2333K», «3667K», «5000K», «6333K», «7667K», «9000K», «10333K», «11667K», «13000K»

Метрики качества

PSNR: https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio

SSIM: https://ru.wikipedia.org/wiki/SSIM

VMAF: https://github.com/Netflix/vmaf

Сравнительный анализ кодеков на диапазоне битрейтов

Сравнение качества кодеков на диапазоне битрейтов основано на методе Йисле Бьёнтегора: https://www.itu.int/wftp3/av-arch/video-site/0104_Aus/VCEG-M33.doc.

При подсчёте BDBR использованы каналы для метрик

МетрикаКанал
VMAFСредневзешенный по всем каналам
PSNRСредневзешенный по всем каналам
SSIMЯркостный (Y)

Что такое BDBR

Если вы уже занимались анализом качества видеокодирования и сравнением разных кодеков, то наверняка использовали кривые зависимости качества от битрейта или RD curves.

RD Curves

Так как по оси X отложены значения битрейта, а ось Y — показатель качества, то верхняя кривая говорит, что этот кодек кодирует с более высоким качеством на том же битрейте. Визуально кривые достаточно близко друг к другу и можно сделать ошибочный вывод, что по качеству они отличаются не сильно. Однако BDBR говорит, что кодеку с зелёной кривой необходимо добавить в среднем 45% битрейта, чтобы достичь качества второго.

При постановке вопроса «насколько нужно больше или меньше битрейта, чтобы достичь качества со сравниваемым кодеком?» необходимо отложить горизонтальную линию по уровню качества и посмотреть в каких точках битрейта она пересечётся с кривыми. Для этой цели больше подходит «перевёрнутый» график, где по оси X — качество, а Y — необходимый битрейт:

Quality based RD Curves

Теперь визуально график соответствует вопросу. Более «высокая» кривая теперь говорит, что этому кодеку недостаточно битрейта, чтобы соответствовать качеству второго.

Хорошо, мы определили, что в точке 90 VMAF красному необходимо 5,15 Мб/с, а зелёному — 9,89 Мб/с. Но этого недостаточно, чтобы понять, насколько один кодек лучше другого. Можно посмотреть разницу на границах и усреднить значения, и продолжать добавлять точки для усреднения общего показателя до бесконечности. Что по сути будет являться отношением площадей под кривыми.

Для того, чтобы получить отношение площадей под кривыми необходимо вычислить полиномы описывающие зависимость качества от битрейта, определить границы пересечения битрейтов двух кодеков и интегрировать функцию на этом отрезке.

Именно это и предложил Йисле Бьёнтегор в 2001 году для сравнения качества кодеков. Технически достаточно 4 точек для этого подхода. В моих тестах используется 10. С одной стороны это точнее. С другой — уменьшается вероятность выбросов между точками при нахождении полинома. Хотя и не на 100%.

Для этого подхода есть ограничение — функция должна быть монотонно возрастающая. С одной стороны это усложняет вычисления и требует проверок и специальных методов «выправления» функции. Но с другой — это флажок, что кодек ведёт себя непредсказуемо. Т.е. если при равномерном повышении битрейта кодек может снизить качество, то появляются вопросы к надёжности его использования.

Интерпретируется полученное значение непосредственно как коэффициент, на который надо в среднем увеличить (или уменьшить) битрейт, чтобы достичь качества сравниваемого кодека. Например, +45% говорит, что необходимо увеличивать на 45% битрейт. -15% — можно снизить битрейт на 15%, чтобы кодировать с тем же качеством.

Об этом же говорят и рекламные статьи. Если AV1 на 30% лучше, чем HEVC, то это утверждается, что можно кодировать с битрейтом на 30% ниже с тем же качеством, что и HEVC.

BDBR — относительная метрика. Под капотом можно использовать любые «абсолютные» метрики, как-то VMAF, PSNR, SSIM и др. Зависит от конкретных задач и методики оценки. В моих тестах я использую все три и в скором времени планирую добавить SSIMULACRA2 и CIEDE2000 для более полной картины и отлавливания «хакинга» конкретных метрик.

BDBR расшифровывается как Bjontegaard Delta Bitrate.