В октябре 2015 года MPEG и VCEG сформировали команду Joint Video Exploration Team (JVET), которая должна была оценить доступные технологии сжатия и изучить требования к стандарту сжатия видео следующего поколения. Стандартизация VVC началась в 2018 году.
Основные требования, которые предъявлялись к новому стандарту:
• алгоритмы должны иметь на 30–50% лучшую степень сжатия по сравнению с существующим стандартом HEVC для того же качества восприятия, с поддержкой сжатия без потерь и субъективно без потерь;
• поддерживать разрешения от 4K до 16K, а также VR 360° видео;
• поддерживать цветовое пространство YCbCr с дискретизацией 4:4:4, 4:2:2 и 4:2:0;
• глубина цвета 8–16 бит на компоненту;
• BT.2100 и высокий динамический диапазон (HDR) более 16 ступеней;
• вспомогательные каналы для глубины, прозрачности и т. д.;
• переменная и дробная частота кадров от 0 до 120 Гц;
• масштабируемое кодирование и изменение частоты кадров (temporal) и разрешения (spatial);
• SNR, стереофоническое / многоэкранное кодирование, панорамные форматы и кодирование неподвижных изображений.
Ожидалось, что сложность кодирования должна быть до 10 раз выше, чем у HEVC, а сложность декодирования в 2 раза выше.
6 июля 2020 года стандарт сжатия VVC, также известный как H.266, ISO/IEC 23090-3, MPEG-I Part 3 и Future Video Coding (FVC), был завершен. В этой статье мы рассмотрим наиболее интересные технологии кодирования видео, которые стали частью стандарта VVC.

Структура кодирования
Slices, tiles, subpictures
Размер CTU (coding tree unit) был увеличен с 64х64 до 128х128 пикселей, Tiles/Slices/Subpictures теперь логически разделены в битовом потоке. Каждый кадр видео разбивается на регулярную сетку блоков. Несколько блоков можно объединить в логические области. Они определены как плитки (tiles), фрагменты (slices) и субкартинки (subpictures). Эти методы уже известны из более ранних кодеков, но VVC использует новый способ их комбинирования. Ключевая особенность этих областей заключается в том, что они логически разделены в битовом потоке и позволяют использовать различные варианты:
• кодер и декодер могут реализовать параллельную обработку;
• декодер может выбрать только частичное декодирование нужных ему областей видео (одно из возможных приложений — это передача панорамного видео, когда пользователь может видеть только части полного видео);
• битовый поток может быть закодирован таким образом, чтобы можно было извлекать часть видеопотока на лету без повторного кодирования.

Разбиение блока
В HEVC была одна древовидная структура, которая позволяла рекурсивно разбивать каждый квадратный блок на 4 квадратных субблока. В VVC теперь есть несколько возможных разделений, которые встроены в множественную древовидную структуру. На первом этапе делается разбиение на квадродерево (как в HEVC). На втором этапе каждый блок может быть разделен по горизонтали и вертикали на 2 (BT split) или 3 (TT split) части.



Этот этап снова является рекурсивным, так что каждый прямоугольный блок снова можно разделить на 2 или 3 части по горизонтали или вертикали. Такой подход позволяет кодировщику гораздо лучше адаптироваться к входному контенту, но в то же время намного усложняет кодирование видео.


CTU block

Помимо этого, блоки для кодирования яркости (luma) и цветности (chroma) могут быть разными (структура двойного дерева). Другими словами, образцы цветности будут иметь структуру дерева кодирования, независимую от образцов яркости в одном и том же CTU. Это позволяет выборкам цветности иметь большие размеры блока кодирования, чем выборки яркости.



Предсказание блоков
Пространственное предсказание
Для Intra кодирования по-прежнему остались прежние режимы Planar, DC, PCM и Angular Prediction. При этом количество направлений для Angular Prediction было увеличено с 33 (HEVC) до 65.





Поскольку блоки предсказания в VVC могут быть неквадратными, некоторые из традиционных режимов адаптивно заменяются широкоугольными направлениями (Wide Angle Intra Prediction). Так что для предсказания можно использовать больше опорных пикселей. Фактически это расширяет углы прогнозирования направления до значений, превышающих нормальные 45 ° и –135 °.
Добавился новый режим прогнозирования (Position-dependent prediction combination), в котором можно выполнять направленную интерполяцию. Он объединяет пространственное (Intra) предсказание с позиционно-зависимым взвешиванием некоторых основных и контрольных выборок.
Также во многих случаях компоненты яркости и цветности несут очень похожую информацию, поэтому для таких случаев добавили новый режим предсказания — кросс-компонентное предсказание (Cross-component Prediction). В этом режиме применяется метод прямого прогнозирования компонентов цветности из восстановленного блока яркости с использованием линейной комбинации восстановленных пикселей с двумя параметрами: коэффициентом и смещением, где коэффициенты вычисляются из внутренних опорных пикселей. При необходимости также производится масштабирование блока.
В VVC теперь доступно предсказание по двум строкам (Multi Reference Line Prediction), которые не находятся непосредственно рядом с текущим блоком.







