Межкадр — это кадр в потоке сжатия видео , который выражается через один или несколько соседних кадров. Часть термина «интер» относится к использованию межкадрового предсказания . Этот тип прогнозирования пытается воспользоваться временной избыточностью между соседними кадрами, обеспечивая более высокую степень сжатия.
Интеркодированный кадр делится на блоки, называемые макроблоками . После этого вместо непосредственного кодирования необработанных значений пикселей для каждого блока кодер попытается найти блок, аналогичный тому, который он кодирует, в ранее закодированном кадре, называемом опорным кадром . Этот процесс выполняется с помощью алгоритма сопоставления блоков . Если кодер преуспеет в поиске, блок может быть закодирован вектором, известным как вектор движения , который указывает на положение соответствующего блока в опорном кадре. Процесс определения вектора движения называется оценкой движения .
В большинстве случаев кодировщику это удастся, но найденный блок, скорее всего, не будет точно соответствовать блоку, который он кодирует. Вот почему кодер вычисляет разницу между ними. Эти остаточные значения известны как ошибка прогнозирования, и их необходимо преобразовать и отправить в декодер.
Подводя итог, если кодеру удастся найти совпадающий блок в опорном кадре, он получит вектор движения, указывающий на совпадающий блок, и ошибку прогнозирования. Используя оба элемента, декодер сможет восстановить необработанные пиксели блока. На следующем изображении графически показан весь процесс:
У такого прогноза есть свои плюсы и минусы:
Из-за этих недостатков необходимо использовать надежную и периодическую систему отсчета, чтобы этот метод был эффективным и полезным. Этот опорный кадр известен как внутрикадр , который строго внутрикодирован, поэтому его всегда можно декодировать без дополнительной информации.
В большинстве проектов существует два типа промежуточных кадров: 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 допускал разрешение ½ пикселя, Interframe допускает разрешение до ¼ пикселя. Это означает, что можно искать блок в кадре, который нужно закодировать в других опорных кадрах, или мы можем интерполировать несуществующие пиксели, чтобы найти блоки, которые еще лучше подходят для текущего блока. Если вектор движения представляет собой целое число единиц отсчетов, это означает, что на опорных изображениях можно найти компенсированный блок в движении. Если вектор движения не является целым числом, прогноз будет получен из интерполированных пикселей с помощью фильтра-интерполятора в горизонтальном и вертикальном направлениях.
Множественные ссылки на оценку движения позволяют найти лучший эталон в двух возможных буферах (Список 0 для прошлых изображений, Список 1 для будущих изображений), которые содержат в общей сложности до 16 кадров. [4] [5] Прогнозирование блоков выполняется на основе взвешенной суммы блоков из опорного изображения. Это позволяет улучшить качество изображения в сценах, где происходит изменение плоскости, масштаба или когда появляются новые объекты.
Режим пропуска и прямой режим используются очень часто, особенно с B-кадрами. Они значительно уменьшают количество кодируемых битов. К этим режимам относятся, когда блок кодируется без отправки остаточных ошибок или векторов движения. Кодер запишет только то, что это пропуск макроблока. Декодер выведет вектор движения кодированного блока в режиме прямого/пропуска из других уже декодированных блоков.
Есть два способа определить движение:
На рисунке выше розовые блоки — это закодированные блоки режима Direct/Skip. Как мы видим, они используются очень часто, в основном в B-кадрах.
Хотя использование термина «кадр» широко распространено в неофициальном использовании, во многих случаях (например, в международных стандартах кодирования видео MPEG и VCEG ) применяется более общая концепция с использованием слова «изображение», а не «кадр». , где изображение может представлять собой либо полный кадр, либо одно чересстрочное поле.
Видеокодеки , такие как MPEG-2 , H.264 или Ogg Theora , уменьшают объем данных в потоке, сопровождая ключевые кадры одним или несколькими промежуточными кадрами. Эти кадры обычно можно кодировать с использованием более низкой скорости передачи данных , чем это необходимо для ключевых кадров, поскольку большая часть изображения обычно аналогична, поэтому необходимо кодировать только изменяющиеся части.