В октябре 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 части по горизонтали или вертикали. Такой подход позволяет кодировщику гораздо лучше адаптироваться к входному контенту, но в то же время намного усложняет кодирование видео.