March 28

База видеокодеков, как ProRes ускоряет предпросмотр и как стриминги задушили AV1

Сегодня у нас будет довольно интересная статья. Это не будет обзор какой-то проги, история из жизни или выходец из интерактива. Сегодня мы посмотрим на видео. На ту его часть которая не видна обычному зрителю, но без которой оно не может существовать по определению. Мы посмотрим на кодеки. Те самые волшебные алгоритмы благодаря которым наши ролики могут работать.

Мы рассмотрим то как хранится информация в кодеках, разберём различные типы кадров и то как они работают в связке, узнаем почему прокси созданные в кодеке Apple ProRes такие быстрые и при этом такие огромные в размерах, разберём юридический ад который не позволил внедрить стримингам HEVC, попытаемся понять почему AV1 на ютубе выглядит хуже своих более старых коллег, а в конце подведём итог и определим одну истину: почему H264 будет вечным.

Статья будет поделена на главы, их я буду отмечать заголовками поэтому вы их точно не пропустите. А тем временем...

Хранение информации: Intraframe VS Interframe

Для того чтобы ответить на вопрос "почему ProRes летает в плейхеде монтажки" нужно понять как кодеки хранят в себе информацию и как именно происходит её сжатие. Есть 2 типа сжатия, внутрикадровое (Intraframe) и межкадровое (Interframe), именно они определяют конечный вес видео и то как быстро он будет работать.

Начнём с внутрикадрового сжатия. Его самый популярный пользователь - Apple ProRes. Логика этого типа сжатия в том что каждый кадр хранится как отдельная картинка, даже если изменений на экране нет. Именно поэтому конечное видео весит очень много и при этом очень быстро проигрывается в монтажках. Потому что процессору не нужно отслеживать изменения как это будет при втором типе.

Как аналогию можно привести киноплёнку в ранней эпохе кино. Для одного фильма нужны километры плёнки, но при этом сам механизм будет довольно банальным и по сути будет просто прокручивать плёнку выводя каждый кадр отдельно на проектор.

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

I-Frame - IntraFrame или ключевой кадр. Именно он является точкой отсчёта для последующих двух.

P-Frame - Predicted Frame. Он хранит отличия текущего кадра от предыдущего и смешивает их. Например если девушка произносит речь на фоне стены то кодировщик не будет каждый раз сохранять стену ибо зачем? Он просто возьмёт её из старого кадра.

B-Frame - Bi-directional Frame. В отличие от P-Frame он берёт не только прошлый кадр но и следующий смешивая их в попытке предсказать то что будет дальше и дать более плавную и качественную картинку.

Основными пользователями межкадрового сжатия являются кодеки H26X, VP9 и AV1

Исходя из этих фактов мы получаем что для монтажа лучшим вариантом сжатия будет Intraframe, поскольку такой вариант проще для монтажной программы, но если мы уже смонтировали видео и его нужно выгодно сжать уже используется кодек с вариантом сжатия Interframe, потому что он очень сильно экономит место.

Interframe кодеки: почему H264 работает на любом чайнике и как лицензиары HEVC заставили создать AV1

Скорее всего перед любым рендером, или созданием любого типа прокси вы видели кучу кодеков, таких как H264, HEVC, AV1, а также различные вариации ProRes. Разберём их различия подробнее, выявим их плюсы и минусы

H264 - универсальный стандарт

Сейчас H264 или как иногда его могут записывать AVC (так его будем записывать и мы) это самый популярный стандарт. Он работает на всём что способно играть видео и именно от него пойдут и H265 и AV1.

Как он работает: при использовании AVC он разбивает картинку на макроблоки размером 16x16 пикселей и работает именно с ней.

Представим что это один фрейм видео, а квадратики это макроблоки

При изменении картинки изменяются именно конкретные макроблоки в которых кодек видит движение. При этом то что не менялось - остаётся от прошлого кадра. Именно так выходит эффективное сжатие

Плюсы: предсказуемый механизм, а также высокая совместимость

Минусы: количество блоков. Когда H264 появился в проде мир не знаю про 4к и 8к. Но когда они появились это стало проблемой. Если небо залито сеткой 16х16 блоков в 4к то этих блоков становится слишком много и по итогу сжатие получается неэффективным

H265 (HEVC) - решение проблем H264

Когда H264 стал неэффективным, рынок затребовал что-то более эффективное для высоких разрешений. Решением стал H265. Основное его отличие от H264 в использовании разного размера блоков, с максимальным пределом в 4 раза выше, что позволило более эффективно сжимать высокие разрешения, при этом не терять в качестве, ведь алгоритм обнаружения изменений тоже улучшили и он может использовать большие блоки там где меньше деталей, а там где их больше использовать маленькие

Отличия H264 от H265

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

Минусы: юридическое лицензирование

Юридический цирк - почему кодек который должен был убить своего предшественника оказался никому не нужен

Казалось бы, HEVC лучше AVC во всём, но его никто не использует из гигантов рынка. Почему? А всё дело в юридических дебрях.

AVC на самом деле тоже не бесплатный. Но им владела одна, вполне конкретная организация - MPEG LA. И все компании которые используют этот кодек делают отчисления именно ей. Но когда вышел HEVC начался какой-то бред. Им стали владеть сразу 3 компании и каждая из них требовала денег. Более того, они стали ахуевать. Они захотели брать деньги со стримингов. То есть гугл должен был отчислять деньги всем трём тупо за то что ютуб использует их гугл. Ну и конечно все мировые IT-гиганты послали их курить бамбук НАХУЙ ЭТИХ ХУЕСОСОВ ПОСЛАЛИ.

