Instalación y configuración de Computadores y Periféricos
Escuela Técnica de Ingeniería Informática de Gijón
3º Ingeniería Técnica en Informática de Sistemas

Códecs de vídeo

Autores: Javier Rodríguez Escolar, Rafael del Riego Fernández-Nespral

Fecha: 20 de mayo de 2005

1.- Objetivos

El objetivo de este trabajo es el realizar una pequeña introducción acerca de las técnicas de codificación de vídeo digital y analizar el comportamiento de algunos de los códecs de vídeo más utilizados actualmente bajo determinadas circunstancias.

2.- Teoría básica

En este apartado trataremos algunos de los aspectos más relevantes acerca de la compresión de vídeo y de las diferentes técnicas usadas en la decodificación.

2.1 La compresión de video

La aparición del vídeo digital supuso desde un principio toda una revolución por todas las ventajas que conlleva, sin embargo, unido a ésta surgió una impetuosa necesidad de tener que comprimir los datos transmitidos ya que las posibilidades de proceso de nuestros sistemas a menudo se quedaban escasas. Tras leer algunas páginas hemos extraído algunos datos que ponen de manifiesto esta necesidad:

Una vez conscientes de lo necesaria que es la compresión de vídeo, debemos distinguir entre dos tipos de datos presentes en cualquier material de vídeo (también sucede en el caso de audio). Así podremos distinguir entre:

Teniendo en cuenta esta distinción entre datos necesarios e innecesarios podremos establecer una clasificación de carácter general para los sistemas de codificación:

2.2 Formato de vídeo

Los formatos de vídeo más empleados en el campo del vídeo digital son RGB y YUV, por tanto serán estos formatos los que describiremos a continuación.

2.2.1 RGB

El término RGB se debe a las iniciales inglesas de los tres colores básicos para el ojo humano: Red-Green-Blue: Rojo-Verde-Azul, se puede intuir, por tanto, que estos serán los tres colores que darán base a este formato, obteniéndose el resto como combinación de ellos.

Con este formato podemos conseguir la máxima calidad, pero por el contrario tiene unos altos requerimientos tanto de memoria como de ancho de banda. Comúnmente se especifica RGB seguido de un número que indica la profundidad de color en bits (Ej. RGB32 ? profundidad de color de 32 bits).

2.2.2 YUV

Dados los grandes requerimientos que exige el formato RGB comentado en el apartado anterior surgió la idea de transformar por combinación lineal las tres componentes RGB en otras tres señales equivalentes Y, CB, CR (Y, U, V). Este conjunto de señales YUV es el punto común de todos los sistemas digitales más recientes.

Este formato puede ser considerado un sistema de compresión, ya que básicamente consisten transformar la señal RGB comprimiendo el color y preservando la luminosidad (el ojo humano es más sensible a ésta última).

A menudo este sistema de compresión viene por defecto en las tarjetas capturadoras de vídeo con lo que no es necesario instalar ningún codec. También cabe reseñar que muchos códecs emplean este mismo sistema para dar lugar a compresiones aún mayores.

La técnica de reducción de color preservando la luminosidad es conocida como Subsampling y viene dada por una serie de parámetros que pueden tomar los siguientes valores:

2.3 Técnicas de codificación

2.3.1 Codificación espacial

La denominada compresión espacial se apoya en que la similitud de pixeles próximos en imágenes fijas tiene como resultado un envío de información irrelevante. Mediante un análisis de las frecuencias espaciales y a través de una transformada se puede aprovechar este efecto.

2.3.2 Codificación temporal

Este tipo de codificación se basa en que, a menudo, las imágenes que se suceden en el tiempo son muy similares, de forma que el procesado individual de cada una de ellas puede resultar un tanto ineficiente. Aprovechando este aspecto, se propone tratar la diferencia que se produce entre dos imágenes consecutivas.

Imagen

2.3.3 Codificación bidireccional

Se basa en el hecho de que cuando un objeto superpone a otro en una imagen y el objeto oculto se va mostrando lentamente esto implica la transmisión de nueva información constantemente en el proceso de revelado del objeto. Esto lo aprovecha la codificación bidireccional que hace posible tener en cuenta imágenes previas o posteriores.

Imagen

