Набор тестовых видео
Для кодирования подобраны следующие тестовых видео
| Характер видео | Источник |
|---|---|
| Action | Tears 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 |
Примеры видео
Все исходные видео имеют следующий набор размеров кадра для кодирования в соответствующий набор битрейтов
| Размер кадра | Целевые битрейты |
|---|---|
| 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.

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

Теперь визуально график соответствует вопросу. Более «высокая» кривая теперь говорит, что этому кодеку недостаточно битрейта, чтобы соответствовать качеству второго.
Хорошо, мы определили, что в точке 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.