Содержание статьи +
- TL;DR
- Зачем это нужно знать
- Что значит «intra» и зачем оно нужно
- Пять стадий по порядку
- Числовой пример: один блок 4×4
- Внутри зоопарка предсказаний
- Частая ошибка: считать, что больше режимов – всегда лучше
- Где intra-кадры находятся в видеопотоке
- Числовой пример: насколько I-кадр больше?
- Как intra coding формирует остальной кодек
- Где здесь Фора Софт
- Ключевые выводы
- Что почитать дальше
TL;DR
Внутрикадровое кодирование (intra-frame coding) – это часть видеокодека, сжимающая один кадр, используя только пиксели внутри него, без привязки к предыдущим или последующим кадрам. Все кодеки – от MPEG-2 до AV2 – используют единый пятиступенчатый алгоритм: кадр разбивается на блоки, каждый блок прогнозируется на основе уже закодированных соседей, из исходного значения вычитается прогноз – получается остаток (residual), который затем преобразуется в частотные коэффициенты, квантуется и подвергается энтропийному кодированию. Сам алгоритм остаётся неизменным из поколения в поколение – меняются лишь количество режимов предсказания (от 9 в H.264 до около 95 в AV1 и набора data-driven режимов в AV2) и эффективность кодирования остатка. Понимая внутрикадровое кодирование, вы понимаете JPEG, каждый ключевой кадр в любом видеопотоке, который вы когда-либо смотрели, и любой all-intra мастер-кодек, используемый в постпродакшене.
Зачем это нужно знать
Внутрикадровое кодирование – основа любого adaptive-bitrate-стрима, любого видеофайла и любого all-intra workflow, от которого вы зависите. Интервал ключевых кадров в OBS или в транскодере CDN, размер сегментов HLS и DASH, стоимость мастеринга 4K HDR в ProRes, скорость перемотки видео на YouTube – всё это напрямую зависит от параметров intra-кодирования. Продакт-менеджеры, которые без перевода в голове понимают термины вроде «intra prediction modes», «angular modes» или «all-intra profile», принимают более взвешенные решения по балансу стоимости, задержки и качества. Эту ментальную модель можно освоить за полчаса – и она сэкономит годы запутанных обсуждений с инженерами.
Что значит «intra» и зачем оно нужно
Слово intra – латинское «внутри». Внутрикадровое кодирование сжимает видеокадр, используя только информацию внутри этого же кадра. Противоположность – межкадровое кодирование (inter-frame), при котором кадр сжимается с опорой на другие кадры. Каждый видеопоток использует оба метода, но intra-кадры – их обычно называют I-кадрами или keyframes – являются якорями потока. Они декодируются независимо. Inter-кадры – нет.
I-кадры нужны по четырём причинам, ни одна из которых не связана с эффективностью сжатия.
Во-первых, воспроизведение должно с чего-то начаться. Когда вы открываете видео, плееру нужен хотя бы один полностью декодируемый кадр, чтобы было от чего предсказывать следующие. Этот первый кадр обязан быть intra-кодированным.
Во-вторых, адаптивная стриминговая передача зависит от точек переключения. В HLS и DASH плеер переключается между уровнями битрейта на границах сегментов – обычно каждые 2–6 секунд. Каждый сегмент должен начинаться с I-кадра, поскольку он должен декодироваться независимо от предыдущих кадров.
В-третьих, восстановление после ошибок требует «сброса». Если сетевой пакет потерян или повреждён в live-стриме, все последующие inter-кадры становятся неверными до появления следующего intra-кадра. Без периодических I-кадров глитч продолжается бесконечно.
В-четвёртых, редакторам нужны точные склейки по кадрам. Обрезка видео по inter-кодированному кадру означает перекодирование всего фрагмента от предыдущего I-кадра. Production-кодеки – Apple ProRes, Avid DNx (ранее DNxHD/ DNxHR), Sony XAVC-I – кодируют каждый кадр как intra именно по этой причине. Любой кадр декодируется независимо; резать можно в любой точке.
Так что intra-кодирование – это не просто один инструмент внутри видеокодека. Это полноценный кодек для неподвижных изображений, встроенный в каждый видеокодек, и одновременно основа нескольких профессиональных форматов. JPEG, JPEG 2000 и HEIF используют ту же технологию, но без «видео»-обёртки.
Пять стадий по порядку
Внутрикадровое кодирование – это пять последовательных этапов, выполняемых без циклов и обратной связи. Читаем слева направо.
Стадия 1 – Разбиение на блоки (partitioning)
Энкодер получает один кадр – для видео 1080p это сетка 1920 × 1080 luma-сэмплов плюс две chroma-плоскости – и разбивает его на прямоугольные блоки. Размер блока не фиксирован: гладкие области, например синее небо, обрабатываются большими блоками, а детализированные участки, такие как ресницы, – малыми.
Конкретные размеры блоков зависят от кодека. JPEG использует фиксированные блоки 8×8. MPEG-2 работает с макроблоками 16×16. H.264 делит макроблок 16×16 на части вплоть до 4×4. H.265/HEVC применяет quad-tree-разбиение от 64×64 до 4×4. AV1 начинает с суперблока 128×128, который может дробиться до 4×4. H.266/VVC использует coding tree unit размером 128×128 с ещё более гибкими разбиениями, включая ternary и binary splits, вплоть до 4×4.
Зачем нужен переменный размер? Потому что следующая стадия – предсказание – работает лучше, когда каждый блок содержит одну вещь, а не три. Блок 4×4, попавший на ресницу, и блок 64×64, попавший на небо, оба получают точное предсказание. Один блок 16×16, лежащий поперёк обоих, даёт плохое предсказание. Переменное разбиение позволяет энкодеру локально выбирать, что лучше для изображения.
Стадия 2 – Предсказание на основе соседей
Это сердце intra-кодирования и стадия, которая больше всего изменилась между поколениями кодеков. Для каждого блока энкодер анализирует пиксели, находящиеся непосредственно сверху и слева – те, что уже были закодированы ранее в том же кадре, – и использует их, чтобы предсказать, как выглядит текущий блок.
Предсказание – это догадка. Догадка редко бывает идеальной, но обычно близка к реальности, потому что соседние пиксели в настоящей фотографии сильно коррелируют между собой. Если сверху расположен ряд пикселей, изображающих верхнюю часть деревянной двери, то с большой вероятностью и сам блок тоже является частью этой двери.
У энкодера много способов предсказывать – много режимов – и он перебирает все. Самые простые:
- DC mode: заполнить блок средним значением пикселей по верхней и левой границам. Полезен на ровных поверхностях.
- Planar mode: построить гладкую плоскость через граничные пиксели. Полезен для мягких градиентов – например, неба или щеки при мягком освещении.
- Angular modes (направленные): скопировать линию пикселей с верхней или левой границы вдоль заданного направления. Полезны для обработки рёбер и текстур с чёткой ориентацией.
Представьте фото с наклонной крышей. Крыша идёт из нижнего левого угла в верхний правый под углом, скажем, 30 градусов. Режим Angular на 30 градусов берёт пиксели с верхней левой границы блока и сдвигает их вниз вдоль этой линии. Получается почти идеальное предсказание формы крыши внутри блока.
Число доступных режимов увеличивалось с каждым поколением. Прогресс рассказывает свою историю:
| Кодек | Год | Intra-режимы (luma) |
|---|---|---|
| JPEG | 1992 | нет (DC predictor только на DC-коэффициенте) |
| MPEG-2 | 1994 | только DC |
| H.264 / AVC | 2003 | 9 (DC + Planar + 7 angular для блоков 4×4) |
| H.265 / HEVC | 2013 | 35 (DC + Planar + 33 angular) |
| VP9 | 2013 | 10 (DC + TM/Paeth-like + 8 angular) |
| AV1 | 2018 | ~95 (8 номинальных углов × 6 дельт + DC + Smooth-V/H/Bi + Paeth + recursive + CfL для chroma + palette + intra block copy) |
| H.266 / VVC | 2020 | 67 (DC + Planar + 65 angular) + MIP + MRL + ISP + CCLM + PDPC |
| AV2 (AVM, разрабатывается) | 2025 | весь набор AV1 + data-driven обученные режимы + улучшенный CfL + multi-reference line |
Источники для таблицы: спецификации ITU-T H.264, H.265, H.266; спецификация AOMedia AV1 и Tool Description; черновики AV2 AVM (2025).
Читатель, знакомый со статьёй об архитектуре кодека, поймёт: intra prediction – это этап predict гибридного кодека, использующий ссылки только внутри текущего кадра. Inter-coding – аналогичный этап, но с ссылками на предыдущие кадры.
Стадия 3 – Residual: вычесть прогноз
После того как энкодер выбрал лучший режим предсказания для блока, он вычитает предсказанный блок из оригинального – по сэмплам. Полученный результат – блок разностей, остаток (residual).
Если прогноз идеален – как, например, для плоского неба, предсказанного в DC-режиме, что встречается довольно часто, – остаток представляет собой блок нулей. Если прогноз хорош, но не идеален, остаток содержит небольшие значения около нуля с редкими большими отклонениями там, где прогноз оказался неточным. Остаток всегда обладает меньшей энергией, чем оригинал, поскольку энкодер выбирает наилучший режим из доступных.
Зачем уменьшать энергию? Потому что на каждой следующей стадии сжатие маленьких чисел происходит эффективнее, чем больших. Квантование округлит маленькие числа до нуля. Энтропийный кодер выдаст короткие коды для частых значений – а сейчас это в основном нули и небольшие целые числа. Весь пайплайн оптимизирован под остаток, прижатый к нулю.
Стадия 4 – Transform: пространство в частоту
Остаток подвергается математическому преобразованию, которое превращает блок пиксельных разностей в блок частотных коэффициентов. Наиболее распространённым является целочисленная аппроксимация discrete cosine transform, сокращённо DCT.
Интуиция: гладкий остаток – где соседние сэмплы похожи – описывается очень небольшим числом низкочастотных коэффициентов. Детальный остаток требует больше коэффициентов на высоких частотах. DCT не выбрасывает информацию – он перераспределяет её так, чтобы энергия концентрировалась в левом верхнем углу блока коэффициентов (низкие частоты), а правый нижний угол (высокие частоты) обычно оказывался близким к нулю.
Само по себе преобразование не сжимает – оно переупорядочивает. Если известны все коэффициенты точно, остаток можно восстановить без потерь.
Современные кодеки включают несколько вариантов преобразования, потому что ни один из них не подходит для всех блоков. AV1 выбирает между DCT, ADST (асимметричное дискретное синус-преобразование), flipped ADST и identity transform для каждого блока. У VVC есть multiple transform selection (MTS) и low-frequency non-separable transform (LFNST) для дополнительного сжатия. AV2 снова расширяет этот набор. Энкодер перебирает все варианты и выбирает тот, который даёт минимальный битрейт.
Стадия 5 – квантизация, затем энтропийное кодирование
Здесь кодек действительно теряет информацию. Каждый коэффициент преобразования делится на шаг и округляется до ближайшего целого числа. Коэффициент 137 при делении на шаг 8 становится 17. Декодер умножит 17 обратно на 8 и восстановит 136 вместо 137. Ошибка, которую вы только что внесли, постоянна и является источником каждого видимого артефакта сжатия в мире.
Шаг управляется quantization parameter, или QP. Низкий QP означает малый шаг, высокое качество и много бит. Высокий QP – большой шаг, низкое качество и мало бит. После квантования большинство коэффициентов становятся нулями, а немногие ненулевые – маленькими целыми числами: именно такая форма лучше всего сжимается энтропийным кодированием.
Энтропийное кодирование – последний этап безпотерьного сжатия. Оно присваивает короткие битовые строки частым значениям (например, 0, ±1) и длинные – редким. H.264 внедрил Context-Adaptive Binary Arithmetic Coding (CABAC), который сжимает данные примерно на 14% эффективнее, чем аналогичный кодер на основе Хаффмана, который он заменил. AV1 и AV2 используют арифметическое кодирование для нескольких символов. На выходе этой стадии получаются байты, которые записываются в файл или отправляются в сетевой пакет.
Это intra-кодирование от начала до конца. Пять стадий, без обратных связей, без зависимостей от будущих кадров, без оценки движения. JPEG реализует стадии 1, 4 и 5. Современные видеокодеки добавляют стадии 2 и 3. Всё остальное – inter-прогнозирование, структура GOP, управление битрейтом – работает поверх.
Числовой пример: один блок 4×4
Возьмём один luma-блок 4×4 из угла слегка текстурированной стены. Исходные значения сэмплов (после вычитания 128 для центрирования относительно нуля):
24 22 20 18
26 24 22 20
28 26 24 22
30 28 26 24Значения растут из правого верхнего угла к левому нижнему – плавный градиент. Классический паттерн для Angular – идеален для режима intra в Angular.
Шаг 1 – Predict. Энкодер выбирает angular mode, указывающий вдоль направления градиента (45 градусов, копирование из левого верхнего угла). Предсказанный блок:
24 22 20 18
26 24 22 20
28 26 24 22
30 28 26 24В этом искусственном примере прогноз идеален, потому что блок построен на основе идеального градиента. Энкодер передаёт сигнал «mode = angular at 45 degrees» – это требует 4–6 бит избыточности.
Шаг 2 – Residual. Оригинал минус прогноз:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0Все нули. Сумма квадратов остатков: 0.
Шаг 3 – Transform. DCT нулевого блока даёт нулевой блок коэффициентов: на входе ноль – на выходе ноль.
Шаг 4 – Quantize. Ноль, делённый на любой шаг, – ноль. Ненулевых квантованных коэффициентов нет.
Шаг 5 – Entropy code. Энкодер записывает значение «mode = 45-градусный угловой» и сигнал «end of block», что означает отсутствие ненулевых коэффициентов далее. Итоговая стоимость блока – около 6 бит.
Это полное сжатие одного блока 4×4 – 16 сэмплов × 8 бит = 128 бит – до 6 бит. Степень сжатия составляет 21×. Сжатие достигается за счёт предсказания. Настоящие фотографии более беспорядочны, и остаток редко бывает нулевым, но принцип остаётся тем же: основная часть выигрыша в intra-кодировании приходит от предсказания, а не от преобразования.
Теперь представим, что блок – это более шумный участок стены, где прогноз ошибается на ±2 пикселя. Тогда в остатке остались бы ненулевые значения около ±2. После преобразования DCT энергия распределилась бы по нескольким низкочастотным коэффициентам. При квантовании с QP = 20 (шаг ≈ 10) большинство коэффициентов округлилось бы до нуля, и выжили бы один–два коэффициента со значением ±1. Такой блок занял бы 25–40 бит – всё ещё значительное сжатие при небольшой ошибке реконструкции из-за квантования.
Внутри зоопарка предсказаний
Самая активная зона инноваций в intra-кодировании – стадия предсказания. Ниже – краткий обзор основных инструментов, по одной-двум фразам на каждый. Запоминать не обязательно, но если в даташите кодека встретится один из них, вы узнаете его «семью».
DC mode – заполнить блок средним значением граничных сэмплов. Самый старый режим; присутствует в каждом кодеке.
Planar mode – построить гладкую плоскость через граничные сэмплы. Отлично подходит для мягких градиентов, например, при освещении лица светом из окна.
Angular modes – копирование граничных сэмплов вдоль определённого направления. У H.264 – 8 углов, у HEVC – 33, у VVC – 65, у AV1 – 56 (8 номинальных × 7 дельт).
Paeth predictor – для каждого предсказываемого пикселя выбирается один из трёх референсных сэмплов (сверху, слева, сверху-слева), наиболее близкий к линейной экстраполяции. Изначально использован в PNG, позже принят в VP9 и AV1.
Smooth modes – AV1 включает режимы Smooth, Smooth-Horizontal и Smooth-Vertical, которые интерполируют данные из углов и краёв. Отлично подходят для мягких градиентов.
Recursive intra prediction – AV1 разбивает блок на подблоки 2×2 и предсказывает каждый из них с помощью небольшого фильтра на основе предыдущего. Полезно на шумных текстурах.
Cross-Component Linear Model (CCLM) – в стандарте VVC chroma-блок предсказывается как линейная функция реконструированного luma-блока, находящегося в той же позиции. Параметры модели вычисляются на основе соседних граничных сэмплов. Такой подход позволяет сэкономить около 14% битрейта на кодирование chroma-компоненты в режиме all-intra.
Chroma from luma (CfL) – аналог CCLM в AV1. Использует субдискретизированный luma для предсказания chroma.
Matrix-based intra prediction (MIP) – VVC включает набор небольших матриц предсказания, обученных на тренировочных данных. Энкодер выбирает наиболее подходящую матрицу и применяет её к граничным сэмплам. Такой подход эффективен для паттернов, которые не соответствуют ни одному из правилых режимов.
Multiple reference line (MRL) – VVC и AV2 позволяют использовать для предсказания reference line, находящиеся на расстоянии 2 или 3 сэмплов от границы блока, а не только непосредственных соседей. Это полезно, когда непосредственные соседи искажены шумом квантования.
Intra subpartition (ISP) – VVC делит кодировочный блок на вертикальные или горизонтальные полосы и предсказывает каждую на основе предыдущей. Полезен для мелких деталей.
Position-Dependent Prediction Combination (PDPC) – в VVC angular-прогноз комбинируется с граничными сэмплами с позиционно-зависимым весом, что обеспечивает сглаживание перехода на границе блока.
Palette mode – H.265 SCC, AV1 и AV2 используют небольшую цветовую палитру и индекс для каждого сэмпла. Такой подход эффективен для screen content: текста, UI-мокапов, игровых стримов – там, где в одном блоке встречается лишь несколько различных цветов.
Intra block copy (IBC) – H.265 SCC и AV1 позволяют блоку в текущем кадре быть предсказанным на основе другого уже закодированного блока в том же кадре с использованием смещения. Это похоже на motion compensation, но происходит внутри одного кадра. Полезно для screen content с повторяющимися элементами.
Data-Driven / Learned Modes (AV2) – AV2 вводит intra-режимы, параметры которых обучены на корпусе тренировочных изображений. Энкодер выбирает для каждого блока между rule-based и learned режимами.
Частая ошибка: считать, что больше режимов – всегда лучше
Естественное прочтение таблицы выше: AV1 должен быть примерно в десять раз лучше H.264 в intra-кодировании, потому что у него в десять раз больше режимов. Это не так. Две вещи нарушают линейную интуицию.
Во-первых, сигнализация режима стоит бит. Каждый дополнительный режим, который энкодер может выбрать, добавляет бит overhead к блоку, потому что битстрим должен сообщить, какой режим выиграл. Следующее поколение кодека выигрывает на блоке только тогда, когда лучшее предсказание экономит больше бит, чем стоит дополнительная сигнализация. На практике выигрыш на один добавленный режим подчиняется убывающей отдаче.
Во-вторых, время работы энкодера растёт с количеством режимов. Энкодеру необходимо перебрать каждый режим (или использовать умную эвристику, чтобы пропустить большинство) и оценить его. Полный intra-поиск в AV1 примерно в 8 раз медленнее, чем в HEVC, который, в свою очередь, примерно в 4 раза медленнее H.264. Промышленные энкодеры используют пресеты – veryfast, medium, slow, veryslow – которые определяют, сколько режимов разрешено проверять.
Заголовочные цифры – VVC экономит около 35 % по сравнению с AV1 при intra-кодировании ценой примерно в 8 раз большего времени кодирования по данным бенчмарков 2026 года – говорят: «зоопарк» методов предсказания действительно помогает, но платить за это приходится на стороне энкодера. Декодер остаётся проще, и именно это важно для доставки.
Где intra-кадры находятся в видеопотоке
В потоке, содержащем оба типа кадров, intra-кадры периодически размещаются в качестве якорей. Расстояние между ними называют длиной GOP (group of pictures) или интервалом ключевых кадров.
Три силы растягивают интервал в противоположные стороны.
Во-первых, эффективность сжатия любит длинные GOP. Intra-кадры большие – обычно в 4–10 раз больше inter-кадров при том же качестве – потому что не могут переиспользовать содержимое прошлых кадров. Чем длиннее GOP, тем меньше средний размер кадра, тем ниже битрейт. Netflix оптимизировал свои VOD-энкодинги, увеличив random-access picture period с 2 секунд до 15, сэкономив около 20% размера файла при том же VMAF.
Во-вторых, адаптивная потоковая передача навязывает жёсткие временные интервалы. Плееры HLS и DASH переключают битрейт на границах сегментов. Каждый сегмент должен начинаться с intra-кадра. Обычно длина сегмента составляет 2–6 секунд. Если сегмент длится 2 секунды, а частота кадров – 30 fps, intra-кадр требуется каждые 60 кадров – и это обязательно. Стандартные 2-секундные сегменты Bitmovin фиксируют интервал ключевых кадров в 2 секунды.
В-третьих, для live- и low-latency стриминга важны короткие GOP. Новый зритель, подключившийся к прямому эфиру, должен ждать следующего keyframe перед началом воспроизведения. Интервал между keyframe в 15 секунд даёт задержку запуска до 15 секунд. Low-латентные HLS и стримы в стиле WebRTC используют интервалы 1 секунду или меньше.
Производственные кодеки обходят эти ограничения. ProRes, DNx и Sony XAVC-I кодируют каждый кадр как intra. Длина GOP составляет 1. Файлы получаются значительно больше, но каждый кадр – независимый ключевой кадр, и именно это имеет значение для редактора.
Числовой пример: насколько I-кадр больше?
Возьмём видео 1080p30, закодированное с помощью x264 при CRF 23 (типичная цель по качеству). Типичные размеры кадров для киноподобного материала:
- I-кадр (intra-кадр): ~120 килобит (≈ 15 КБ).
- P-кадр (предсказанный на основе предыдущих кадров): ~25 килобит (≈ 3 КБ).
- B-кадр (предсказанный на основе предыдущих и последующих кадров): ~10 килобит (≈ 1,25 КБ).
2-секундный GOP при 30 кадрах в секунду содержит 60 кадров: обычно один I-кадр, за которым следует смесь P- и B-кадров. Общий размер GOP в битах:
1 × 120 + 25 × 25 + 34 × 10 = 120 + 625 + 340 = 1 085 килобит за 2 секундыЭто примерно 542 килобита в секунду. Сам I-кадр занимает 120 / 1085 ≈ 11% битов, составляя лишь 1 / 60 ≈ 1,7% от всех кадров. Уменьшение интервала между ключевыми кадрами до 1 секунды удваивает их долю в битрейте – до примерно 20% – и это плата за более частые точки случайного доступа для плеера.
Теперь та же выкладка для all-intra кодека Avid DNx HQ при том же разрешении и частоте кадров. DNx HQ на 1080p30 даёт около 145 мегабит в секунду – примерно в 270 раз больше, чем H.264-стрим. Это цена за независимость каждого кадра.
Как intra coding формирует остальной кодек
Intra-кодирование – это не просто механика ключевых кадров. Оно также применяется к intra-кодированным блокам внутри inter-кадров. Когда inter-энкодер не находит подходящего соответствия в буфере ссылок – из-за смены сцены, окклюзии или появления совершенно нового содержимого – он переходит к intra-кодированию для данного блока. P-кадр, содержащий много intra-блоков, называют «P-кадр с высокой intra-стоимостью»: он требует больше бит, чем средний P-кадр, но всё же меньше, чем полноценный I-кадр.
Вот почему важна scene-резка. Хороший энкодер распознаёт смену сцены и принудительно вставляет I-кадр в этой точке, даже если это нарушает регулярный ритм GOP. Иначе первый P-кадр после склейки оказался бы почти полностью закодирован intra-методом (из-за отсутствия хорошего соответствия движения при смене сцены) и был бы почти таким же объёмным, как I-кадр, но без точки случайного доступа для плеера.
Вот почему screen content имеет особое значение. Блок сплошного цвета или чёткие глифы шрифта обладают совершенно иным статистическим профилем, чем пиксели с камер. Intra-инструменты, эффективные на камерном контенте – angular modes, planar, DCT, – не работают так же хорошо на screen content. Palette mode и intra block copy были добавлены специально для задач вроде desktop sharing, удалённой работы и облачного гейминга.
Где здесь Фора Софт
Мы выпускаем видеоинфраструктуру, чья работа зависит от intra-решений. В WebRTC-конференциях интервал ключевых кадров (keyframe interval) определяет, как быстро восстанавливается соединение после потери пакетов – мы подбираем его под конкретные задачи клиентов в телемедицине и e-learning. В OTT- и интернет-ТВ-стеках мы выравниваем ключевые кадры по границам сегментов HLS и DASH, чтобы переключение битрейта работало без задержек. В системах видеонаблюдения мы балансируем между длинными GOP для экономии места на хранении и частыми ключевыми кадрами, чтобы обеспечить быстрый поиск по записи. В AR/VR и 360°-стриминге мы используем паттерны низколатентного обновления внутренних кадров – такие как «gradual decoder refresh» или intra-блоковые keyframes – вместо традиционных I-кадров. Мы не создаём новые кодеки – используем H.264, H.265, AV1 и профили WebRTC – но за 250+ проектов с 2005 года научились настраивать их под реальные задачи.
Ключевые выводы
- Intra-кодирование сжимает один кадр, используя только пиксели внутри него, не обращаясь к другим кадрам.
- Пайплайн состоит из пяти стадий: разбиение (partition), предсказание по соседним пикселям, вычисление остаточной ошибки (residual), преобразование и квантование с энтропийным кодированием (quantize-and-entropy-code).
- Поколения кодеков увеличивали палитру режимов предсказания – от 9 (в H.264) до примерно 95 (в AV1) и переходили к data-driven режимам (в AV2).
- Keyframes – это точки случайного доступа в каждом потоке; их частота влияет на битрейт, выравнивание сегментов и задержку запуска (startup latency).
- Кодеки для all-intra производства (ProRes, Avid DNx, XAVC-I) кодируют каждый кадр как ключевой, чтобы обеспечить точное кадрное редактирование.
- Увеличение количества режимов предсказания не даёт пропорционального роста степени сжатия – это эффект убывающей отдачи, достигаемый ценой роста времени кодирования.
Что почитать дальше
- Архитектура гибридного видеокодека – полная блок-схема энкодера, включающая intra-кодирование.
- Inter-кадровое кодирование и оценка движения – вторая часть процесса преобразования видеокадра в битовый поток.
- GOP-структура: I, P, B-кадры, open vs closed GOP – как intra- и inter-кадры организованы во времени.