2.3.4 Otras técnicas específicas

Como los codecs MPEG4 parecen estar a la cabeza de la codificación de vídeo, comentaremos aquí algunas técnicas utilizadas por MPEG4, que también podrán verse en otros códecs.

2.3.4.1 Lumi masking

Es una compresión de la información basándose en la luminosidad de los píxeles; como para el ojo humano es más difícil distinguir las imágenes muy oscuras, se reduce la cantidad de bits usadas para representarlas. En ocasiones esta reducción puede notarse en la calidad de la imagen.

2.3.4.2 Motion Compensation

Es un algoritmo de codificación temporal en el que observamos los cambios entre píxeles de imágenes consecutivas, almacenando el desplazamiento del pixel, de una imagen a otra, en un vector. Esta idea también engloba Global Motion Compensation: es la extensión de Motion Compensation a toda la imagen. Sería realizar la codificación de la imagen en función del movimiento de la cámara: así, si la cámara se mueve a la izquierda, la imagen se desplazará por entero a la derecha, conservando una gran parte de la información redundante de imagen a imagen. Dado que los resultados obtenidos no proporcionan suficiente compresión, se pone en duda la necesidad de que los codificadores MPEG4 tengan que soportarlo debido a la complejidad temporal que tiene.

2.3.4.3 DCT (Discrete Cosine Transform)

Consiste en aplicar una compresión ("cuantización") a la imagen dividiéndola en cuadros (se suele utilizar 8x8 cuadros), que posteriormente se vuelven a dividir en cuadros (se aplica una segunda "cuantización") de 8x8 píxeles, logrando una gran compresión. Un error típico de esta técnica es el "blocking": la percepción de bloques en la imagen, aunque en las versiones actuales de DivX, XviD y 3ivx es muy raro encontrarse con él.

2.3.4.4 Wavelet

Esta técnica divide la imagen en dos, tras hacerla pasar por filtros. La primera imagen es la "base" de la imagen, las "líneas generales" de la misma. La segunda imagen podríamos decir que es la imagen que contiene los detalles, de tal manera que si juntásemos ambas muestras, obtendríamos la imagen original. A la imagen de detalles se le puede aplicar otra vez wavelet, de forma iterativa. A la imagen base y la (o las) imagen de detalles, se les aplica una compresión. Para la imagen base la compresión se basará en la imagen base anterior, ya que podemos suponer que de una imagen a otra los cambios van a ser mínimos. Para la imagen de detalles, dado que el ojo humano es menos sensible a los detalles, se le aplica una compresión mayor que a la imagen base, logrando, en conjunto, una buena compresión con una pequeña pérdida de calidad.

2.3.4.5 Contour-Image Coding

Es una técnica reciente, pero que para el hombre es algo sumamente sencillo: reconocer el contorno de una figura. Al reconocer el contorno de una figura, y comprimirlo como una función "spline" o polinomial, se ahorraría espacio, y además podríamos dotar al compresor de la capacidad para reconocer objetos dentro de una imagen, y de alguna forma, realizar su compresión por separado. Sin embargo, resulta muy complicado llevar a cabo esta técnica, ya que los algoritmos actuales no son del todo satisfactorios. La idea de esta técnica se está usando en la creación del MPEG4 Part10.

2.4 Los Codecs

Antes de los actuales, existió una "vieja escuela" de códecs, la mayoría en desuso debido a la competencia actual. Algunos de ellos eran el Cinepak; pensado como un codec para máquinas poco potentes, ofreciendo una compresión y calidad adecuadas para los procesadores de la época, los 386 y 486 (actualmente existe una versión "PRO", pero ambas son de pago), Microsoft Windows 1; que nació en 8 y 16 bits, y posteriormente fue incluido en Windows 95 una versión de 32 bits de color, versiones antiguas de Indeo, y también, la compresión sin pérdida más obvia: cuadros completos (aunque no deberíamos decir que se trata de una compresión, sino de una recopilación de imágenes)

Actualmente, estos son algunos de los códecs más importantes:

INDEO (INtel viDEO)

