Сравнение кодеков по типу контента: почему разнится

Автор: Николай СапуновОбновлено: август 202615 мин чтения
Содержание статьи +

Кратко

Один и тот же энкодер AV1, который экономит около 64% битрейта над H.264 на анимации, на пользовательском видео экономит лишь около 48% – разрыв в 16 пунктов, спрятанный внутри одного заголовка «AV1 экономит 55%». Причина физическая: кодеки выигрывают, предсказывая, что будет дальше, поэтому плоский, медленный, повторяющийся материал сжимается куда лучше, чем детальный, быстрый и шумный, а более умные инструменты нового кодека на лёгком материале получают больше пространства для работы. Плёночное зерно – самый острый случай: оно почти случайно, поэтому это самый дорогой для кодирования контент и одновременно то место, где объективные метрики вводят в заблуждение чаще всего. Прежде чем доверять любой цифре экономии кодека, спросите, на каком контенте её измерили, и пересчитайте под тот контент, который вы реально отдаёте.

Зачем это нужно

Любое сравнение кодеков заканчивается одним числом – «HEVC экономит 44%», «AV1 экономит 55%», – и это число есть среднее по корзине контента, которую никто не стримит в таких пропорциях. Если ваш каталог – мультфильмы, реальная экономия больше; если это прямой спорт и загрузки с телефонов – меньше. Эта статья показывает, на наших собственных измерениях, насколько далеко уезжает результат между типами контента, почему он уезжает и как превратить общий заголовок в число, применимое именно к вашей библиотеке. Она написана для инженера или продакт-оунера, которому нужно оценить счёт за CDN, выбрать кодек или защитить бенчмарк – и который не хочет получить сюрприз в проде.

Один датасет – шесть разных ответов

В нашем бенчмарке кодеков (H.264 против HEVC против AV1 при равном качестве) мы привели house-средние около 44% для HEVC и 55% для AV1 над H.264, измеренные как BD-rate при равном качестве. BD-rate (Bjøntegaard Delta rate) – это средняя процентная разница в битрейте между двумя кодеками при одинаковом качестве; BD-rate −55% означает, что кодек достигает того же качества при 55% меньшем битрейте. Это экономия битрейта при равном качестве, а не оценка качества – держите их раздельно.

Эти средние реальны – и они же вводят в заблуждение, если на них остановиться. Те же шесть кривых «битрейт-качество», разбитые по типу контента и пропущенные через ту же арифметику BD-rate, дают шесть очень разных ответов.

Рис. 1. Один и тот же энкодер AV1, шесть типов контента: экономия битрейта над H.264 идёт от 63,6% (анимация) до 47,5% (UGC). Пунктир – заголовочная средняя 55,4%, на которой не сидит ни один тип контента.
Тип контентаHEVC vs H.264AV1 vs H.264AV1 vs HEVC
Анимация−52,3%−63,6%−23,6%
Экран / презентация−50,5%−61,6%−22,3%
Кино / реальная съёмка−45,5%−56,5%−20,2%
Видеосвязь−45,2%−54,5%−17,1%
Спорт (быстрое движение)−36,5%−48,5%−18,9%
Пользовательское (UGC)−35,2%−47,5%−19,1%
Среднее−44,2%−55,4%−20,2%

Прочитайте колонку AV1-vs-H.264 сверху вниз. Анимация отдаёт обратно 63,6% битрейта; UGC – 47,5%. Это разброс в 16 пунктов, и средняя 55,4% сидит посередине диапазона, который не занимает ни один реальный тайтл. HEVC разбегается ещё шире – от 52,3% на анимации до 35,2% на UGC, диапазон в 17 пунктов. Кодек не менялся. Менялся материал.

Поэтому мы и говорим, что одно заголовочное число – это сводка, а не полная картина. Цифры выше взяты из представительного house-датасета (откалиброванного под опубликованную литературу; помечено для прохода по производственным данным), но сам паттерн – лёгкий контент высоко, трудный низко – воспроизводит любой добросовестный бенчмарк. Кросс-вендорный обзор 2026 года ставит анимацию и экранный контент в 40–60% экономии AV1, а быстрый спорт – в 20–30%, та же форма.

Что делает контент лёгким или трудным

