Содержание статьи +
- TL;DR
- Зачем это нужно
- Почему один кадр похож на следующий
- Как кодек реально использует это сходство
- I, P и B-кадры – главные действующие лица
- Куда уходят биты на типичных I, P и B-кадрах
- Как каждое поколение кодеков улучшало временное предсказание
- Частая ошибка: укорачивание GOP ради live-стриминга
- Где здесь Фора Софт
- Ключевые выводы
- Что читать дальше
- Источники
TL;DR
Большинство пикселей в видео не изменяются от кадра к кадру, и современные кодеки используют этот факт для достижения основной степени сжатия. Технически сходство между соседними кадрами называют временной избыточностью (temporal redundancy), и кодек устраняет её, предсказывая каждый новый кадр на основе уже закодированных и передавая лишь небольшую остаточную разницу. По сравнению с кодированием каждого кадра отдельно такая inter-frame prediction позволяет снизить битрейт ещё в три раза – а зачастую и больше. Именно поэтому двухчасовой фильм помещается на флешку, а не требует жёсткого диска. В статье мы разберём, как измеряется временная избыточность, как motion estimation находит совпадающий блок в предыдущем кадре, что такое I/P/B-кадры и GOP, а также как каждое поколение кодеков – от H.264 до AV1 и VVC – совершенствовало свой инструментарий.
Зачем это нужно
Каждое продуктовое решение в области видео – выбор кодека, интервал ключевых кадров, пресет энкодера, ширина битрейт-лестницы, выбор CDN, дизайн low-latency-плеера – опирается на один физический факт: большая часть информации в видео содержится в изменениях между кадрами, а не в самих кадрах. Если вы понимаете временную избыточность, вы сможете читать тикет от инженера и видеть, где именно возникают затраты – в motion estimation, в расстановке ключевых кадров или где-то ещё. Вы сможете аргументированно обсуждать, стоит ли использовать 7 reference frames в AV1 с точки зрения нагрузки на CPU, и объяснить, почему битрейт камеры на парковке почти падает до нуля, когда машина уезжает – не общими словами, а на языке конкретных технических причин. Эта статья – для фаундера, продакта, маркетинга или операционного менеджера без технической экспертизы: в конце вы сможете объяснить коллеге, почему «говорящая голова» стоит дешевле, чем трансляция футбольного матча, и куда именно уходят биты.
Почему один кадр похож на следующий
Ещё до запуска кодека любое видео содержит повторы, заметные невооружённым глазом. Поставьте на паузу любую спокойную сцену и перейдите на один кадр вперёд. Стена за актёром – та же. Лампа – та же. Стул – тот же. Даже лицо актёра в основном не изменилось: один глаз моргнул, губы сдвинулись на несколько пикселей, всё остальное – идентично пиксель в пиксель. Кодек, который запишет оба кадра целиком, сохранит стену, лампу, стул и 99% лица дважды. Именно эту избыточность кодек и устраняет.
Технический термин для сходства между соседними кадрами – временная избыточность (temporal redundancy), а операция, устраняющая её, называется inter-frame compression или временное сжатие. «Inter» с латыни означает «между» – теперь кодек анализирует кадры между собой, а не только внутри одного. Противоположная операция – устранение повторений внутри одного кадра – называется intra-frame compression или пространственное сжатие. Подробно о ней рассказано в отдельной статье: пространственная избыточность пикселей. Современные кодеки используют обе эти техники, и они дополняют друг друга: пространственное сжатие уменьшает размер одного кадра до минимально возможного; затем временное сжатие замечает, что большая часть этого кадра вообще не нужна, потому что она уже была передана в предыдущем кадре.
Полезная аналогия. Представьте, что каждый день вы отправляете другу фотографию своей книжной полки. В первый день – полную. На второй вместо нового снимка присылаете записку: «всё как вчера, только красная книга опустилась на две полки вниз». На третий – ещё одну записку. Стоимость передачи второго и третьего дней вместе – крошечная доля от первого. Так работает inter-frame compression. Полная фотография – это ключевой кадр (keyframe); записки – это предсказанные кадры.
Сколько это даёт? В типичном видео примерно 90% кадров не являются ключевыми в конфигурации H.264 или HEVC по умолчанию – они предсказаны на основе соседних кадров. 1 Motion-compensated inter-frame coding позволяет снизить битрейт примерно в 3 раза и более по сравнению с чистым пространственным сжатием. 2 На статичной картинке с камеры наблюдения экономия может достигать 20 раз и более, поскольку предсказанные кадры практически не содержат данных. Именно этот один приём объясняет, почему фильм помещается на одном Blu-ray, а не на двадцати дисках.
Как кодек реально использует это сходство
Современный inter-кадровый энкодер устраняет временную избыточность в три этапа. Первый этап – разбиение на блоки, аналогичное intra-кодированию: кадр делится на небольшие квадраты, чтобы каждый из них можно было обработать отдельно. Второй этап – оценка движения: для каждого блока текущего кадра энкодер ищет в недавно декодированном опорном кадре наиболее похожий блок и записывает, где найдено совпадение (в виде вектора смещения), а также небольшую ошибку «пиксель к пикселю». Третий этап – трансформация и квантование этого остатка, операция, идентичная той, что применяется в конце пространственного кодирования.
Каждый этап подробно описан в отдельной статье – inter-frame coding и motion estimation, блочное предсказание (CTU/superblock), transform coding, квантование. Цель этой статьи – объяснить второй этап настолько понятно, чтобы вы понимали, что делает кодек каждый раз, когда прогресс-бар FFmpeg сдвигается на один шаг.
Этап 1 – Разбиение на блоки (как в Intra)
Каждый современный кодек разбивает кадр на сетку квадратных блоков ещё до начала обработки. H.264 называет их макроблоками (macroblocks) размером 16×16 пикселей (с возможностью дробления до 4×4 для более точной обработки). H.265 / HEVC ввёл Coding Tree Unit (CTU) размером до 64×64 пикселей. AV1 использует superblocks до 128×128, а H.266 / VVC сохраняет размер CTU 128×128. 3
Большие блоки эффективны, когда значительная часть кадра движется как единое целое – например, при панорамировании стадиона, когда вся толпа сдвигается влево на одинаковое расстояние. Меньшие блоки полезны на границах движущихся объектов, где одна половина блока может принадлежать идущему человеку, а другая – стене.
Этап 2 – Оценка движения (главный механизм)
Для каждого блока текущего кадра энкодер задаёт один вопрос: есть ли в предыдущем кадре блок, который выглядит почти так же? Если да, то описать координаты этого совпадения гораздо проще, чем передавать сам блок заново. Энкодер передаёт декодеру два небольших числа – на сколько сдвинуться по горизонтали и по вертикали – и небольшой остаток. Эти два числа вместе называются motion vector. Техника описания блока через ссылку на похожий блок в другом месте называется motion compensation.
Как энкодер находит совпадение? Он выполняет block search: помещает текущий блок в различные кандидатные позиции внутри reference-кадра и оценивает степень сходства каждого кандидата – обычно с помощью метрики Sum of Absolute Differences (SAD), то есть суммы модулей разностей пикселей двух блоков. 4 Побеждает позиция с минимальным значением SAD. Полный «exhaustive» перебор всех пикселей в пределах радиуса поиска для HD или 4K слишком медленный, поэтому реальные энкодеры применяют умные шаблоны поиска, проверяя лишь несколько десятков позиций на блок. Наиболее распространены три таких шаблона:
- Diamond search – начинаем с центра и проверяем четырёх соседей на расстоянии 1 пиксель (вверх, вниз, влево, вправо). Переходим к тому направлению, где результат лучше, и повторяем процесс. Останавливаемся, когда центр оказывается лучшим вариантом. Быстро и достаточно эффективно для медленно движущегося контента.
- Hexagonal search – та же логика, но шаблон включает шесть точек на расстоянии 2 пикселя. Используется по умолчанию в x264 и x265 на быстрых пресетах; в x264 диапазон поиска ограничен 4–16 пикселями. 5
- Uneven Multi-Hexagon (UMH) – многоэтапный шаблон с неравномерным охватом; используется по умолчанию в x265 на высоких пресетах с диапазонами поиска 16, 32 и 48 пикселей на трёх уровнях иерархической оценки движения. 6 Медленнее, чем hexagonal search, но находит более точные совпадения на HD-кадре при быстром движении.
Именно эти шаблоны – причина, по которой параметр preset оказывает такое сильное влияние. ultrafast почти полностью пропускает поиск; placebo проводит почти исчерпывающий поиск в широком радиусе. Тот же исходный материал при одинаковом битрейте на slow будет выглядеть заметно лучше, чем на ultrafast, потому что motion estimation проделал больше работы, нашёл правильное совпадение блоков, а не просто любое.
Маленькая деталь с большим эффектом: блок-совпадение не обязан попадать на целочисленную пиксельную сетку. Современные кодеки поддерживают motion vector с sub-pixel точностью – H.264 и HEVC до 1/4 пикселя по luma (яркостный канал) и 1/8 по chroma (цветовые каналы), AV1 – до 1/8 пикселя по luma. 7 Кодек интерполирует синтетическое «промежуточное» положение на основе reference-пикселей вокруг. Это важно: реальное движение в мире почти никогда не кратно целому пикселю – лицо, сместившееся на 1,3 пикселя влево, гораздо лучше описывается дробным вектором, чем ближайшим целым.
Этап 3 – Трансформация и квантование остатка (как при intra-кодировании)
То, что остаётся после предсказания «пиксель к пикселю», называется остатком (residual). Если предсказание оказалось точным – например, стена, плавная панорама или едва заметное движение лица – остаток в основном состоит из нулей. Если же предсказание оказалось неудачным – резкий новый объект, склейка сцен, брызги воды – остаток сохраняет большую часть энергии исходного блока. В любом случае кодек передаёт остаток по той же цепочке DCT и квантования, что и при intra-кодировании, описанной в статьях transform coding и квантование.
Квантование – единственный этап всего пайплайна, на котором информация действительно теряется. Всё, что происходит до него – разбиение на блоки, предсказание, преобразование – обратимо. Агрессивность квантования, управляемая параметром QP, и определяет, почему более высокий CRF даёт меньший файл: при этом больше коэффициентов остатка округляется до нуля.
I, P и B-кадры – главные действующие лица
Когда межкадровое предсказание уже задействовано, нужно решить для каждого кадра: кодировать его с нуля или использовать информацию из соседнего кадра? Современные кодеки используют три типа кадров, а их комбинация и составляет GOP-структуру (Group of Pictures).
- I-кадр (Intra-coded) – кодируется полностью независимо, используя только пространственное сжатие. Он требует много битов, но декодер может начать воспроизведение с любого I-кадра, не нуждаясь в предыдущих. Используется как ключевой кадр для перемотки и восстановления. Типичная доля в битрейтном бюджете: 30–50%, при этом I-кадры составляют 1–2% от общего числа кадров в длинном GOP. 8
- P-кадр (Predicted) – кодируется как набор векторов движения плюс остаточный сигнал, ссылаясь на один предыдущий I- или P-кадр. Типичная стоимость в битах: 10–25% от объёма I-кадра при одинаковом качестве. 9
- B-кадр (Bi-directional) – может ссылаться как на предыдущие, так и на будущие кадры. Типичная стоимость: 25–50% от объёма P-кадра при одинаковом качестве. B-кадры обеспечивают наивысшее сжатие, поскольку для предсказания используют два опорных кадра.
Короткий пример. Распространённая H.264-конфигурация для стриминга – IBBPBBPBBPBBPBB: один I-кадр, за которым следует повторяющийся узор из двух B-кадров между каждой парой P-кадров. Двенадцать из пятнадцати кадров – предсказанные; только первый содержит полное изображение. Если I-кадр весит 1,0 МБ, P-кадры – по 0,15 МБ каждый, а B-кадры – по 0,05 МБ, то весь GOP весит примерно 1,0 + 4×0,15 + 10×0,05 = 2,1 МБ. Тот же контент в режиме all-I весил бы 15 × 1,0 = 15 МБ. Коэффициент сжатия, достигнутый исключительно за счёт временного кодирования, составляет около 7×.
Это и есть число, которое стоит запомнить. Пространственное сжатие обычно уменьшает объём 1080p-видео с 600 Мбит/с исходных данных до примерно 30 Мбит/с в режиме all-I; затем временное сжатие доводит эти 30 Мбит/с до 5–8 Мбит/с при том же качестве. Именно временной слой обеспечивает около трёх четвертей всего сжатия, которое вы видите на экране.
Иерархические B-кадры – GOP становится деревом
Простой линейный узор выше оставляет деньги на столе. HEVC и все последующие кодеки используют иерархические B-кадры (или «B-пирамиду»), при которой некоторые B-кадры сами становятся опорными для других B-кадров. Зависимости образуют дерево, а не цепочку. В конфигурации Random Access HEVC применяет 5 временных слоёв в этой иерархии. 10 Выигрыш составляет примерно 15–20% по сравнению с плоским GOP при той же средней оценке качества, поскольку энкодер может выделять больше бит на B-кадры у корня (от которых зависит множество потомков) и меньше – на листовые кадры.
Чтобы B-пирамида работала, размер GOP должен быть степенью двойки – обычно 16 или 32. В результате энкодер вынужден переупорядочивать кадры: B-кадр, отображаемый на позиции 4, может зависеть как от I-кадра на позиции 0, так и от P-кадра на позиции 16, поэтому кадр 16 должен быть закодирован раньше кадра 4, хотя он отображается позже. Такая перестановка остаётся невидимой для плеера, но именно она является причиной того, что HEVC-энкодеры по умолчанию создают большую задержку, чем H.264.
Куда уходят биты на типичных I, P и B-кадрах
Распределение между intra-кодированием (внутри кадра) и inter-кодированием (между кадрами) зависит от контента. Приведённые ниже цифры типичны для сцены 1080p, 24 кадра в секунду, закодированной с помощью x265 при CRF 22 – это примерно тот уровень качества, на который ориентируются стриминговые сервисы:
| Источник экономии | Примерная доля сжатия |
|---|---|
| Пространственное предсказание (intra) внутри I-кадров | 25–35% |
| Motion compensation между кадрами (главный герой этой статьи) | 50–70% |
| Energy compaction трансформации + квантование | 10–20% |
| Энтропийное кодирование (CABAC, arithmetic) | 5–10% |
Доли меняются в зависимости от контента. Интервью с говорящей головой легче поддаётся временному кодированию – голова движется медленно, фон статичен – поэтому временная компрессия занимает около 80% бюджета. Футбольный матч сложнее – игроки бегут, камера панорамирует, толпа мерцает – поэтому доля временной компрессии падает до 50%, а intra-кодирование должно покрыть остальное. Машина per-title encoding у Netflix существует именно для того, чтобы измерять этот баланс и подстраивать энкодер-лестницу под сочетание пространственной и временной сложности каждого тайтла; опубликованный результат – около 20% экономии трафика в среднем, до 30% при per-scene tuning. 11
Как каждое поколение кодеков улучшало временное предсказание
Каждое поколение кодеков добавляло новые инструменты для обработки движения. Основные улучшения:
- H.264 / AVC (2003) – до 16 опорных кадров, точность субпиксельного движения 1/4 пикселя, размеры блоков движения от 16×16 до 4×4. 12
- H.265 / HEVC (2013) – те же 16 опорных кадров и та же точность 1/4 пикселя, но блоки движения достигают размера 64×64. Введены AMVP (Advanced Motion Vector Prediction) и Merge mode, позволяющие блоку наследовать вектор движения от соседнего без дополнительных бит затрат. Поддерживается иерархическая B-пирамида в конфигурации с опорными кадрами. 13
- AV1 (2018) – до 7 опорных кадров, точность субпиксельного движения 1/8 пикселя, суперблоки до 128×128. Добавлены OBMC (Overlapped Block Motion Compensation – смешивает предсказания соседних блоков для сглаживания границ), warped motion (аффинное преобразование на уровне блока – позволяет поворачивать и растягивать опорный блок, а не только сдвигать), global motion (одно аффинное преобразование на весь кадр – идеально подходит для панорам и зумов), а также расширенная compound prediction, комбинирующая предсказания из двух опорных кадров. 14
- H.266 / VVC (2020) – точность субпиксельного движения до 1/8 пикселя для яркости, CTU размером до 128×128 и аффинная модель движения с 4 или 6 параметрами и точностью на уровне подблоков, что позволяет описывать поворот, масштабирование и сдвиг, а не только перемещение. Добавлены SbTMVP (sub-block temporal motion vector prediction), BDOF (Bi-Directional Optical Flow) и DMVR (Decoder-side Motion Vector Refinement). 15
Каждый шаг по лестнице кодеков даёт примерно 30–50% более низкий битрейт при том же качестве, и значительная часть этого выигрыша достигается именно за счёт motion-слоя, а не за счёт преобразований или энтропийного кодирования. Панорамирование камеры по стадиону – классический пример, где инструмент глобального движения в AV1 себя полностью оправдывает: H.264 вынужден передавать тысячи почти одинаковых motion vectors для блоков, движущихся синхронно, тогда как AV1 передаёт одно аффинное преобразование на весь кадр.
Частая ошибка: укорачивание GOP ради live-стриминга
Самая дорогая ошибка, которую мы наблюдаем у команд на реальных проектах – слишком короткий GOP в попытке добиться low-latency-стриминга. Короткий GOP – например, один I-кадр в секунду – действительно помогает при присоединении, перемотке и восстановлении, но сильно увеличивает трафик: I-кадры продолжают приходить, и каждый из них – самый тяжёлый кадр в потоке. Стандартное значение для live-трансляций – один I-кадр на 2 секунды (-g 48 при 24 fps) – это разумный баланс. Сокращение этого интервала до одного кадра на полсекунды легко добавляет 20–35% к общему битрейту при неизменном качестве, а время присоединения после настройки CMAF или LL-HLS почти не улучшается. Правильный подход почти всегда – «оставьте GOP как есть, работайте над задержкой в сегментере и плеере», а не «укоротите GOP». Подробный разбор протокольной механики – в LL-HLS vs WebRTC vs CMAF-LL: low-latency.
Где здесь Фора Софт
Мы занимаемся видеопродуктами с 2005 года – видеоконференцсвязь, OTT, e-learning, видеонаблюдение, телемедицина, AR/VR – и настройка motion estimation – один из самых частых инструментов, к которому мы прибегаем, когда у клиента не укладывается битрейт или задержка. В проектах видеонаблюдения экономия за счёт временной избыточности огромна по умолчанию, ведь сцена остаётся статичной большую часть суток, и оптимальное решение – длинный GOP без B-кадров для быстрого случайного доступа. В прямом эфире e-learning GOP должен находиться рядом с сегментатором, чтобы motion estimation мог эффективно работать, не замедляя вход на лекцию. Мы не продаём лицензии кодеков и не поставляем железо – мы интегрируем кодеки в конечный продукт, где компромиссы становятся очевидными.
Ключевые выводы
- Большая часть информации в видео – в изменениях между кадрами, а не в самих кадрах.
- Inter-кадровое предсказание обеспечивает 50–70% сжатия в типичном стриминговом контенте; пространственное – остальное.
- Вектор движения указывает декодеру, где в опорном кадре искать совпадающий блок; оставшаяся ошибка – это residual.
- I-, P- и B-кадры жертвуют независимостью ради сжатия: I-кадры нужны для поиска по времени, а P/B-кадры в 5–20 раз дешевле.
- Каждое поколение кодеков добавляет новые инструменты – AMVP, Merge, OBMC, warped, global, affine – и каждый приносит несколько процентов выигрыша.
- Укорачивание GOP не решает проблему задержки: оно повышает битрейт и почти не помогает при подключении, если сегментеры настроены правильно.
Что читать дальше
- Пространственная избыточность пикселей: что внутри одного кадра
- GOP-структура: I, P, B-кадры, open vs closed GOP
- Inter-frame coding и motion estimation
Источники
- FastPix. "Understanding Video Inter-Frame Compression Techniques." Дата обращения 2026-05-16. https://www.fastpix.io/blog/understanding-video-inter-frame-compression
- ScienceDirect Topics. "Temporal Compression – Overview." Дата обращения 2026-05-16. https://www.sciencedirect.com/topics/computer-science/temporal-compression
- Wikipedia. "Inter frame." Дата обращения 2026-05-16. https://en.wikipedia.org/wiki/Inter_frame
- Lumenci. "How Video Codecs Work." Дата обращения 2026-05-16. https://lumenci.com/blogs/how-video-codecs-works/
- x264 encoder guide, FFmpeg.party. Дата обращения 2026-05-16. https://ffmpeg.party/guides/x264/
- x265 Documentation, "Command Line Options." Дата обращения 2026-05-16. https://x265.readthedocs.io/en/master/cli.html
- Chen, Y. et al. "A Technical Overview of AV1", arXiv:2008.06091. Дата обращения 2026-05-16. https://arxiv.org/abs/2008.06091
- arXiv 2406.16544. "Hierarchical B-frame Video Coding for Long Group of Pictures." Дата обращения 2026-05-16. https://arxiv.org/html/2406.16544v1
- Netflix Technology Blog. "Per-Title Encode Optimization." Дата обращения 2026-05-16. https://netflixtechblog.com/per-title-encode-optimization-7e99442b62a2
- ITU-T Recommendation H.264. https://www.itu.int/rec/T-REC-H.264
- HEVC Inter-Picture Prediction notes. https://harrycharan.gitlab.io/pdfs/2014_hevc_alg.pdf
- Chen, Y. et al. "An Overview of Core Coding Tools in the AV1 Video Codec." https://www.jmvalin.ca/papers/AV1_tools.pdf
- OTTVerse. "Affine Motion Compensated Prediction in VVC." https://ottverse.com/affine-motion-estimation-compensation-in-vvc/