Basado en Wavelet. Requiere un ordenador más potente que otros códecs para su visualización y compresión. Realiza compresión temporal. Ahora la licencia de los codecs Indeo es propiead de Ligos, aunque el desarrollador fue Intel. La última versión es el Indeo 5.10, mucho más rápido y eficaz que Indeo 4.5: las pruebas muestran que efectivamente se obtiene una calidad muy buena de imagen y además tanto el tiempo de codificacion como el tamaño del vídeo resultante son menores.

MPEG 1 y 2

Son antecesores del conocido MPEG 4. MPEG1 se usa en tasas de bits más bajas que MPEG2, ya que este último está dirigido a vídeos de alta calidad (DVD, por ejemplo). En bitrates menores, MPEG1 puede ofrecer mejores resultados que MPEG2. Podríamos decir que MPEG2 es a DVD como MPEG1 es a CD, ya que es la base del VCD, Video CD, un formato de compresión de vídeo cuya tasa de datos es similar a la de un CD de audio ( por lo que la capacidad suele compararse con la de este: "un CD virgen de 74 minutos de música" o 74 minutos de vídeo codificado con VCD). La calidad del VCD es comparable, quizás un poco menor, a la de una cinta VHS, por lo que a veces se utiliza el formato SVCD. Es un formato de codificación basado en MPEG2, no en MPEG1, por lo que ofrece una calidad de imagen mucho mayor. Esto también implica que la capacidad necesaria para almacenar la misma cantidad de video es mucho mayor. Como resumen, nos quedaremos con la idea de que MPEG2 implica calidad y MPEG1 bitrates bajos

Pero si hay uno que destaca actualmente, ese es MPEG4

MPEG4

La codificación basada en MPEG4 realiza codificación temporal y espacial. Utiliza la implementación de diversas técnicas que se verán más adelante.

En la compresión temporal de MPEG4 se utilizan 3 tipos de imágenes:

Posteriormente estos cuadros se intercalan en una secuencia como IBBPBBP (que proporciona una compresión mayor a costa de más tiempo para codificar que esta otra), IBPBPBP, etc.

DivX, XviD y 3ivx

En MPEG4 se basan codecs muy conocidos, como DivX, Xvid y 3ivx. Los códecs basados en MPEG4 han de pagar por la codificación de sonido. En el caso de 3ivx, por ejemplo, si no codificamos sonido, o lo hacemos con otro codec, sería legal. Sin embargo, en el caso de DivX no podemos usar este codec más allá del ámbito "personal", no podremos comercializar los vídeos que codifiquemos con él.

Divx y XviD surgen de una versión antigua de Divx. Pese a este origen común, en las pruebas pudimos apreciar diferencias entre uno y otro.

Al comercializarse DivX, algunos componentes del equipo responsable del desarrollo de Divx se separaron para desarrollar una versión del mismo, que fuese abierta: el XviD. Quizás podamos decir que la principal se encuentra en este aspecto: ahora mismo XviD es libre y no todas las versiones de DivX lo son: DivX Pro, por ejemplo, no lo es.

Como curiosidad, comentar que DIVX también se corresponde con las siglas de un sistema de alquiler de DVDs, que no tuvo excesiva aceptación.

3ivx Utiliza YUV 4:2:0, es decir, 4 veces más de información para luz que para el color. Una de las características señaladas es que puede utilizarse en streaming, aunque en nuestras pruebas esto no se tenga en cuenta.

El futuro de MPEG4 es el MPEG4 Part10 (estábamos hablando sobre datos de MPEG4 Part2), mucho más complejo. H.264, que es también como se llama, produce compresiones con una calidad similar a la de MPEG2, pero con un bitrate la mitad (incluso menos) del anterior. Será el comeptidor directo del DVD (MPEG2)

Como se puede ver, la codificación de vídeo no es algo trivial ni sencillo: los buenos codecs tienen muchos estudios detrás, investigación acerca de la percepción humana de la luz visible, y una posterior traducción en algoritmos que, basándose en los "defectos" apreciados, consigan mantener la imagen prácticamente igual con una capacidad usada muchísimo menor.

3.- Desarrollo

3.1 Codificación de un extracto de DVD

Para la realización de este apartado hemos extraído un .VOB de un DVD original perteneciente a la película Salvar al Soldado Ryan. La extracción del archivo .VOB la hemos realizado con ayuda de un programa gratuito llamado DVD Decrypter.