Чтобы понять, откуда берётся разброс, надо знать, как кодек вообще экономит битрейт. Видеоэнкодер – это машина предсказания: для большей части кадра он вообще не хранит новые пиксели. Он говорит «этот блок похож на тот блок вон там» (пространственное предсказание) или «этот блок похож на ту же область кадром раньше, чуть сдвинутую» (временно́е предсказание, оно же компенсация движения) – и хранит лишь маленький остаток, разницу между догадкой и правдой. Чем точнее догадка, тем меньше остаток, тем меньше бит.

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

У сообщества есть стандартный способ оцифровать это. Рекомендация ITU-T P.910 (стандарт субъективного видеотестирования, текущая редакция 10/2023) определяет два дескриптора контента. Spatial Information, или SI, измеряет, сколько в кадре мелких деталей и резких краёв – формально прогоняет фильтр Собеля по каждому кадру и берёт стандартное отклонение по картинке, затем максимум по клипу. Temporal Information, или TI, измеряет, насколько картинка меняется от кадра к кадру – стандартное отклонение разности соседних кадров, снова с максимумом по клипу. Высокий SI означает насыщенную, детальную картинку; высокий TI – много движения. У статичного слайда низкий SI и почти нулевой TI; у ручной съёмки спорта высокий SI и высокий TI.

Рис. 2. Контент размещён по пространственной детализации (SI) и движению (TI), по ITU-T P.910. Лёгкий угол снизу слева сжимается дёшево и больше всего вознаграждает новый кодек; трудный угол сверху справа остаётся дорогим.

Таблица ниже сопоставляет каждому типу контента его представительные SI/TI и битрейт, который простому H.264 нужен для достижения VMAF 93 – чистый прокси для «насколько это вообще трудно сжать».

Тип контентаH.264 кбит/с @ VMAF 93SITIПочему так
Экран / презентация2 300606Статичные слайды, точно повторяющиеся пиксели, ограниченная палитра
Анимация2 6004214Плоские заливки, чистые линии, умеренное движение
Видеосвязь2 9003818Статичный фон, мелкое движение говорящей головы
Кино / реальная съёмка4 8006832Реальная текстура и свет, умеренное движение
UGC6 8008246Шумное, тряское, часто уже сжатое однажды
Спорт (быстрое движение)7 5008864Текстура трибун плюс быстрые панорамы и склейки

Спорту нужно примерно втрое больше битрейта, чем анимации, чтобы добить до того же VMAF, и он же отдаёт новому кодеку наименьшую экономию. Этот двойной штраф и есть суть контентной зависимости: трудный контент стоит дороже и оставляет более умному кодеку меньше пространства для хитрости, потому что остаток, который ему всё равно нужно передать, ближе к несжимаемому шуму.

Заметьте одну строку, которая ломает историю SI/TI: у экранного контента самая высокая пространственная детализация (SI 60, от резких краёв текста), однако сжимается он дешевле всех. SI и TI описывают статистику пикселей, а не то, какие инструменты кодирования применимы. Экранный контент полон точно повторяющихся серий – одна и та же буква, одна и та же плоская панель интерфейса, – поэтому кодеки используют для него особые инструменты: palette mode, который хранит короткий список из 2–8 цветов и индекс на пиксель вместо полных отсчётов, и intra block copy, который копирует идентичный блок из другого места того же кадра. HEVC добавил их в расширении Screen Content Coding; AV1 встроил их сразу. Именно из-за них слайд-дек сжимается как анимация, хотя для фильтра краёв выглядит «детальным». Урок: SI/TI – полезный дескриптор контента, но сжимаемость зависит ещё и от того, есть ли у кодека инструмент под этот контент.

Проблема зерна

Плёночное зерно заслуживает отдельного раздела, потому что это тип контента, который ломает и энкодер, и метрику одновременно.

Зерно – настоящее серебряно-галогенное зерно плёнки или добавленное на постпродакшене ради «киношного» вида – по своей природе близко к случайному. Как формулируют авторы синтеза зерна в AV1, его случайность «затрудняет предсказание, делает оценку движения менее точной, а остаток предсказания… содержит шум с вдвое большей дисперсией, чем само зерно» (Norkin и Birkbeck, Film Grain Synthesis for AV1 Video Codec, DCC 2018). Предсказание – это ровно то, как кодеки экономят битрейт, поэтому зерно – самое дорогое, что можно попросить энкодер сохранить. Закодируйте его напрямую – и битрейт раздувается; убавьте битрейт – и зерно либо вычищается (убивая авторский замысел), либо остаётся «пульсировать», пока квантователь колеблется от кадра к кадру.