Межкадровое предсказание
Основные концепции однонаправленной и двунаправленной компенсации движения из одного или двух опорных изображений в основном не изменились. Однако есть новые инструменты, которые раньше не использовались в стандарте кодирования видео.
Обычная компенсация движения представляет собой двумерное плоское движение. Такое движение в реальном видео встречается довольно редко, так как объекты двигаются более свободно и/или меняют свою форму. Для таких случаев в VVC реализовали модель аффинного движения (Affine motion), которая использует два или три вектора, чтобы обеспечить движение с четырьмя или шестью степенями свободы.







Максимальная точность вектора движения яркости увеличивается с 1/4 пикселя до 1/16. Соответствующая точность вектора движения цветности увеличена с 1/16 пикселя до 1/32.
Теперь при кодировании можно применять адаптивное разрешение вектора (Adaptive motion vector resolution). С его помощью можно снизить стоимость кодирования для больших значений MV, что особенно актуально для кодирования высоких разрешений: 4K и выше.
Появился метод компенсации движения перекрывающихся блоков — Overlapped Block Motion Compensation. Этот метод перекрывает края соседних блоков, а затем сглаживает их, чтобы избежать резких переходов, которые обычно возникают при межкадровом предсказании.
Если блок использует двунаправленное предсказание, то новый метод BDOF (Bi-directional optical flow) позволяет уточнить движение блока предсказания. Этот алгоритм не требует сигнализации для декодера и экономит от 2 до 6% битрейта.
Decoder side motion vector refinement позволяет уточнять векторы движения в декодере без передачи дополнительных данных о движении. Процесс состоит из трех этапов. Сначала выполняется двунаправленное предсказание, и данные взвешиваются в блоке предварительного предсказания. Далее происходит поиск вокруг позиции исходного блока с фиксированным числом позиций, если лучшая позиция найдена, то исходный вектор движения обновляется. И в завершении, снова выполняется двунаправленное предсказание с обновленными векторами движения, чтобы получить окончательное предсказание.
Реальное видео обычно плохо предсказывается с помощью прямоугольных блоков, поэтому, чтобы повысить эффективность, в VVC добавили геометрическое разбиение (Geometric Partitioning). Данная опция позволяет выполнять негоризонтальное разбиение блока на две части. При этом для каждой части выполняется своя компенсация движения. В текущей реализации существует 82 различных режима геометрического разбиения.



Преобразование и квантование
В VVC максимальный размер блока преобразования (transform block) увеличен до 64×64. Эти преобразования особенно полезны, когда речь идет о контенте HD и Ultra-HD.
По сравнению с HEVC, в котором было только одно DCT (DCT-II) преобразование, VVC имеет 4 разделяемых:
• DCT (DCT-VIII) — дискретное косинусное преобразование в варианте 3;
• DST-VII — дискретное синусоидальное преобразование.
В зависимости от режима прогнозирования кодировщик может выбирать различные преобразования.
В стандарте VVC Adaptive LoopFilter имеет следующие особенности:
• фильтр в виде ромба 7х7 для яркости (13 различных коэффициентов), фильтр в виде ромба 5х5 для цветности (7 различных коэффициентов);
• каждый блок яркости 4х4 делится на 25 различных классов с использованием вертикального, горизонтального и двух диагональных градиентов;
• в зависимости от вычисленных градиентов, коэффициенты фильтра до применения могут пройти одно из трех преобразований: диагональное, вертикальное отражение и вращение.

Сравнение кодирования HEVC и VVC
На следующих графиках представлены результаты кодирования двух тестовых последовательностей с использованием референсных кодеров HEVC HM 16.15 и VVC VTM-12.0. В обоих случаях кодирование осуществлялось со стандартным конфигурационным файлом (randomaccess.cfg) и с помощью одинаково оптимизированных кодеров.
Как видно по графикам (рис. 1 и рис. 2), эффективность кодирования VVC на всех битрейтах превосходит предыдущий стандарт. Рассмотрим график BQMall (рис. 1) и полученные значения в средней части графика. Для последовательности HEVC мы получили битрейт 1002 kbps и APNSR 38.58 dB. Чтобы получить аналогичное качество при кодировании в VVC достаточно битрейта в 696kbps (APSNR 38.50 dB), то есть экономия битрейта составляет 30%. При этом время кодирования для HEVC кодера составило около 16 минут, а для VVC — 2 часа 29 минут, то есть в 9,3 раз дольше.


Рис. 1. График BQMall


Рис. 2. График BasketballDrill

Автор
Дмитрий Тепляков — продолжатель династии видео инженеров, Дмитрий знает все о видео и с большим энтузиазмом его снимает, редактирует, кодирует и анализирует. Будучи в профеcсии уже более 20 лет, в Elecard он возглавляет отдел качества и производства видео.