# Tipos de frames (compresión de video)

En el campo de la compresión de video, un fotograma de video se comprime utilizando diferentes algoritmos con distintas ventajas e inconvenientes, centrándose principalmente en la cantidad de datos comprimidos. Estos diferentes algoritmos para los fotogramas de video se denominan tipos de imágenes o tipos de fotogramas. Los tres principales tipos de imagen utilizados en los diferentes algoritmos de video son I, P y B. Se diferencian en las siguientes características:
* Los fotogramas I son los menos comprimibles, pero no necesitan otros fotogramas de video para ser descodificados.
* Los fotogramas P pueden utilizar los datos de los fotogramas anteriores para ser descomprimidos y son más comprimibles que los fotogramas I.
* Los fotogramas B pueden utilizar tanto los fotogramas anteriores como los posteriores como referencia de datos para obtener la mayor cantidad de compresión de datos.

## Resumen

En la compresión de video se utilizan tres tipos de imágenes (o fotogramas): I, P y B.
Un fotograma I (Intra-frame) es una imagen completa, como un archivo de imagen JPG o BMP.
Un fotograma P (Predicted picture) almacena solo los cambios producidos desde la imagen anterior. Por ejemplo, en una escena en la que un coche se mueve por un fondo inmóvil, solo hay que codificar los movimientos del coche. El codificador no necesita almacenar los píxeles del fondo que no cambian en el fotograma P, con lo que se ahorra espacio. Los fotogramas P también se conocen como fotogramas delta.
Un fotograma B (Bidirectional predicted picture) ahorra aún más espacio al utilizar las diferencias entre el fotograma actual y los fotogramas anterior y posterior para determinar su contenido.
Los fotogramas P y B también se denominan Inter-frame. El orden en que se disponen los fotogramas I, P y B se denomina Grupo de imágenes.

## Imágenes/fotogramas

Aunque los términos «fotograma» e «imagen» se utilizan a menudo indistintamente, el término imagen representa una noción más general, ya que una imagen puede ser un fotograma o un campo. Un fotograma es una imagen completa, y un campo es el conjunto de líneas de barrido pares o impares que componen una imagen parcial. Por ejemplo, una imagen HD 1080 tiene 1080 líneas (filas) de píxeles. Un campo impar consta de información de píxeles para las líneas 1, 3, 5...1079. Un campo par tiene información de píxeles para las líneas 2, 4, 6...1080. Cuando el video se envía en formato entrelazado, cada fotograma se envía en dos campos, el campo de las líneas impares seguido del campo de las líneas pares.
Un fotograma utilizado como referencia para predecir otros fotogramas se denomina fotograma de referencia.
Los fotogramas codificados sin información de otros fotogramas se denominan fotogramas I. Los fotogramas que utilizan la predicción de un solo fotograma de referencia anterior (o un solo fotograma para la predicción de cada región) se denominan fotogramas P. Los fotogramas B utilizan la predicción de la media (posiblemente ponderada) de dos fotogramas de referencia, uno anterior y otro posterior.

## Segmentos

En el estándar H.264/MPEG-4 AVC, la granularidad de los tipos de predicción se reduce al «nivel de segmento» (slice level). Un segmento es una región espacialmente distinta de un fotograma, que se codifica por separado de cualquier otra región del mismo fotograma. Los segmentos I, P y B sustituyen a los fotogramas I, P y B.

## Macrobloques

Normalmente, las imágenes (fotogramas) se segmentan en macrobloques, y los tipos de predicción individuales pueden seleccionarse por macrobloque en lugar de ser los mismos para toda la imagen, como se indica a continuación:
* I-frames can contain only intra macroblocks
* P-frames can contain both intra macroblocks and predicted macroblocks
* B-frames can contain intra, predicted, and bi-predicted macroblocks
Furthermore, in the H.264 video coding standard, the frame can be segmented into sequences of macroblocks called slices, and instead of using I, B and P-frame type selections, the encoder can choose the prediction style distinctly on each individual slice. Also in H.264 are found several additional types of frames/slices:
* SI‑frames/slices (Switching I): Facilitates switching between coded streams; contains SI-macroblocks (a special type of intra coded macroblock).
* SP‑frames/slices (Switching P): Facilitates switching between coded streams; contains P and/or I-macroblocks
* Multi‑frame motion estimation (up to 16 reference frames or 32 reference fields)
Multi‑frame motion estimation increases the quality of the video, while allowing the same compression ratio. SI and SP frames (defined for the Extended Profile) improve error correction. When such frames are used along with a smart decoder, it is possible to recover the broadcast streams of damaged DVDs.

## Intra-coded (I) frames/slices (key frames)

* I-frames contain an entire image. They are coded without reference to any other frame except (parts of) themselves.
* May be generated by an encoder to create a random access point (to allow a decoder to start decoding properly from scratch at that picture location).
* May also be generated when differentiating image details prohibit generation of effective P or B-frames.
* Typically require more bits to encode than other frame types.
Often, I‑frames are used for random access and are used as references for the decoding of other pictures. Intra refresh periods of a half-second are common on such applications as digital television broadcast and DVD storage. Longer refresh periods may be used in some environments. For example, in videoconferencing systems it is common to send I-frames very infrequently.

## Predicted (P) frames/slices

* Require the prior decoding of some other picture(s) in order to be decoded.
* May contain both image data and motion vector displacements and combinations of the two.
* Can reference previous pictures in decoding order.
* Older standard designs (such as MPEG-2) use only one previously decoded picture as a reference during decoding, and require that picture to also precede the P picture in display order.
* In H.264, can use multiple previously decoded pictures as references during decoding, and can have any arbitrary display-order relationship relative to the picture(s) used for its prediction.
* Typically require fewer bits for encoding than I pictures do.

## Bi-directional predicted (B) frames/slices (macroblocks)

* Require the prior decoding of subsequent frame(s) to be displayed.
* May contain image data and/or motion vector displacements. Older standards allow only a single global motion compensation vector for the entire frame or a single motion compensation vector per macroblock.
* Include some prediction modes that form a prediction of a motion region (e.g., a macroblock or a smaller area) by averaging the predictions obtained using two different previously decoded reference regions. Some standards allow two motion compensation vectors per macroblock (biprediction).
* In older standards (such as MPEG-2), B-frames are never used as references for the prediction of other pictures. As a result, a lower quality encoding (requiring less space) can be used for such B-frames because the loss of detail will not harm the prediction quality for subsequent pictures.
* H.264 relaxes this restriction, and allows B-frames to be used as references for the decoding of other frames at the encoder's discretion.
* Older standards (such as MPEG-2), use exactly two previously decoded pictures as references during decoding, and require one of those pictures to precede the B-frame in display order and the other one to follow it.
* H.264 allows for one, two, or more than two previously decoded pictures as references during decoding, and can have any arbitrary display-order relationship relative to the picture(s) used for its prediction.
* The heightened flexibility of information retrieval means that B-frames typically require fewer bits for encoding than either I or P-frames.

## See also

* Key frame term in animation
* Video compression
* Intra frame
* Inter frame
* Group of pictures application of frame types
* Datamosh
* Video