Una amistosa introdución a la codificación de vídeo, parte 2: vídeo con pérdida

Ángel Ortega

Por Mark Pilgrim, traducción de Ángel Ortega. Artículo original: http://diveintomark.org/archives/2008/12/19/give-part-2-lossy-video-codecs

[Estas notas se convertirán en una charla técnica sobre codificación de vídeo]. La consideración más importante en la codificación de vídeo es elegir bien un «codec» de vídeo. Más adelante hablaré sobre cómo elegir el más adecuado, pero de momento sólo quiero introducir el concepto (esta información es probable que quede obsoleta pronto; lectores del futuro, tened en cuenta de que esto fue escrito en diciembre de 2008).

Cuando se habla de «ver un vídeo», estamos hablando de una combinación de un flujo de vídeo, un flujo de sonido, y quizá títulos ó subtítulos. Pero probablemente no hablamos de diferentes ficheros; simplemente tenemos «el vídeo». Quizá es un fichero AVI, o un fichero MP4. Estos son contenedores, como un archivo ZIP que contuviese diferentes tipos de ficheros dentro. El formato del contenedor especifica cómo se almacenan dentro de él los flujos de sonido y vídeo (y los subtítulos, si los hay).

Cuando «ves un vídeo», el programa visor está haciendo varias cosas a la vez:

Un «codec» de vídeo es un algoritmo mediante el cual se codifica un flujo de vídeo, es decir, especifica cómo hacer lo que pone en el punto 2 de la lista de arriba. Tu visor de vídeo decodifica el flujo de vídeo según el «codec» de vídeo y muestra una series de imágenes o «fotogramas» en la pantalla. La mayoria de los «codecs» de vídeo usan todo tipo de trucos para minimizar la cantidad de información requerida para mostrar un fotograma tras otro. Por ejemplo, en lugar de almacenar cada fotograma (como si fuese un pantallazo), almacenan sólo las diferencias entre fotogramas. La mayoria de los vídeos no cambian mucho de un fotograma a otro, así que esto permite altos niveles de compresión, lo que resulta en tamaños de fichero más pequeños. (hay muchísimos más trucos complicados, en los que me zambulliré en un artículo futuro).

Existen «codecs» con y sin pérdida; el artículo de hoy se centra sólo en los primeros. Decir «codec de vídeo con pérdida» significa que hay información que se pierde irremediablemente durante la codificación. Como cuando se copia una cinta de cassette, se está perdiendo información sobre la fuente de vídeo original, y se degrada la calidad cada vez que se codifica. En lugar del zumbido de una cinta de cassette, un vídeo requete-codificado se verá lleno de bloques, especialmente durante las escenas con mucho movimiento (en realidad, esto ocurre incluso cuando se codifica directamente desde la fuente original si eliges el «codec» incorrecto o le pasas parámetros erróneos). Como contrapartida, estos «codecs» consiguen proporciones de compresión sorprendentes, y muchos ofrecen formas de «engañar» y suavizar esos bloques durante la visualización para hacerlos menos perceptibles ante nuestros ojos.

Hay cientos de «codecs» de vídeo. Hoy hablaremos de los cinco más modernos: MPEG-4 ASP, H.264, VC-1, Theora y Dirac.

MPEG-4 ASP

También conocido como «MPEG-4 Advanced Simple Profile». MPEG-4 ASP fue desarrollado por el grupo MPEG y estandarizado en 2001. Puedes haber oído hablar de Divx, Xvid o 3ivx; todas éstas son implementaciones rivales del estándar MPEG-4 ASP. Xvid es «Open Source»; Divx y 3ivx son propietarios. La compañía responsable de DivX ha tenido éxito en popularizar la marca «DivX» como sinónimo de «MPEG-4 ASP». Por ejemplo, este DVD «certificado DivX» puede en realidad mostrar la mayoria de los vídeos MPEG-4 ASP en un contenedor AVI, incluso si fueron codificados con un «codec» de la competencia (para hacer las cosas aún más confusas, la compañía detrás de DivX ha creado ahora su propio formato de contenedor).

MPEG-4 ASP está cubierto por patentes; se pueden obtener licencias mediante el grupo MPEG LA. El vídeo MPEG-4 ASP puede venir incrustado en la mayoría de los contenedores, incluyendo AVI, MP4 y MKV.

H.264

También conocido como «MPEG-4 part 10», como «MPEG-4 AVC» ó como «MPEG-4 Advanced Video Coding». H.264 ha sido desarrollado también por el grupo MPEG y fue estandarizado en 2003. Pretende proporcionar un único «codec» para dispositivos con poca capacidad de CPU y ancho de banda (teléfonos móviles), dispositivos con mucha capacidad de CPU y ancho de banda (ordenadores de escritorio modernos), y todo lo que haya en medio. Para conseguir esto, el estándar está separado en «perfiles», definiendo cada uno de ellos una serie de características opcionales con un compromiso entre complejidad y tamaño de fichero. Los perfiles superiores usan más características opcionales y ofrecen mayor calidad visual en tamaños de fichero menores, tardan más en ser codificados, y requieren más potencia de CPU para ser vistos en tiempo real.

