Типы кадров

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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

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

  • I-кадры (также называются ключевыми (keyframes) или «опорными») могут содержать только независимо сжатые макроблоки.
  • P-кадры («разностные» кадры) могут содержать как независимо сжатые макроблоки, так и макроблоки со ссылкой на другой I- или P-кадр.
  • B-кадры («двунаправленные», «обратные» кадры) могут содержать следующие макроблоки: независимые (intra), со ссылкой на один кадр (predicted) или со ссылкой на 2 кадра (bi-predicted). B-кадры ссылаются на ближащие I-,P или B-кадры.

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

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 используются кадры трёх основных типов: I-кадры (от англ. Intra pictures), P-кадры (от англ. Predicted pictures) и B-кадры (от англ. Bi-predictive pictures или Bi-directional pictures).

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

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

Интересные факты[править | править исходный текст]

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