Cine & Video Digital
 
Añadir film grain en VirtualDub [XII-2008]

Introducción: film grain

Las películas que vemos en el cine son una sucesión de fotogramas registrados sobre una soporte físico, la película o film propiamente dicho (film stock en inglés), en el cual ocurren procesos químicos en relación directa a la luz que impacta sobre el mismo al momento de realizar la exposición (es decir cuando la cámara realiza la toma de las escenas).

Básicamente sobre un soporte flexible transparente, film base, se deposita una emulsión (silver halide, compuesto de plata con un halógeno, mezclada con una gelatina) que es sensible a la luz. El primer tipo de base utilizado fue el nitrato de celulosa, sustancia altamente inflamable. Luego se pasó a otros medios más seguros (safety film).

Cuando la luz impacta sobre la emulsión se forman granos minúsculos de plata metálica dándole a la imagen, de una cámara fotográfica o de cine, una textura muy particular: granos esparcidos aleatoriamente.

Este aspecto granoso es intrínseco a todo el material fílmico debido a su naturaleza. Es un aspecto diferencial respecto al material realizado nativamente con equipos digitales. La tecnología digital no usa emulsiones sino lenguaje binario: 0 y 1. Allí no hay grano. Aunque por supuesto se puede generar artificialmente, y ese es el objetivo de este artículo.


Algunas características del grain

Si bien el video nativamente digital no produce grano, una buena digitalización de un fílmico debiera dejar el grano presente. Así en muchas películas editadas en DVD, sobre todo películas de las décadas de los 30,40 y 50´s, es notorio el grano, lo cual le brinda un aspecto característico de cine. La experiencia de ver la película tiene entonces el look & feel del cine.

Por supuesto hay quienes pueden preferir ésto por ser más natural (el video DVD es otro soporte alternativo del fílmico y debe por lo tanto parecerse lo más posible al original); pero también puede haber detractores del grain, que en última instancia no es otra cosa que ruido (noise) en la imagen. Este tipo de usuarios podría preferir una imagen clara y límpida, como la que genera una cámara digital.

En lo personal, pienso que si las películas originalmente tienen grano, su versión digital también lo debería tener. El cine es material fílmico y el DVD es solo un formato temporal, como lo fue el VHS, que busca o debería buscar transmitir el original lo más fielmente posible. El día de mañana el Blu-ray será el estándard y más adelante no lo se. Simplemente el soporte digital asegura la conservación y la no alteración de esos materiales que de otra manera se perderán inexorablemente.

Desde el punto de vista de su aplicación en la generación de video con destino a DVD, el grano hace que el video digital sea menos compresible a la hora de generar MPEG2. Por otro lado añadir artificialmente, en la edición digital, film grain puede hacer (y de hecho hace) mejorar la calidad visual del video en el sentido de que si bien la imagen aparece más "sucia" los artefactos de compresión (especialmente los asociados al banding) son menos notables y en general el video es más realista.

En la jerga la remoción del efecto del film grain noise se conoce como DEGRAIN y la reconstrucción del mismo en un material que lo ha perdido se denomina REGRAIN. En este artículo presento un método fácil y barato (FREE) de conseguir este último efecto con objeto de añadir grano a un película que lo ha perdido ó bien de hacer que un material digital con artefactos o problemas de pixelación pueda disimular los mismos.

El porqué de la ganancia visual en calidad al introducir ruido en una imagen es algo casi antinatural. En general uno busca eliminar ruido y no introducirlo para mejorar algo (sea imagen, sonido o señales en general). Sin embargo la naturaleza estadística y aleatoria del ruido que uno introduce puede ser beneficiosa porque de alguna manera se "promedian" un píxel con los adyacentes. Es todo cuanto puedo decir por ahora, sin haber analizado realmente el fenómeno, y surge de la intuición y, mayoritariamente, de que he pasado muchísimas horas generando pruebas de video con diferentes seteos.

A veces en ciertas ediciones DVD (hechas por grandes compañias) cuando el master o la digitalización no son muy buenas se abusa de este efecto para disimular la aparición de artefactos.