Tras la desencriptación de una de las escenas hemos seleccionado un intervalo de un minuto de duración. Utilizaremos el programa gratuito Dvd2Avi para convertir la escena ya mencionada (en formato .VOB) a formato .AVI utilizando distintos códecs y variando el bitrate para analizar los resultados.

Prueba 1

Para esta prueba hemos pasado el archivo .VOB a .AVI sin compresión alguna (cuadros completos, ya que es la máxima calidad que podemos obtener), con el fin de comprobar la diferencia de calidad y de tamaño que tendría el vídeo final.

Por otro lado hemos realizado la misma conversión, pero utilizando 3 códecs distintos: 3ivx 4.5.1, Divx 5, Xvid. Hemos intentado unificar los criterios de codificación eligiendo:

Esto no ha sido del todo posible pues los parámetros que introducimos se toman como referencia, pero no se llevarán a cabo al pie de la letra. Además no todos los códecs proporcionan las mismas opciones de configuración, por tanto incluimos la siguiente información para cada códec:

con el fin de que, quien lea este documento, tenga una amplia información acerca de la configuración exacta de cada codec.

A través de la siguiente tabla se pueden observar los principales de cada códec y acceder a cualquiera de las tres opciones anteriormente comentadas.

Códec kbps Tamaño final (MB) Info Dvd2Avi Info Gspot Captura de pantalla
Sin compresión 165.890 1.232,048
Divx5 975 7,264
Xvid 1001 7,462
3ivx 1120 8,345

A partir de estos datos cada uno puede establecer sus propias conclusiones, si bien se puede comprobar fácilmente que la calidad ofrecida cuando no se realiza compresión alguna es bastante superior, aunque el gran tamaño que ocupa pone de manifiesto lo útil que puede llegar a ser la compresión de vídeo, más aún teniendo en cuenta la buena calidad en relación a la alta compresión que se alcanza con cada uno de los tres códecs que analizamos.

Prueba 2

Con esta prueba se pretende comprobar la diferencia en la codificación de un archivo .avi variando únicamente el bitrate y utilizando siempre el mismo códec (Divx5)

Codificaremos de nuevo el mismo archivo de un minuto de duración, y ésta vez además de codificarlo a 1000 kbps, lo haremos a 500 kbps, 2000 kbps y a 3000 kbps (insistimos en que aunque nosotros introduzcamos este bitrate, no es el que exactamente se procesa, por lo que en la tabla queda reflejado el real)

Códec kbps Tamaño final (MB) Info Dvd2Avi Info Gspot Captura de pantalla
Divx5 863 6,439
Divx5 975 7,264
Divx5 1948 14,496
Divx5 2915 21,676

Con estas pruebas se puede comprobar fácilmente las diferencias tanto en calidad como en memoria de los archivos resultantes, sin embargo no se pueden extraer conclusiones generales sobre la relación calidad/tamaño, pues la elección de un bitrate u otro dependerá siempre del uso que se le de al archivo resultante

3.2 Codificación de imágenes diseñadas por ordenador

Concepto

Realizamos una pequeña animación de una hoguera con el 3DStudioMAX 5.0. Con este vídeo haremos 3 pruebas diferentes: un primer vídeo correspondiente a la previsualización de la animación, un segundo vídeo, que sería el resultado final de la animación, y un último vídeo, en el que la cámara no se mueve.

Hay que comentar que las pruebas de aquí en adelante se realizaron en un ordenador no muy moderno: un AMD DURON 750 MHz, 512 de RAM a 200MHz, Caché L1 de 128 KB y L2 de 64KB, disco con sistema NTFS, y tarjeta gráfica AGP 8x GeForce 4 MX 440. Debido a esto, algunos datos u observaciones podrían no tener sentido en ordenadores más potentes (por ejemplo, una visualización lenta)

Prueba 1: La previsualización

