Entendiendo el video. Parte I: Flujos y Multiplexing

Hace tiempo mi viejo amigo Christian me pidió que armara un artículo simple sobre los formatos de audio. Le dije que era más interesante hablar sobre el video en estos preciosos bichos, porque si es raro que alguien entienda la diferencia entre un formato lossy (con pérdida de calidad, ej:MP3) y lossless (sin pérdida de calidad, ej: FLAC), es más raro aún quien entiende las diferencias entre formatos contenedores, codecs y las diferencias existentes entre un VCD, un SVCD y un DVD.
Si bien es muy simpático el artículo "Taller de codecs" del citado susodicho, incurre en algunas inexactitudes que me son un tanto molestas. Por tanto, atendiendo a mi natural tendencia a meterme en lo que no debería, procederé a iniciar una pequeña serie de artículos sobre el video en las computadoras, todo gracias a la fascinación que tiene mi chica por el anime y la absoluta necesidad que tenemos ambos de ver los monitos en la TV, cómodamente tendidos.

Flujos, muxeos y demuxeos

Antes de entrar en materia, es necesario entender que los videos son un recurso multimedial compuesto por uno o más flujos (o streams) de información. ¿Cómo esto?.
Sencillo: imaginen que están viendo el último capítulo de "Desperate Housewives" que descargaron LEGALMENTE por iTunes (si, claro!). Para el computador, el archivo que ustedes descargaron no es más ni menos que un flujo de imágenes (video), audio y otras cosas más. Lo podríamos representar del siguiente modo.



En el caso más sencillo, tendríamos un flujo de video y un flujo de audio, los cuales corren en paralelo; en un momento dado, una imagen con el sonido correspondiente le serán presentados al usuario.
Ahora, como todo buen usuario sabe, los archivos en el computador son un flujo serial de datos. ¿Cómo hacemos para que los dos o más flujos se procesen y muestren de manera fluida?. La primera alternativa que a uno se le podría ocurrir es guardar la información de esta manera:

¿Se imaginan cual es el problema? Para poder presentar la información en la forma adecuada, el compu debería cargar TODO el archivo en memoria. Si tomamos en cuenta que un DVD típico puede guardar hasta 4Gb de información cómodamente, se darán cuenta que este enfoque es, por decir lo menos, ineficiente.

En alguna cabeza surgió la idea de organizar la información, entonces, de la siguiente manera:

¡Brillante! El computador solo necesita tener a mano la información suficiente de video y audio para mostrar, por decir, un segundo de multimedia, para luego cargar el siguiente bloque y así, sucesivamente.
El proceso de convertir dos o más señales (o flujos) en un sólo flujo (o emparedado de info) se le denomina Interleaving. En la mayoría de los softwares de creación de video, se le suele llamar Multiplexing; entre amigos, solemos llamarle muxear.
El proceso inverso, o sea, transformar el flujo único en las distintas señales se le llama demultiplexing o, para los amigos nuevamente, demuxear.

La importancia de llamarse multimedia

Si han estado atentos, se han dado cuenta que, dentro de lo posible, trato de usar el término flujo para todo, en vez de audio o video. Esto, por una razón muy simple: nada nos impide mezclar distintos tipos de flujos.
En un DVD normal, por ejemplo, tenemos los siguientes flujos:

  • Audio: podemos tener uno o más flujos para cada idioma o para cada configuración de canales (Stereo, sorround)
  • Video: Generalmente, es uno solo, pero también podemos tener 2 o más, correspondientes a distintas cámaras o, lo más común, introducciones en distintos idiomas (clásico en los videos de Star Wars)
  • Subtítulos: Uno por cada idioma, existiendo algunos que son opcionales y otros obligatorios para cada dialecto

Muchos flujos, ¿cierto?
Ahora, se preguntaran ustedes, ¿existe una sola forma para muxear estos flujos? La respuesta, para variar, es NO. Existen muchas formas para crear un flujo "muxeado", cada una con sus ventajas y limitaciones. El archivo que contiene un determinado tipo de flujo-mux es lo que llamaremos, de ahora en adelante, un formato contenedor. En esta categoría entran los infames archivos avi, mpeg, ogm y mkv, de los cuales hableremos en otra ocasión.
Lo segundo: ¿el tipo de flujo (de video, audio, etc) es estándar? De nuevo, la misma respuesta: NO. Como los flujos de video y audio puro requieren mucho espacio, generalmente se comprimen, para lograr una reducción de tamaño. Los archivos de audio suelen ser comprimidos en formato MP3, aunque nada impide que sean utilizados otros formatos (los DVD ocupan un formato llamado AC3); para el video, existen múltiples formatos de codificación, siendo algunos de los más conocidos el DivX y el Xvid. Nuevamente, este será tema de otro post.
En resumen, el proceso sería el siguiente: primero, se demuxean los flujos que necesitemos (generalmente, uno de video, otro de audio y, si el formato lo permite, uno de subtítulos). Segundo, se descomprime la información para que el computador pueda, en tercer lugar, reproducir la información a través de los distintos medios disponibles: pantalla, parlantes, etc.

Eso sería todo por ahora. Si les gusta el tema, me gustaría seguir con un artículo sobre los distintos formatos contenedores.

Agradecimientos: A Judith, por consejos en la redacción.

Imagen de Francotirador

Interesante artículo, en especial el tema de cómo se entrecruza la información y los términos técnicos. Trataré de no olvidarlos porque eso de andar muxeando... jejeje. Eso sí, eché de menos una aplicación práctica... ¿o era sólo la base teórica?

Por cierto, agradezco la mención de mi artículo, pero cuando encuentres 'imprecisiones' sería bueno que me las mencionaras para poder corregirlas. ¡Todavía estoy pillo! :P

Enviado por Francotirador el Mié, 14/12/2005 - 13:21.
Imagen de clbustos

jajajaja.
1) Es un poco de teoría, porque cuando hable de los formatos contenedores tendré que hacer referencia a su mayor o menor capacidad para "muxear" distintos tipos de flujos.
2) La práctica vendrá de a poco. Como decía ¿Lewin? "no hay nada más práctico que una buena teoría"
3) Las imprecisiones te las diré cuando me clarifique yo. Lo básico será el no establecer la diferencia entre el formato contenedor y el codec utilizado.

Enviado por clbustos el Mié, 14/12/2005 - 13:35.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato