AVC, HEVC, VVC: в чём разница и когда пора переходить
Аббревиатуры AVC, HEVC и VVC мелькают в технических обсуждениях постоянно. Но что за ними стоит на практике? Почему нельзя просто выбрать один стандарт и пользоваться им вечно? И когда реально стоит задуматься о переходе на VVC?
Разбираемся без лишней теории.
Зачем вообще нужны новые стандарты
Причина простая: железо становится мощнее, разрешения видео растут, частота кадров увеличивается, количество бит на пиксель тоже растёт. Всё это нужно как-то передавать и хранить в рамках разумного битрейта.
Разработчики каждого нового стандарта ставят перед собой чёткую цель: новый стандарт должен быть эффективнее предыдущего не менее чем на 50%. При этом декодирование не должно быть сложнее предыдущего более чем в два раза, а кодирование — более чем в десять раз.
Три поколения стандартов: что изменилось
AVC (H.264) — стандарт, который до сих пор является рабочей лошадкой индустрии. Именно в нём впервые появился целый ряд ключевых инструментов: внутрикадровое предсказание с угловыми режимами, контекстно-адаптивное арифметическое кодирование (CABAC). Семь угловых режимов предсказания, квадратные блоки преобразования — по нынешним меркам скромно, но в своё время это был большой шаг вперёд.
HEVC (H.265) — следующее поколение, которое принесло существенный прирост эффективности. Количество угловых режимов предсказания выросло с 7 до 33. Появились тайлы для параллельного кодирования нескольких фрагментов изображения одновременно. Базовый блок обработки вырос в размере.
VVC (H.266) — новейший стандарт, финализированный в последние годы. Он разрабатывался как прямое продолжение HEVC с чёткой целью — ещё раз существенно снизить битрейт при том же качестве. Количество угловых режимов предсказания удвоилось по сравнению с HEVC. По измерениям, VVC эффективнее HEVC примерно на 40% по показателю PSNR.
Что нового принёс VVC
VVC унаследовал все инструменты HEVC и добавил к ним целый ряд нововведений.
Больше вариантов разбиения кадра на блоки. В HEVC использовалось только квадродерево — рекурсивное деление блока на четыре части. VVC добавил бинарное и тернарное разбиение: блок можно разделить на две или три части. Это позволяет точнее адаптироваться к содержимому изображения. 
Аффинная компенсация движения. До VVC был возможен только один способ предсказания — методом так называемого параллельного переноса. В реальности характер движения может быть гораздо более сложным: блоки могут поворачиваться, увеличиваться, уменьшаться и принимать искажение сдвига. Чтобы поддержать такие сложные виды движения, в стандарте VVC разработали аффинную компенсацию движения.
Матричное предсказание. Принципиально новый вид внутрикадрового предсказания, основанный на машинном обучении. В отличие от всех остальных инструментов стандарта, он не имеет строгого математического обоснования — просто хорошо работает на практике.
Увеличенный базовый блок. Размер базового блока обработки (CTU) вырос до 128×128 пикселей. Это снижает накладные расходы на сигнализацию при работе с высокими разрешениями.
Subpicture. Новая структура данных, позволяющая закодировать в рамках одного кадра несколько независимых изображений. Особенно полезна для видео 360° — одного из ключевых сценариев, под который проектировался VVC. 
Профиль для скринконтента. VVC включает в основной профиль кодирование контента, захваченного с экрана.
Почему VVC ещё не везде
Если VVC настолько лучше, почему он не используется повсеместно? Ответ в двух словах: аппаратная поддержка и вычислительная сложность.
Кодирование в VVC занимает примерно в 20 раз больше времени, чем в HEVC. HEVC уже требует серьёзных вычислительных ресурсов — а тут ещё в 20 раз больше. Для потокового кодирования в реальном времени это серьёзное препятствие.
Аппаратных кодеров и декодеров с поддержкой VVC пока единицы — на рынке можно найти лишь несколько моделей. При этом история отрасли показывает, что первые аппаратные реализации часто поддерживают не все возможности стандарта. Например, когда Intel выпустил первый аппаратный HEVC-кодер, он технически был HEVC, но по набору реально используемых инструментов больше напоминал AVC — всего семь угловых режимов предсказания вместо тридцати трех. Полноценная реализация появилась позже, в следующих поколениях.
Когда переходить на VVC: практические соображения
VVC действительно позволяет повысить эффективность сжатия по сравнению с HEVC. По приведённым в докладе оценкам, выигрыш по эффективности составляет около 40%, а при прочих равных переход на VVC может позволить существенно снизить битрейт.
Однако при выборе нового кодека важно учитывать не только эффективность сжатия, но и вычислительную сложность и аппаратную поддержку.
VVC стоит рассматривать, если:
- для вас важна высокая эффективность сжатия и снижение битрейта;
- вы работаете с большими разрешениями: при разработке VVC особое внимание уделялось, в частности, 8K;
- вы можете позволить себе высокую вычислительную сложность кодирования, например при сценариях, где скорость кодирования не является главным ограничением;
- ваши устройства и программное обеспечение на стороне пользователей поддерживают декодирование VVC.
С переходом стоит быть осторожнее, если:
- вам необходимо кодирование в реальном времени и доступные вычислительные ресурсы ограничены;
- ваша аудитория использует устройства без аппаратной или программной поддержки VVC;
- вам требуется полноценная аппаратная реализация всех возможностей стандарта.
В конечном итоге выбор зависит от конкретного сценария. VVC предлагает более высокую эффективность сжатия, но за это приходится платить большей сложностью кодирования и пока ещё ограниченной аппаратной поддержкой. Поэтому перед переходом важно сопоставить потенциальное снижение битрейта с вычислительными затратами и возможностями устройств, на которых будет декодироваться поток.