This page uses content from Wikipedia and is licensed under CC BY-SA.

Типы кадров — Википедия

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

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

  • 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-кадры.

В новом стандарте 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-кадра подряд.[значимость факта?]

Ссылки