Современное решение – вообще не кодировать зерно. AV1 (и H.266/VVC) включают синтез плёночного зерна: энкодер убирает шум из источника, дёшево сжимает чистое видео, измеряет статистический узор и силу зерна и передаёт эти несколько параметров рядом с потоком. Декодер воссоздаёт совпадающее зерно и добавляет его обратно при воспроизведении. Экономия большая. В собственном тесте авторов AV1 один клип с сильным зерном упал с 5 729 кбит/с при прямом кодировании до 2 821 кбит/с с синтезом – примерно на 51% – при субъективно лучшем, более стабильном во времени зерне.

Рис. 3. Синтез плёночного зерна: зерно убирают перед кодированием, передают как несколько параметров и восстанавливают в декодере. Полноэталонные метрики сравнивают с исходным зерном и потому не могут оценить это честно.

Вот и измерительная ловушка. Синтез зерна не воспроизводит исходное зерно пиксель в пиксель; он создаёт статистически похожее зерно в других местах. Полноэталонная метрика – та, что сравнивает выход с безупречным оригиналом пиксель за пикселем, – видит каждую зернинку в «неправильном» месте и сообщает низкую оценку, хотя зритель видит тот же фильм с тем же зерном. Авторы AV1 говорят прямо: поскольку инструмент убирает зерно и добавляет похожее, «объективные метрики плохо работают для этого сравнения», поэтому они использовали субъективный тест. Это самый ясный во всём видео пример того, почему истина – глаз, а не метрика (ITU-R BT.500-15). Если вы бенчмаркаете кодирование с синтезом зерна по VMAF или PSNR без человеческой проверки, вы забракуете поток, который ваша аудитория полюбила бы.

Сама метрика смещается по контенту

Зерно – крайний случай, но контентная зависимость идёт глубже энкодера. Метрика, которой вы измеряете, тоже зависит от контента, потому что метрики вроде VMAF – это модели машинного обучения, обученные на конкретном наборе клипов, и они предсказывают лучше всего на контенте, похожем на их обучающие данные.

Два хорошо задокументированных примера. На анимации VMAF (и человеческий глаз) часто оценивает клип куда выше, чем подсказывает его пиксельная ошибка, – чистые края мультфильма выглядят отлично, даже когда PSNR, который просто считает разницу пикселей, читается так же, как у куда худшего клипа реальной съёмки. На сильном зерне или сенсорном шуме VMAF может качнуться в другую сторону – иногда переоценивая шумный контент, иногда недооценивая чистое шумоподавление, в зависимости от модели. Практическое следствие: надёжность вашего числа меняется вместе с контентом одновременно с тем, как меняется истинная сжимаемость. Полностью мы разбираем это в где врут объективные метрики; для этой статьи правила достаточно – называйте метрику и модель у каждой оценки (VMAF default v0.6.1 здесь), а на анимации, зерне и экранном тексте перепроверяйте образец глазом (почему субъективное тестирование – эталон истины), прежде чем доверять кривой.

Ваше число зависит от вашего каталога

Сложите две идеи – экономия меняется по контенту, и вы отдаёте конкретный микс контента – и вы придёте к практическому смыслу этой статьи. Универсальной «экономии AV1» нет. Есть только ваша экономия, заданная вашим каталогом.

Арифметика – это средневзвешенное из BD-rate по типам, взвешенное по доле, которую каждый тип занимает в вашей библиотеке. Возьмём сервис с упором на анимацию: 60% анимации, 20% экрана, 20% кино. По колонке AV1-vs-H.264:

0,60 × (−63,6%)  +  0,20 × (−61,6%)  +  0,20 × (−56,5%)
   = −38,16   +   −12,32   +   −11,30
   = −61,8%

Теперь платформа прямого спорта и UGC: 60% спорта, 40% UGC.

0,60 × (−48,5%)  +  0,40 × (−47,5%)
   = −29,10   +   −19,00
   = −48,1%