En todo trabajo de animación por ordenador, a la hora de realizar los movimientos, necesitaremos poder ver la secuencia animada de continuo para ver los fallos y poder lograr un resultado aceptable. A veces esto es posible viendo la animación "en directo", pero otras veces, la complejidad de la escena no nos permite visualizar bien lo que está ocurriendo. Es por esto por lo que existe la posibilidad de ver una previsualización de lo que llevamos hecho: un vídeo en el que se omiten los efectos especiales, antialiasing y otras técnicas que llevarían más tiempo calcular, en beneficio de la consecución rápida de una muestra en vídeo de la animación. Este vídeo es el que codificamos usando diversos codecs.

Además, estos vídeos iniciales los utilizaremos para descartar los códecs que creemos que no son útiles a la hora de codificar un vídeo de alta calidad

Resultados

La siguiente tabla muestra los resultados obtenidos en la codificación del vídeo de previsualización. La calidad es la valoración subjetiva que le otorgamos a la imagen, por lo que puede no ser un dato a contrastar con el mismo rigor que otros. En algunas ocasiones, usamos diferentes parámetros de compresión para mismos códecs, para comprobar los diferentes resultados.

Códec Tiempo (s) Tamaño (KB) Calidad Comentarios
3DSMAX 12 32842 10 Reproducción poco suave
3ivx 12 761 9 Permite definir el PAR
3ivx Opt 14 726 9 Permite definir el PAR
Cinepak 52 3004 10 Problemas en visualización
DivX5.2.1 13 444 5
DivX5.2.1 Opt 22 298 7 No permite todas las resoluciones
DivX5.2.1 MPEG2 31 254 7 Uso de cuantización MPEG2 en vez de H.263
INDEO 4.5 90 223 5 Problemas en visualización
INDEO 4.5 Opt 110 3396 10 Problemas en visualización
INDEO 4.5 Vel 13 5006 10
INDEO 5.10 10 3305 10
INDEO 5.10 Opt 45 2413 10
Microsoft 1 Opt 21 20740 8
PICLossless 16 34800 10
RAW 10 65680 10 Reproducción poco suave
WMV CBR 40 308 4 Muy difuminado, visualización poco suave
WMV VBR 17 1356 8 Muchas opciones de compresión
XviD 14 249 6 Reproducción poco suave

El tiempo expresa el tiempo total (en segundos) tardado en "renderizar" la escena y codificarla

Para la calidad tomamos como referencia la calidad obtenida con métodos sin pérdida (RAW, PIClossless o 3DSMAX), siendo esos valores 10.

El PAR (Pixel Aspect Ratio) es la relación existente entre el ancho y el alto de los píxeles. Esta relación no es siempre 1:1, pudiendo variar en el caso de pantallas panorámicas, que no usen píxeles cuadrados

WMV son las siglas de Windows Media Video, y VBR y CBR son las de Variable/Constant BitRate. "Opt" (de "Optimo") indica el uso del codec orientado a obtener la mejor calidad y compresión (a costa de tiempo) que pudimos conseguir y reproducir. "Vel" indica que se usaron las opciones para lograra una compresión de vídeo rápida.

A continuación tenemos unos enlaces para ver unas capturas de imágenes de algunos codecs

Criterios

En base a lo comentado anteriormente, nuestros criterios no serán los mismos que a la hora de realizar el vídeo definitivo. En esta ocasión valoramos poco la cantidad de espacio que ocupará el vídeo final, valoraremos más la calidad de imagen, y quizás por encima, el tiempo tardado en obtener el vídeo. Por supuesto, otras apreciaciones nuestras también modificarán esta "nota" provisional

Elección

En esta primera criba, creemos que los códecs que mejor satisfacen nuestros requerimientos son: 3ivx, Indeo 5.10, y WMV VBR, ya que la relación tiempo-calidad-compresión es la que más aceptable nos parece. Esto no quiere decir que en la siguiente prueba excluyamos a los demás, si no que en esta nuestros elegidos son esos y en ese orden

Prueba 2: La secuencia con movimiento de cámara

En esta ocasión ya nos dispondremos a obtener el vídeo final. Tras los resultados anteriores, y teniendo en cuenta que esta vez nos interesa sobre todo calidad con buena compresión, nos decidimos a usar menos codecs que antes. Entre ellos hay un codificador sin pérdida, para tenerlo como referencia en cuanto a la calidad. Además, incluimos codecs que en principio parecía que debían estar descartados, como XviD o DivX, pero la fama que les precede actualmente nos hace pensar que en este tipo de vídeos pueden dar un salto cualitativo apreciable.

