Типы кадров

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

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

Кадр — это основная структура кодирования. С кадром связаны следующие параметры: время, тип кадра, признак инициализации буфера, разрешение векторов движения и их порядок и пользовательские данные

Обычно кадр разбивается на квадратные макроблоки, и тип ссылки для каждого из макроблоков определяется индивидуально, однако с ограничением, заданным типом всего кадра:

  • I-кадры (англ. Intra-coded frames, также называются «ключевыми» — keyframes — или «опорными») могут содержать только макроблоки, сжатые независимо от других кадров.
  • P-кадры (англ. Predicted frames, «разностные» кадры) могут содержать как независимо сжатые макроблоки, так и макроблоки со ссылкой на другой, предыдущий, I- или P-кадр.
  • B-кадры (англ. Bi-predicted frames, «двунаправленные», «обратные» кадры) могут содержать следующие макроблоки: независимые (intra), со ссылкой на предыдущий кадр (predicted) или со ссылкой на 2 кадра (в mpeg-2) — предыдущий и последующий (bi-predicted); либо на несколько предыдущих и последующих кадров (H.264). B-кадры ссылаются на I-, P- или другие B-кадры.
  • D-кадры (англ. DC direct coded picture) независимо сжатые с большой потерей качества. Используются только при быстром поиске.

В новом стандарте MPEG-4 AVC/H.264 также вводится понятие SI- и SP-кадров.

Описание типов кадров

Последовательность видеокадров, состоящая из двух ключевых кадров (I), одного кадра прямого предсказания (P) и одного кадра двунаправленного предсказания (B).

I-кадры

I-кадры кодируются аналогично кадрам JPEG. В варианте алгоритма, где имеются только I-кадры видеопоследовательность превращается в M-JPEG. I-кадры могут использоваться для произвольного доступа, поскольку им не требуется дополнительная информация. I-кадры имеют самую низкую степень сжатия.

P-кадры

Иллюстрация зависимостей P-кадров.

P-кадры кодируются с использованием прошлых I и P-кадров. Например, кадр, который следует сразу за I-кадром, использует неизменную информацию из этого I-кадра и дополняет ее своей межкадровой разностью. Если за этим P-кадром следует еще один Р-кадр, то он в свою очередь берет неизменную информацию из предыдущего P-кадра (который в свою очередь использовал неизменную информацию I-кадра) и дополняет ее своей межкадровой разностью.

В-кадры

В-кадры используются как интерполяция между предыдущим и последующим кадрами как I так и Р типа.

D-кадры

MPEG-1 имеет уникальный тип кадра, которого нет в более поздних стандартах видео. На D-кадры никогда не ссылаются I-, P- или B-кадры. D-кадры используются только для быстрого предварительного просмотра видео, например, при быстром поиске нужного фрагмента видео.

При наличии немного более производительного оборудования декодирования, предварительный просмотр может быть выполнен путем декодирования I-кадров вместо D-кадров. Это обеспечивает более качественный предварительный просмотр, поскольку I-кадры, сжаты с меньшими потерями. Если кодер может предположить, что в декодерах доступна возможность быстрого декодирования I-кадров, он может сэкономить биты, не посылая D-кадры (таким образом, улучшая сжатие видеоконтента). По этой причине D-кадры редко используются в кодировании видео MPEG-1, а функция D-кадра не была включена ни в какие более поздние стандарты кодирования видео.

Группа кадров

Иллюстрация зависимостей группы кадров IBBPBB... Время идет слева направо.

Группа кадров (Group of Pictures, GOP) представляет собой наименьшую независимую структуру кодирования в видеопоследовательности. С точностью до группы кадров возможен произвольный доступ к видеопоследовательности. Связанная с группой кадров информация включает в себя временной код, флаг закрытого состояния и пользовательскую информацию.

Структура GOP часто обозначается двумя числами, например M = 3, N = 12. Первое число указывает расстояние между двумя якорными кадрами (I или P). Второй сообщает расстояние между двумя полными изображениями (I-кадрами): это размер GOP. Для примера M = 3, N = 12 структура GOP — это IBBPBBPBBPBBI. Вместо параметра M можно использовать максимальное количество B-кадров между двумя последовательными кадрами привязки.

Например, в последовательности с шаблоном IBBBBPBBBBPBBBBI размер GOP (значение N) равен 15 (длина между двумя кадрами I), а расстояние между двумя кадрами привязки (значение M) равно 5 (длина между кадрами I и P или длина между кадрами два последовательных кадра P).

Типы групп кадров

I

В кодеках MJPEG и DV видеопотока все кадры — I-типа.

I P

Семейство кодеков MPEG4 «третьей версии» (наиболее популярен был DivX 3.11, также известны DivX 4.12 и OpenDivX) имеет два типа кадров — I и P. B-кадры не предусмотрены. Такая же ситуация в семействе кодеков от On2: VP3, VP6, VP8.

Кроме того, многие современные кодеки имеют возможные настройки, выключающие создание B-кадров для снижения затрат процессорной мощности на обработку в реальном времени.

В стандартах на сжатие видео, принятых ITU-T VCEG и ISO/IEC MPEG, обычно сжимается только разность между кадрами. Например, в сцене, где человек идёт на фоне неподвижных объектов, требуется сохранять только информацию об изменяющихся областях (к примеру, используя компенсацию движения, при которой сохраняется вектор изменения положения блока или, если похожая область в предыдущем кадре не найдена, данная область сжимается как независимое изображение). Части сцены, которые не изменяются, не сохраняются в поток, за счёт чего значительно возрастает степень сжатия по сравнению с форматами, использующими независимое сжатие каждого кадра.

Например, для I- и P-кадров в потоке образуются цепочки IPPPPPPPPPPPP…, когда первый кадр сжимается независимо, а последующие — со ссылкой на первый кадр. Это самый простой пример использования разных типов кадров в потоке.

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

I P B

В сжатом видеокодеком потоке по стандартам MPEG-2, MPEG-4, H.261, H.263 и H.264 используются кадры трёх основных типов: I-кадры (от англ. Intra pictures), P-кадры (от Predicted pictures) и B-кадры (от Bi-predictive pictures или Bi-directional pictures).

Использование B-кадров означает, что данный кадр ссылается на два соседних I- или P-кадра в потоке, в этом случае вид цепочки кадров может быть таким: IBPBPBPBPBPBPBPBP. Чаще используются цепочки IBBPBBPBBPBBPBBPBBPBBPBBP, при которой B-кадры по-прежнему ссылаются на два ближайших соседних I- или P-кадра и независимы между собой.

Данная структура позволяет в 2—3 раза ускорить время получения произвольного кадра в потоке, поскольку для его получения необходимо распаковать только каждый второй (третий) кадр (являющийся P-кадром), начиная с I-кадра. Также в несколько раз возрастает скорость «быстрой перемотки с показом».

Особенности реализаций

Кодек Xvid при соответствующих настройках позволяет получить 4 и более подряд B-кадра. И такой поток будет корректно воспроизводиться им самим, а также декодером ffdshow. Некоторые же декодеры не умеют корректно воспроизводить более одного B-кадра подряд.[значимость факта?]

Ссылки