Inter-кадр — это кадр в потоке сжатия видео , который выражается в терминах одного или нескольких соседних кадров. Часть «inter» термина относится к использованию Inter-кадрового предсказания . Этот вид предсказания пытается воспользоваться временной избыточностью между соседними кадрами, обеспечивая более высокие показатели сжатия.
Интеркодированный кадр делится на блоки, известные как макроблоки . После этого, вместо прямого кодирования необработанных значений пикселей для каждого блока, кодер попытается найти блок, похожий на тот, который он кодирует в ранее кодированном кадре, называемом опорным кадром . Этот процесс выполняется алгоритмом сопоставления блоков . Если кодеру удается выполнить поиск, блок может быть закодирован вектором, известным как вектор движения , который указывает на положение совпадающего блока в опорном кадре. Процесс определения вектора движения называется оценкой движения .
В большинстве случаев кодеру это удается, но найденный блок, скорее всего, не будет точно соответствовать блоку, который он кодирует. Вот почему кодер вычислит различия между ними. Эти остаточные значения известны как ошибка предсказания и должны быть преобразованы и отправлены декодеру.
Подводя итог, если кодеру удается найти соответствующий блок в опорном кадре, он получит вектор движения, указывающий на соответствующий блок, и ошибку предсказания. Используя оба элемента, декодер сможет восстановить необработанные пиксели блока. На следующем изображении весь процесс показан графически:
У такого рода прогнозов есть свои плюсы и минусы:
Из-за этих недостатков для того, чтобы этот метод был эффективным и полезным, необходимо использовать надежный и периодический по времени опорный кадр. Этот опорный кадр известен как Intra-frame , который строго интракодирован, поэтому его всегда можно декодировать без дополнительной информации.
В большинстве конструкций есть два типа интер-кадров: P-кадры и B-кадры. Эти два типа кадров и I-кадры (внутрикодированные изображения) обычно объединяются в GOP (группу изображений). I-кадру не нужна дополнительная информация для декодирования, и его можно использовать в качестве надежного эталона. Эта структура также позволяет достичь периодичности I-кадров, которая необходима для синхронизации декодера.
Разница между P-кадрами и B-кадрами заключается в системе отсчета, которую им разрешено использовать.
P-кадр — это термин, используемый для определения прогнозируемых изображений вперед. Прогнозирование выполняется на основе более раннего изображения, в основном I-кадра или P-кадра, поэтому требуется меньше данных кодирования (≈50% по сравнению с размером I-кадра).
Объем данных, необходимых для выполнения этого прогноза, состоит из векторов движения и коэффициентов преобразования, описывающих коррекцию прогноза. Он подразумевает использование компенсации движения .
B-кадр — это термин для двунаправленно предсказанных изображений. Этот метод предсказания занимает меньше данных кодирования, чем P-кадры в целом (≈25% по сравнению с размером I-кадра), поскольку предсказание делается либо из более раннего кадра, либо из более позднего кадра, либо из обоих. (B-кадры также могут быть менее эффективными, чем P-кадры в определенных случаях, [1] например: кодирование без потерь.)
Подобно P-кадрам, B-кадры выражаются как векторы движения и коэффициенты преобразования. Чтобы избежать растущей ошибки распространения, B-кадры не используются в качестве опоры для дальнейших предсказаний в большинстве стандартов кодирования. Однако в более новых методах кодирования (таких как H.264/MPEG-4 AVC и HEVC ) B-кадры могут использоваться в качестве опоры для лучшего использования временной избыточности. [2] [3]
Типичная структура группы изображений (GOP) — IBBPBBP... I-кадр используется для предсказания первого P-кадра, а эти два кадра также используются для предсказания первого и второго B-кадров. Второй P-кадр также предсказывается с использованием первого I-кадра. Оба P-кадра объединяются для предсказания третьего и четвертого B-кадров. Схема показана на следующем рисунке:
Эта структура предполагает проблему, поскольку четвертый кадр (P-кадр) необходим для предсказания второго и третьего (B-кадров). Поэтому нам нужно передать P-кадр перед B-кадрами, и это задержит передачу (необходимо будет сохранить P-кадр). Эта структура имеет сильные стороны:
Но у него есть слабые стороны:
Наиболее важными усовершенствованиями технологии H.264 по сравнению с предыдущими стандартами (особенно MPEG-2 ) являются:
Разделение блока яркости 16×16 ( MPEG-2 ), 16×8, 8×16 и 8×8. Последний случай допускает разделение блока на новые блоки 4×8, 8×4 или 4×4.
Кадр, который нужно кодировать, делится на блоки одинакового размера, как показано на рисунке выше. Каждое предсказание блока будет представлять собой блоки того же размера, что и опорные изображения, смещенные на небольшое смещение.
Пиксели в положении полупикселя получаются путем применения фильтра длиной 6.
H=[1 -5 20 20 -5 1], т.е.полупиксель "b"=A - 5B + 20C + 20D - 5E + F
Пиксели в четвертьпиксельной позиции получаются путем билинейной интерполяции .
В то время как MPEG-2 допускал разрешение в ½ пикселя, Inter frame допускает разрешение до ¼ пикселя. Это означает, что можно искать блок в кадре для кодирования в других опорных кадрах, или мы можем интерполировать несуществующие пиксели, чтобы найти блоки, которые еще лучше подходят для текущего блока. Если вектор движения представляет собой целое число единиц выборок, это означает, что можно найти в опорных изображениях скомпенсированный блок в движении. Если вектор движения не является целым числом, прогноз будет получен из интерполированных пикселей с помощью фильтра интерполятора в горизонтальном и вертикальном направлениях.
Множественные ссылки на оценку движения позволяют найти лучшую ссылку в 2 возможных буферах (Список 0 для прошлых изображений, Список 1 для будущих изображений), которые содержат до 16 кадров в общей сложности. [4] [5] Прогнозирование блоков выполняется путем взвешенной суммы блоков из эталонного изображения. Это позволяет улучшить качество изображения в сценах, где есть изменения плоскости, масштабирования или когда обнаруживаются новые объекты.
Режимы Skip и Direct используются очень часто, особенно с B-кадрами. Они значительно сокращают количество кодируемых битов. Эти режимы используются, когда блок кодируется без отправки остаточной ошибки или векторов движения. Кодер запишет только то, что это макроблок Skip. Декодер выведет вектор движения закодированного блока Direct/Skip Mode из других уже декодированных блоков.
Есть два способа вывести движение:
На рисунке выше розовые блоки — это кодированные блоки Direct/Skip Mode. Как мы видим, они используются очень часто, в основном в B-кадрах.
Хотя использование термина «кадр» является общепринятым в неформальном использовании, во многих случаях (например, в международных стандартах видеокодирования MPEG и VCEG ) применяется более общая концепция с использованием слова «изображение» вместо «кадра», где изображение может быть либо полным кадром, либо одним чересстрочным полем.
Видеокодеки , такие как MPEG-2 , H.264 или Ogg Theora, уменьшают объем данных в потоке, следуя за ключевыми кадрами с одним или несколькими промежуточными кадрами. Эти кадры обычно можно кодировать с использованием более низкой скорости передачи данных , чем требуется для ключевых кадров, поскольку большая часть изображения обычно похожа, поэтому кодировать нужно только изменяющиеся части.