Para hacerse una idea del rango de perfiles, el iPhone de Apple soporta el perfile «Baseline», el AppleTV soporta «Baseline» y «Main», y Adobe Flash en un ordenador de escritorio soporta los perfiles «Baseline», «Main» y «High». Youtube (propiedad de Google, mi empleador) usa ahora H.264 para codificar los vídeos en alta definición, visibles mediante Adobe Flash; Youtube también proporciona vídeo codificado con H.264 a los dispositivos móviles, incluyendo los iPhones de Apple y los teléfonos con el sistema operativo Android de Google. Además, H.264 es uno de los «codecs» de vídeo obligatorios de la especificación Blu-Ray; los discos Blu-Ray suelen usar el perfil «High».

La mayoría de los dispositivos no PCs capaces de mostrar vídeo H.264 (eso incluye a iPhones y Blu-Rays de salón) realmente hacen la decodificación en un chip dedicado, ya que sus CPUs no están ni remotamente preparadas para decodificar vídeo en tiempo real. Algunas tarjetas de vídeo de alta gama para ordenadores de escritorio también soportan la decodificación de H.264 por hardware. Hay una gran cantidad de codificadores H.264 rivales, incluyendo la librería de Software Libre x264. El estándar H.264 está cubierto por patentes; se pueden obtener licencias mediante el grupo MPEG LA. El vídeo H.264 puede venir incrustado en la mayoria de los contenedores populares, incluyendo MP4 (usado principalmente por la tienda Apple iTunes) y MKV (usado principalmente por piratas).

VC-1

VC-1 evolucionó desde el «codec» de Microsoft WMV9 y se estandarizó en 2006. Lo usa y promociona Microsoft para el vídeo de alta definición, aunque, como el H.264, tiene un rango de perfiles como compromiso entre calidad y tamaño. También como el H.264, es obligatorio para la especificación Blu-Ray, y todos los visores Blu-Ray deben ser capaces de decodificarlo. El «codec» VC-1 está cubierto por patentes; se pueden obtener licencias mediante el grupo MPEG LA.

Wikipedia tiene una breve comparación técnica entre VC-1 y H.264; Microsoft tiene la suya propia; Multimedia.cx tiene un diagrama de Venn que muestra las similitudes y diferencias. Multimedia.cx también incluye una discusión de las características técnicas de VC-1. También he encontrado interesante esta historia sobre VC-1 y H.264, así como esta refutación.

El VC-1 fue diseñado para ser independiente del contenedor, aunque normalmente viene dentro de un ASF. Un decodificador «Open Source» para vídeo VC-1 fue desarrollado como un proyecto del «Google Summer of Code» 2006, y el código resultante se añadió a la librería ffmpeg.

Theora

Theora evolucionó desde el «codec» VP3 y ha sido desarrollado posteriormente por la fundación Xiph. Theora es un «codec» sin royalties y no está cubierto por ninguna patente conocida aparte de las originales del VP3, que han sido irrevocablemente licenciadas como libres de royalties. Aunque el estándar está «congelado» desde 2004, el proyecto Theora (que incluye implementaciones «Open Source» del codificador y decodificador) sólo alcanzó la 1.0 en noviembre de 2008.

El vídeo Theora puede ir incrustado en cualquier contenedor, aunque lo más habitual es encontrarlo en un Ogg. Todas las distribuciones Linux lo soportan directamente, y Mozilla Firefox 3.1 https://developer.mozilla.org/web-tech/2008/10/14/firefox-31-beta-1-an-overview-of-features-for-web-developers/ (incluirá soporte nativo de vídeo Theora) en un contenedor Ogg. Y con «nativo» quiero referirme a «disponible para todas las plataformas sin añadidos específicos de la misma». También se puede ver vídeo Theora en Windows ó en MacOS X instalando el decodificador «Open Source» de Xiph.org.

El codificador de referencia incluido en Theora 1.0 ha sido muy criticado por ser lento y de mala calidad, pero Theora 1.1 incluirá un nuevo codificador que aprovechará mejor las características de Theora manteniendo la compatibilidad con las versiones actuales. (Información: 1, 2, 3, 4, 5, código fuente).

Dirac

Dirac fue desarrollado por la BBC para proporcionar una alternativa libre de royalties a H.264 y VC-1 que la BBC pudiera usar para emitir televisión en alta definición en Gran Bretaña. Como el H.264, Dirac proporciona un único «codec» para todo el abanico de anchos de banda. Dirac no está cubierto por ninguna patente conocida, y hay dos implementaciones «Open Source», la de referencia de la BBC y Schroedinger (optimizada para velocidad).

El estándar se terminó en 2008, por lo que aún hay muy poco contenido en este formato, aunque la BBC lo usó internamente para los juegos olímpicos 2008. Se pueden encontrar vídeos Dirac en muchos de los contenedores habituales, incluyendo MP4, Ogg, MKV y AVI. VLC 0.9.2 ( liberado en septiembre de 2008) puede mostrar directamente vídeos codificados con Dirac en contenedores Ogg ó MP4.

Por supuesto, esto sólo es arañar la superficie de todos los «codecs» de vídeo disponibles. La codificación de vídeo se remonta muy atrás, pero mi objetivo es centrarme en el presente y el futuro inmediato, no en el pasado. Si quieres, puedes leer sobre MPEG-2 (usado en DVDs), MPEG-1 (usado en VideoCDs), versiones anteriores del WMV de Microsoft, Sorenson, Indeo y Cinepak.

http://diveintomark.org/archives/2008/12/19/give-part-2-lossy-video-codecs