El grano es fácilmente notable en las imágenes mostradas debajo de estas líneas, que están tomadas de un DVD NTSC de la colección remasterizada de Charlie Chan. En particular se trata de la película CHARLIE CHAN IN SHANGAI (1935) con Warner Oland. La figura 1 es una exportación de un frame en formato JPG (calidad 12) y la figura 2 es el mismo frame luego de aplicársele el filtro "smoother" (interno de VirtualDubMOD 1.5.10.1) que reduce el "ruido".

 

Fig.1. Frame DVD, 720x480 a 3818 kbps, original exportado en JPG con calidad máxima (Adobe Photoshop 7)

 

Fig 2. Frame DVD, 720x480 a 3818 kbps, con filtro SMOOTHER de VirtualDubMod y exportado en JPG con calidad máxima (Adobe Photoshop 7)

La idea va a ser tomar un fragmento DivX de un material que no tiene grano, y por ende visualmente tiene el aspecto del segundo frame presentado, e intentar añadirle de forma artificial el film grain mediante un filtro para VirtualDub que añade justamente ruido. Por otro lado podríamos hacer una breve comparativa entre el grano real y el creado artificialmente "limpiando" un fragmento de la película de Charlie Chan para luego añadirle grano.

Asumo que el lector opera y conoce VirtualDub por lo cual no hago demasiado hincapié en cómo cargar filtros o dónde configurar tal o cual cosa. Al final del artículo listo las referencias para descargar el software necesario.


Pruebas y resultados obtenidos

Como siempre el equipo de trabajo consistirá del ubicuo VirtualDub, en su versión 1.6.19. El filtro que añade noise es el MSU NoiseGenerator v 2.1, que puede obtenerse libremente. Es curioso pero el objetivo principal de este filtro, según se comenta en el sitio de los autores, es justamente evaluar el funcionamiento y la capacidad de filtros de remoción de ruido frente a diversos patrones de ruido controlado que pueden ser añadidos a las imágenes.

El video de prueba que vamos a emplear es un fragmento en DivX de la película OTHELLO [1952] con Orson Welles, que se halla en glorioso B&N. Las características del dado DivX son 512x384 a 909 kbps. Selecciono en particular un frame donde puede verse una zona que tendría que ser de un color uniforme, como un cielo despejado, donde es más notoria la presencia del grano y también (en un DivX con fuerte compresión) la del banding.

Fig 3. Frame DivX 512x384 a 909 kbps, exportado en JPG con calidad máxima (12)

 

Fig 4. Frame Divx 512x384 a 909 kbps, con MSU NoiseGenerator aplicado y exportado en JPG.

El setting del filtro utilizado es muy sencillo, pero se presenta en una captura en la figura 5. Las barras de dezplazamiento que controlan los parámetros Cr strength y Cb strength no son utilizadas (se dejan en 0) porque añaden efectos (psicodélicos) de colores que no interesan aquí en un material B&N como el de esta película.

Fig 5. Configuración del MSU NoiseGenerator para producir el efecto film grain mostrado en los frames superiores.

 

En un frame como el mostrado en la figura 4 ya se vislumbra que en esa zona se producirá banding si generamos un DVD de este material y lo vemos en un TV. La experiencia en esos asuntos me dice que así sucede y es esperable y entendible que así sea dado que el DivX es un formato altamente compreso. En un monitor ó TV de 14´´ va a responder bien, pero no podrá ocultar estos defectos al llevarse a mayores dispositivos, como un TV de 29´´.

La figura 4 muestra el resultado de la aplicación del filtro. Todo se ve más sucio y la distribución de estos "grumos" es dinámica en el sentido de que evolucionan temporalmente: no se quedan en la misma posición. Esto contribuye, o al menos así lo imagino, a que no se formen grupos de pixels con iguales valores de color, que resultan en última instancia en los halos del banding.

Si la cámara en la película queda en posición fija tomando la torre y el almenar de las figuras 3 y 4, los puntos de grano (noise) que se generan en cada frame irán cambiando brindando un (en mi opinión) agradable look de fílmico. También es cierto que los detalles en general quedan algo más difusos con lo cual podría ser recomendable aplicar luego de este filtro otro que incremente la nitidez (como por ejemplo uno de los tantos filtros de SHARP disponibles para VirtualDub).