AV1 - опенсорсный ответ наглости лицензиаров HEVC

Поскольку лицензиары HEVC поахуевали, но хорошее сжатие для стримингов и контента всё равно нужно было нужно, айти-гиганты решили всё взять в свои руки. Именно поэтому Amazon, Cisco Systems, Google, Intel, Microslop, Netflix и Mozilla Corporation объединились в альянс AOMedia и выпустили AV1. Его огромное превосходство в том что никому платить не надо. Стандарт открыт, его исходный код лежит на гитлабе и любой может его использовать При этом AV1 не стал бесплатным HEVC нет, они сделали его лучше.

Логика работы:

В отличии от первых двух ключевых изменений в AV1 тут сразу 2

Если прошлые 2 кодека имели квадратные макроблоки, хоть и могли динамически изменять в HEVC, то в AV1 помимо увеличения максимального размера блока до 128x128, поменялся и метод их нарезки. Они помимо квадратных теперь могут быть и прямоугольными.

Отличия HEVC от AV1

Можно статичное здание залить большими прямоугольниками, на движусееся небо сделать квадраты поменьше, а на человека на ФГ сделать много маленьких квадратов.

Это первая причина, а вторая в изменении метода анализа. Если прошлые кодеки пытались равномерно распределить битрейт по всей картинке, то в AV1 пришла психовизуальная модель

Эта модель анализирует видео и самостоятельно определяет куда бы посмотрел человеческий глаз и на основе этого решает в какую область дать больший битрейт, а где им можно пренебречь. То есть если взять видео где человек говорит на фоне сплошной стены то на стену пойдёт меньше битрейта, так как зачем? Она сплошная, не двигается. Лучше отдать имеющийся ресурс на лицо спикера.

Плюсы: опенсорс, выше размер макроблоков, возможность произвольного изменения размера макроблока (ось X отличная от оси Y)
Минусы: работает не везде, потребляет прилично ресурсов и как недавно оказалось сыпется в тёмных участках.

Тёмные зоны - смерть AV1 на низком битрейте

Недавно Андрей Сексичика выпустил "самый дешёвый клип". Видео где было много тёмных участков. Такой была задумка для создания атмосферы. И сам Андрюха прекрасно покрасил видос и он должен был стать мега-кайфовым. Однако из-за того что ютуб использует низкий битрейт при кодировании AV1 та самая психовизуальная модель отдала больше битрейта на самого Андрюху, при этом все тёмные участки - важную для атмосферы, но неважную для кодека он обделил битрейтом. Такой исход получается потому что AV1 пытается выжать максимум из того маленького битрейта что у неё есть вырезая естественный шум в тёмных участках, потому что его просчитывать долго и сложно. Такой механизм называется синтезом пленочного зерна. Итог: видос сыпется при воспроизведении AV1, но прекрасно показывается в VP9 сохраняя всю ту задумку что придумал автор. Имейте это ввиду при создании видеороликов.

Intraframe кодеки: почему мы создаём прокси в prores proxy, как два прореса могут весить по разному и причём тут альфа канал

Вы уже знаете что прорес - главный представитель Intraframe хранения кадров. Но ведь у него тоже есть куча направлений. Мы не будем распинаться о каждой версии. Они все довольно похожи, поэтому рассмотрим лишь основные: 422 (и его подвиды LT и HQ), 4444 (плюс подвид XQ) и Proxy

Prores 422 - хорошая база

Вариант с цветовой субдискретизацией 4:2:2. Предназначен для хорошего баланса качества и размера, но при этом не очень хорошо подходит для цветокоррекции, на 4 пикселя яркости сохраняется 2 пикселя цвета, что даёт меньше возможностей для покраса

LT версия является более оптимизированной версией стандартного 422-го. Оптимизировали механизмы, не меняя основной сути. По итогу за счёт совсем маленького ухудшения качества ниже по размеру на 30% в сравнении

HQ версия является также вариантом с цветовой субдискретизацией 4:2:2 но в отличие от базового прореса имеет повышенную чёткость изображения

Prores 4444 - большой размер для больших дел

При использовании Prores 4444 получается невероятно большой размер. Это достигается благодаря тому что Prores 4444 хранит всю информацию о цвете, не обрезая, а также хранит помимо трёх цветов информацию о прозрачности (альфа канал). И поскольку сохраняются все цвета исходника при таком кодировании - это лучший вариант для цветокоррекции

XQ версия является самым лучшим вариантом Prores. Он сохраняет все преимущества 4444, но при этом имеет детализацию близкую к бесконечной. Но и занимает аномально много места.

Prores proxy - идеальное решение под монтаж

Эти прокси имеют довольно маленькую детализацию и как следствие маленький размер, но сохраняют преимущество intraframe кодирования, что делает их идеальным промежуточным вариантом для монтажа с высокой производительностью

Итоги

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

Бонус: таблица кодеков с вариантами использования

Чтобы не перечитывать всю статью целиком в поисках своего варианта я подготовил маленькую, но понятную таблицу. Можете использовать её для быстрого подбора кодека под себя если вдруг что-то подзабудете.

Сохраняй к себе и используй когда нужно