Рис. 4. Тот же датасет, два каталога, два заголовочных числа: анимационный сервис правдиво сообщает AV1 на уровне −62%, спортивный/UGC – на уровне −48%. Ни одно не ошибочно; разница целиком в составе контента.

Оба сервиса читают один и тот же датасет и оба говорят правду, но один объявляет «AV1 экономит 62%», а другой – «AV1 экономит 48%»: разрыв в 14 пунктов целиком из того, что они стримят. Поэтому же два опубликованных бенчмарка могут расходиться честно: разные корзины контента дают разные средние даже при идентичных энкодерах. (Второй слой, который мы разбираем в сравнении кодеков, – взвешивание по аудитории: большинство просмотров концентрируется на верхних ступенях лестницы, поэтому экономия с весом по битрейту, которую сервис реально кладёт в карман, обычно меньше простого среднего BD-rate.) Инструмент-бенчмарк ниже считает это число с весом по каталогу для любого микса, который вы зададите.

«Частая ошибка: цитировать одно число кодека для «вашего» контента. Слайд вендора говорит «AV1: на 50% меньше». Вы планируете бюджет CDN по нему. Но эти 50% измерены на корзине контента – и если ваш сервис скошен в сторону спорта, новостей или загрузок с телефона, ваша реальная экономия ближе к высоким 30-м или 40-м, а счёт приходит сильно выше плана. Лечение – одна строка работы: разбейте свои клипы по типам, измерьте каждый и взвесьте по своему каталогу. Никогда не сравнивайте число, измеренное на одном типе контента, с целью, заданной на другом, и никогда не усредняйте по типам так, будто минута анимации и минута спорта – одна и та же задача кодирования.»

Производственный ответ: перестать кодировать всё одной настройкой

Если результаты качества меняются по контенту настолько сильно, очевидный вывод таков: единый фиксированный рецепт кодирования – одна битрейтная лестница на всю библиотеку – транжирит битрейт на лёгких тайтлах и недокармливает трудные. Именно к этому выводу пришла стриминговая индустрия, и ответ – per-title и per-shot encoding: измерить поведение «битрейт-качество» каждого тайтла (или каждого плана) и построить под него индивидуальную лестницу, тратя биты там, где контенту нужно, и экономя там, где нет. Механика выбора этих точек – выпуклая оболочка кривых по разрешениям; логика решения – целиться в оценку качества, а битрейт отпускать по контенту – разобрана в per-title и per-shot encoding. Контентная зависимость – не досадная оговорка, которую надо обойти; это и есть вся причина, по которой контент-адаптивное кодирование существует и окупается.

Где здесь Фора Софт

Мы строим продукты для стриминга, OTT, видеосвязи, видеонаблюдения, e-learning и телемедицины, и контент в этих вертикалях не может быть разнообразнее – телемедицинский дерматологический поток, лекционный шаринг экрана и прямая спортивная трансляция сидят в противоположных углах карты SI/TI. Мы измеряем качество по типам контента, а не доверяем одному house-числу, потому что решение по кодеку или лестнице, верное для богатого слайдами каталога e-learning, неверно для спортивного продукта с быстрым движением. Наша методология бенчмарков фиксирует набор контента за каждой цифрой именно по этой причине, а датасет по типам контента здесь опубликован, чтобы вы пересчитали его под свою библиотеку, а не наследовали нашу.

Ключевые выводы

  • Одна цифра экономии прячет широкий разброс: AV1 над H.264 шёл от 47,5% (UGC) до 63,6% (анимация) в наших данных.
  • Кодеки экономят биты предсказанием, поэтому плоский, медленный, повторяющийся контент сжимается лучше всего и выигрывает больше.
  • SI (детализация) и TI (движение) по ITU-T P.910 описывают контент, но инструменты кодирования тоже важны – экранный контент исключение.
  • Плёночное зерно почти случайно: самый дорогой контент и тот, что чаще всего обманывает полноэталонные метрики.
  • Надёжность VMAF зависит от контента; перепроверяйте анимацию, зерно и экранный текст глазом.
  • Ваша реальная экономия – это среднее с весом по каталогу; посчитайте её под свой микс, не наследуйте заголовок.

Что почитать дальше

Строите такую систему?

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