Códec Tiempo Tamaño (KB) Calidad Comentarios
3ivx 1:34 1080 9
DivX5.2.1 1:35 799 8.5
INDEO 5.10 1:36 1756 8.5
PICLossless 1:38 11889 10
XviD 1:37 759 8.5 Reproducción poco suave

Esta vez el tiempo se indica como "horas:minutos"

Criterios

Como se puede apreciar, el tiempo deja de ser un criterio y pasa a ser un dato informativo, ya que el tiempo que se tarda en generar cada imagen es enorme en comparación con el tiempo que se tarda en codificarla. Nos centraremos sobre todo en la calidad, y después en el tamaño del archivo obtenido

Elección

En esta ocasión nuestro número 1 es 3ivx. Hay que aclarar primero algunos aspectos. PICLossless está descartado por el enorme tamaño del vídeo resultante. Indeo 5.10 parece que pierde algo de intensidad de color, lo que se puede apreciar en el destello horizontal a media pantalla, de color naranaja pálido, que en realidad es naranja más intenso. XviD vuelve a ofrecer problemas de reproducción, lo cual puede deberse a la máquina sobre la que se visualiza. En cualquier caso, es un punto en contra. La decisión entre DivX y 3ivx no es del todo fácil. El hecho de que el bitrate en DivX sea mucho menor también es un dato a tener en cuenta, ya que en igualdad de condiciones quizás serían idénticos, pero como 3ivx no es de pago, nuestra decisión se decanta a su favor

Bajo estas líneas, el detalle al que hacíamos referencia: a la izquierda, la compresión con 3ivx; a su lado con Indeo5.10

Imagen Imagen

Prueba 3: La secuencia con cámara estática

Poco que comentar: es la misma escena de antes, pero esta vez la cámara está fija en un punto. Objetivo: apreciar que realmente la compresión temporal es efectiva, de manera que podemos sacar más conclusiones. La prueba anterior sería la prueba para escenas de acción, mientras que esta lo sería para escenas "pasivas". En esta ocasión prescindimos también de XviD, debido al problema mencionado anteriormente.

Códec Tiempo Tamaño (KB) Calidad
3ivx 1:11 193 9
DivX5.2.1 1:12 352 8.5
INDEO 5.10 1:11 613 8.5
PICLossless 1:10 6403 10

Criterios

Los mismos de antes

Elección

Es interesante que los codecs dispongan de buena capacidad para comprimir escenas en las que se repiten partes de las imágenes entre imágenes próximas. Como vemos, se aprecia una gran compresión respecto a la escena anterior, especialmente en 3ivx, por lo que refuerza nuestra decisión de tomarlo, en este conjunto de pruebas, como mejor codec.

Conclusiones

Tras la realización de este trabajo podemos sacar en claro que la codificación de vídeo está hoy en día muy avanzada, por lo que son muchos los códecs que se pueden emplear con resultados realmente buenos.

Por otra parte tras realizar muchas pruebas con diversos programas, cabe mencionar que, a menudo gran parte de los programas que se usan en la codificación son tremendamente caprichosos en cuanto a los códecs a utilizar. Sin ir más lejos, con el programa que hemos usado para convertir a .AVI nuestro fichero .VOB (Dvd2Avi) tuvimos bastantes problemas ya que aleatoriamente nos dejaba, o no, usar algunos códecs (el codec windows media video ofrecía una codificación paupérrima inundada de colores azules). Este problema se extiende a la obtención de un bitrate prefijado de antemano. Posiblemente este problema se anule o minimice en la compresión de vídeos de mayor tamaño, pero nuestras pruebas no nos permiten decir lo mismo. Creemos que los códecs derivados de MPEG4 son los mejores hoy por hoy (destaca 3ivx), aunque estamos a la espera de ver qué sucede con la sucesión: MPEG4 Part10, que promete calidades próximas al DVD con un ratio de compresión mucho mayor.

Enlaces

Enlaces de teoría de la compresión de vídeo y técnicas de codificación

Enlaces a páginas relativas al estándar MPEG

Otros enlaces

Licencia

Creative Commons License
Este trabajo utiliza una Licencia Creative Commons.