Codificación de vídeo

Para la creación de vídeo, cada píxel se guarda con 8 bits (valores de 0-255). Si se guarda de manera diferencial, los valores pueden ir de -255 a 255. Por tanto, necesitamos 9 bits para codificar cada píxel. La codificación diferencial se utiliza en vídeo porque en muchos casos, las diferencias entre fotograma y fotograma son pequeñas. De esta manera, si se codifica de manera diferencial, es posible ahorra bits. Sin embargo, si las diferencias suelen ser grandes, como ocurre en un cambio de escena, este tipo de codificación no es rentable.

Como en vídeo sí se utiliza codificación diferencial, es necesario intercalar fotogramas codificados de manera absoluta (llamados keyframes) para evitar que un error en un fotograma se propague hasta el final del vídeo. En vídeos que no se supone que se tienen que editar se coloca un keyframe cada 100~200 fotogramas, en TDT se coloca un keyframe cada 0.5 segundos y en vídeos para edición un keyframe cada 2~3 fotogramas.

Además, la información no es diferencial bit a bit, sino que utiliza el movimiento de una zona. Para detectar si el contenido de un fotograma está en el siguiente, se divide la imagen en bloques y se busca el grupo de píxels entero. Si el tamaño de estos bloques fuese muy pequeño, habría que informar del movimiento de muchos bloques, por lo que consumiría muchos bits. Es por ello que los bloques tienen un tamaño de 16×16 y se les llama macrobloques (MB). Sin embargo, para buscar el movimiento los saltos del MB no son de 16 en 16 sino que son más pequeños.

En MPEG-2 se definen 3 tipos de imagen:

  • Intra (I): tiene su información guardada en el propio frame por lo que no se codifica diferencialmente. Un error en I se propaga hasta la siguiente I ya que todo el resto de tipos, depende de su información.
  • Predicción (P): tiene una codificación diferencial, y su información solo puede estar referida a imágenes anteriores intra o otras también predictivas.
  • Bidireccional (B): utiliza información de referencia frames futuros y pasados de imágenes I, P  o una imagen intermedia, pero nunca de otras B. Por tanto, un error en una imagen B no se propaga. La imagen intermedia es el calculo de la imagen media a partir de la referencia futura y la referencia pasada. Se guarda el menor error entre la media, la pasada y la futura. Para guardar la media, el codificador debe guardar los dos vectores de movimiento.

Por tanto, en la codificación y decodificación se necesita más memoria para almacenar las imágenes hasta que se satifagan las dependencias.

Rubén Sánchez Mínguez
IC design engineer en Analog Devices

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.