viernes, 15 de marzo de 2013

Software Linux: Winff (codificación intermedia para Cinelerra)



Este es un auténtico artículo por encargo, que le debía a mi amigo youtubero Purplemoon64, quien me describió algunos problemas relativos a la reproducción de ciertos formatos de vídeo en Cinelerra. Sinceramente, me siento incapaz de predecir el comportamiento de Cinelerra ante la inmensa variedad de combinaciones de codecs de audio y vídeo que circulan por ahí, de modo que voy a intentar profundizar un poco más en este extraño mundo de la codificación y de paso os enseño otro programa para GNU-Linux: Winff.



Contenedores, codecs y formatos intermedios

Como ya sabéis si seguís la serie de Cinelerra en mi canal, el mundo del vídeo es un auténtico follón. Aunque aparentemente los formatos de vídeo no son tan numerosos, resulta que todos ellos (los famosos MP4, MPEG, MOV, AVI...) no son más que contenedores de codecs. Dicho de otra manera, cada archivo de vídeo, tenga el formato que tenga, contiene "en su interior" dos tipos de informaciones: por un lado la de vídeo, y por otro la de audio. Y con quien tiene problemas Cinelerra es con los codecs, no con los contenedores. Por eso resulta demasiado simplista decir que  Cinelerra "se lleva bien" con MP4, o MOV. De hecho, para complicar aún más las cosas, las diferentes combinaciones de codecs pueden variar su comportamiento con diferentes contenedores, con lo cual ya creo que se explica mi incapacidad para tenerlos todos bajo control.
Si queréis más información podéis pasaros por la wiki del proyecto, aunque desgraciadamente las tablas que contienen las compatibilidades no están completas y no tienen pinta de actualizarse habitualmente (vamos, que desde que tengo memoria siguen igual de incompletas...
De todas formas, aunque cierta combinación de codecs de audio y vídeo, unida a un contenedor que le guste a Cinelerra es el santo grial de cualquier editor de vídeo linuxero, los problemas no han terminado ahí; también tenemos que tener en cuenta el rendimiento del programa con formatos compirmidos. Por poner un ejemplo, a cinelerra le suelen "agradar" los archivos MP4 codificados con mpeg para vídeo y mp3 para audio. En principio esta combinación suele funcionar (no siempre), pero aunque funcione probablemente tengamos problemas de rendimiento. Esto se debe a que el codec mpeg hace muy bien su trabajo. Es decir, la compresión que proporciona este codec hace que la información se tenga que "desempaquetar" en Cinelerra, lo cual consume recursos por un tubo. Si además empezamos a añadir efectos, la cosa se vuelve realmente insufrible, os lo aseguro.
En este estado de cosas, si no estáis tirándoos de los pelos y maldiciéndome por haberos metido en este embrollo de Cinelerra es que tenéis más paciencia que un santón hindú. En premio a vuestra bondad infinita, os dejo la idea que soluciona todas estas cuestiones: los formatos intermedios.
Un formato intermedio es una transcodificación de vídeo que permite transformar el metraje original en un formato que Cinelerra no sólo acepte, sino con el que pueda sentirse ligero. Este formato tiene que reunir dos condiciones: la mínima pérdida posible de calidad y la mínima compresión. En principio lo ideal sería conseguir un formato como el que el propio Cinelerra crea cuando elaboramos una copia master de nuestros proyectos (os recomiendo leeros este otro artículo para entender esto). Desgraciadamente, no lo he conseguido. Pero existe otra alternativa muy interesante: la clave nos la da una página que es un auténtico tesoro para los amantes de Cinelerra: se llama Cinelerra for gradnma (Cinelerra para abuelas) y hace honor a su nombre. Esta web es una biblia para entender los entresijos más complejos de este editor de vídeo de una forma tan asequible que de repente te hace sentir inteligente y todo. Por desgracia, está sólo en inglés, pero las explicaciones se pueden seguir sin dificultad aunque no te manejes bien en el idioma. Y lo que es aún mejor, esta página sí que está viva.
Pues bien, en "Cinelerra para abuelas" nos proporcionan una codificación que soluciona de un plumazo todos nuestros problemas; de hecho, no sólo una: sino dos. Digo más: nos da un montón de codificaciones, aunque la mayoría son variantes de una de ellas, y casi ninguna funciona con el tipo de vídeos que yo utilizo (básicamente, los que escupe Kazam). A continuación os explico cómo instalarlos en el programa que describo en el vídeo, Winff.

MJPEG y DNxHD

Vayamos eliminando cosas: DNxHD es un formato de vídeo rarísimo, que tiene una calidad espectacular y apenas comprime la información. Funciona muy bien en el tema vídeo (no tanto en el audio, o al menos a mi no se me carga en Cinelerra), pero tiene un problema con las resoluciones: le gusta mucho el formato HD (1920x1080 y 25 fps) pero con otros formatos ya no tanto. En la página de las abuelas nos recomiendan consultar esta tabla para comprobar si nuestros formatos van a funcionar con esta codificación. 
El que mola de verdad es MJPEG. O al menos es el que a mi me ha solucionado los problemas que últimamente me estaba dando Kazam (y que podéis ver en el vídeo). MJPEG es un formato bastante peculiar. Admite audio y vídeo, pero con lo que hace cosas especiales es con el vídeo. En general, los formatos actuales comprimen la información visual de los vídeos mediante complejos algoritmos que lo que hacen básicamente es detectar qué píxeles de una imagen se mantienen en la siguiente. De este modo, ese píxel "repetido" se elimina, con el consiguiente ahorro de memoria. Así, los fotogramas con píxles en común funcionan como una unidad, y se intenta aprovechar al máximo la información compartida. Esta fue una idea genial que de hecho dio comienzo a la actual era de vídeos para descargar, compartir, Youtube... verdaderamente una revolución. Pero tiene un problema. Los actuales algoritmos son tan eficientes que Cinelerra suda la gota gorda al descomprimir su información y reconstruir los fotogramas por separado. MJPEG no tiene este problema en absoluto. De hecho, su nombre ya nos da la pista clave la M es de Motion (movimiento) y JPEG... son las típicas fotografías digitales. Efectivamente, MJPEG es el equivalente a dibujar un montón de monigotes en las esquinas de un cuaderno y pasar las hojas a toda velocidad. Consiste en una sucesión de fotos, independientes las unas de las otras.

Instalando los formatos en Winff 

Antes de nada, la instalación de este programa: Winff tiene más años que las pirámides y sobrado reconocimiento, así que está en la mayoría de repositorios de nuestras distros (en Ubuntu está seguro). De modo que utilizad vuestros comandos de consola o usad las maravillosas interfaces de vuestros centros de software para encontrarlo. Si no aparece, en la sección Descargas de su página web tenéis más información.
Una vez instalado el programa, lo ejecutamos. Vamos a proceder a la instalación de los formatos MJPEG y DNxHD que nos habremos descargado de Cinelerra for Grandma. Aunque aquí tenemos que prestar atención: por alguna razón no nos proporcionan un enlace normal para la descarga, sino que tendremos que hacerlo pegando lo siguiente en nuestro terminal:

wget http://www.g-raffa.eu/Cinelerra/HOWTO/Cinelerra4Grandma.wff 
Tened en cuenta que este comando debe ejecutarse en la carpeta de usuario, así como en la imagen:



Tras este peculiar procedimiento (un día va a haber que dedicarle un tuto a wget, es un programa mágico), pasamos a instalar el paquete de presets que nos hemos bajado. En realidad no nos hemos bajado ningún codec, sino las intrucciones para que ffmpeg (el programa que funciona bajo Winff) codifique según los formatos que le hemos ordenado. De modo que, estando en Winff, nos vamos al menú:
Archivo -  importar predeterminados
Y nos aparecerá una ventana de navegación de archivos, donde deberemos localizar el paquete que nos acabamos de descargar.


Cumplimentado este paso, ya tendremos disponible un nuevo grupo de formatos en este completísimo programa que es Winff, llamado Cinelerra Intermediate Formats. El proceso de codificación ya lo habéis visto en el vídeo, así que no me enrollo. Tan sólo voy a añadir algunas cosas que he experimentado al transcodificar con este programa y estos formatos:
  • MJPEG ocupa bastante: un vídeo que pese 100 megas originales probablemente pesará 10 gigas tras codificarse. Es normal, es un formato descomprimido. 
  • MJPEG oscurece y contrasta un poco mis vídeos. Esto puede corregirse con algún plugin de Cinelerra, pero a mi el resultado no me disgusta. 
  • Unido a lo anterior, el oscurecimiento de la imagen conlleva que ciertos defectos de la grabación original resalten más, como el efecto de recorte en los degradados que menciono en el screencast. De nuevo, se puede corregir aclarando un poco el vídeo. 
  • MUY IMPORTANTE: cuando carguéis un vídeo en Cinelerra codificado mediante este formato DEBEIS ESPERAR A QUE CREE UN ÍNDICE. Esto es importantísimo porque si no esperáis y cargáis el video en el timeline antes de que termine de crear dicho índice, no tendréis miniaturas y será imposible editar. El índice se crea bastante rápido, y podéis observar el progreso de la creación en la parte inferior del timeline.