Otro tema a considerar es el tamaño final de los frames exportados al convertir a MPEG2. Si el frame original es de 512x384, como es el caso de OTHELLO, convendría primeramente hacer un RESIZE a 768x576 por ejemplo (si vamos a generar video PAL, o bien 640x480 si vamos a generar video NTSC) y recién después de ello aplicar el MSU NoiseGenerator. Experimentalmente he podido comprobar que hacer un RESIZE luego de aplicar el filtro tiene como efecto que los granos generados tiendan a suavizarse disminuyendo o incluso perdiéndose el efecto buscado. Cualquier operación de cambio de tamaño posterior a la aplicación del ruido MSU, que ocurra en VirtualDub ó en el programa que utilicemos para generar MPEG2 parece contribuir a suavizar el grano.

También puede verse que el tiempo de proceso de un video al cual se le aplica este filtro se incrementa el doble respecto de el mismo video procesado sin el mismo. Esto está relacionado con el filtro en sí, pero más importante, con el hecho de que le complicamos el trabajo al códec porque es más dificil comprimir píxels diferentes que varían dinámicamente que píxels permaneciendo en un único valor. Por supuesto no se puede ganar en todo y en este caso primamos calidad visual sobre velocidad de proceso.

Finalmente opté por aplicar el mismo seteo a un fragmento de CHARLIE CHAN que hubiese sido tratado con el smoother de VirtualDub. En particular el frame de la figura 2, que había perdido el grano casi totalmente, lució como se muestra en la figura 6. Una comparación a simple vista no muestra ningún cambio sustancial que distinga uno de otro tipo de grano. Pero un examen ampliado exhibe una diferencia: el grano que uno añade con el filtro MSU es más fino y está en todas partes (observar que en la figura 5 está chequeada la opción equidistributed).

Fig 6. Resultado de aplicar el MSU NoiseGenerator sobre el frame de la figura 2.

La figura 7 compara los dos tipos de grano: el natural y el artificialmente añadido. Por supuesto cuando decimos natural me refiero al que viene con el MPEG del DVD dado que no puedo distinguir si el editor original de la película no recuperó el grano digitalmente o si la remasterización lo hizo.

Fig. 7. Comparativa en detalle de los frames correspondientes a la figura 1 con grano natural (arriba) y la figura 6, con grano incorporado merced al filtro MSU (abajo).

Otro detalle interesante observable es que en la figura 7 (inferior) daría la impresión de que son menos notables los bloques MPEG, sobre todo en el mentón y la nariz del caballero. El veredicto final, a mi entender, debería realizarse en un TV, aparato para el cual está pensado este tipo de materiales.


Conclusiones

Hasta la fecha este parece ser el método mas eficiente de añadir grano que he encontrado. Otra opción es, por supuesto, comprar el filtro que vende COMPRESION.RU, pero queremos mantener las cosas tan económicas como sea posible. El MPEG2 generado con esta técnica presenta una notable reducción de problemas de banding si el material original que utilizamos como fuente, DivX o MPG, no tiene artefactos demasiado notorios. Asimismo tiene, según mi apreciación un look más fílmico.

Para toda la información aquí presentada debe tenerse en cuenta que estamos mostrando pruebas estáticas en el sentido de que exhaminamos simples frames antes y después de un dado proceso. Para definir el modo de trabajar se debería tener en cuenta la fluidez del video resultante, lo cual no estamos evaluando aquí, y la calidad visual de las escenas con movimiento, por ejemplo, que es un lugar donde se exige al códec un trabajo más duro y donde pueden tener lugar más fácilmente la producción de macrobloques o artefactos.

Asimismo, cada material es único en el sentido de que no hay en general un setting adecuado para todos (un único seteo universal); cada uno debe ser configurado de modo particular y los parámetros utilizados pueden cambiar. Es lógico: Charlie Chan no es Othello!


Fuentes

COMPRESION PROJECT - Desde aquí podemos conseguir el MSU NoiseGenerator. Más precisamente en la sección de Video filtering and compression by MSU Group

Ultima actualización: 31-Dic-2008