Una vez alineada la película y detectado que vista se corresponde con la versión 2D, viene la parte más complicada, la elección de los parámetros. Esta constituye la parte fundamental del proceso, ya que de aquí se va a obtener el vídeo con los pares de vistas por fotograma. Es el momento de emplear Avisynth y VirtualDub, junto con el script de Tony Ash.

El script de Tony Ash viene en dos ficheros: uno con las variables o parámetros (XX-DeAna.avs) y otro con el código (AnaExtract.avs). Esto permite tener varias versiones, cambiando las XX del fichero de parámetros por números de versión u otro nombre.

La primera parte de los parámetros se refiere a los ficheros a emplear

# Setup our input files
anaglyphName = “test3d.mkv” # Anaglyph video
PureColName = “test2d.mp4” # Video with color info (either Anaglyph or 2D)
monoName = “test2d.mp4” # Possible 2D video for one eye, if not set to “nothing”
SoundName = “test2d.mp4” # Video with the sound track we want

Es muy intuitivo a que se corresponde cada cosa. Comentar simplemente que SoundName no se va a emplear, ya que la inclusión del audio será lo último que se haga, pero no con el script, ya que el audio habrá que sincronizarlo. Los más importantes, por que marcarán la forma de trabajar, son: PureColName y monoName.

monoName se refiere al nombre del fichero donde tenemos la versión 2D, únicamente se debe usar si se va a sustituir una de las dos vistas por la versión 2D. Esto último es lo normal, ya que se ahorra la mitad de tiempo, pero no es imprescindible hacerlo así. Por ejemplo, se pueden utilizar las vistas originales del vídeo anaglífico para conseguir que ambas tengan una calidad similar. No obstante conviene advertir que la pérdida de calidad de las imágenes se produce en el proceso de colorear los vídeos, ya que la información del color puede ser algo errática y producir pinceladas difuminadas muy gruesas en algunas zonas (obteniendo un efecto de imagen borrosa, cuando en realidad la imagen es correcta pero lo que la emborrona es el color). Existen unos parámetros que controlan el emborronamiento del color.

PureColName es el nombre del vídeo del cual se saca la información del color, normalmente la versión 2D. Es obligatorio usar este parámetro, ya sea con la versión 2D o el vídeo anaglífico, pues en la extracción de las vistas se suprime el color y únicamente se utilizan tonos de grises, añadiéndoles el color posteriormente. No es recomendable utilizar el video anaglífico como fuente de información del color, ya que esto provocaría la aparición de sombras con los colores empleados en el sistema de gafas. La versión 2D si únicamente se va a utilizar como fuente de color, y no para sustituir a una de las vistas, no tiene porque ser necesariamente de las mismas dimensiones del vídeo anaglífico, aunque si debe estar proporcionalmente alineada con él. El uso de un vídeo 2D de dimensiones inferiores a la versión anaglífica podría, en algunos casos, mejorar el emborronamiento del color.

El parámetro inputFormat se refiere al tipo de anáglifo, que colores usa: rojo y azul (RC) o verde y rosa (GM). También hay que tener en cuenta que posición ocupan esos colores en las gafas, por ejemplo, lo normal es que en la lente izquierda (cuando las tengamos puestas) estén el color rojo o el verde, pero podría ser al revés. Esto último se indica con el parámetro swapAnaglyph: Yes indica que el rojo o el verde están en la lente derecha, No indica que están a la izquierda (que es el estándar).

Si se va a sustituir una de las vistas estereoscópicas del vídeo anaglífico por la versión 2D, hay que indicarle al script si se va a sustituir la vista derecha o la izquierda. En toda película estereoscópica se cumple siempre que la versión 2D se corresponde con una de las vistas y solo una, es decir, que siempre va a ser la misma vista durante toda la película. Esto se le indica con el parámetro isMono, sus posibles valores son: monoRight se sustituye la vista derecha, monoLeft se sustituye la vista izquierda y monoNone que indica que no se va a hacer ninguna sustitución. Si se usa monoLeft o monoRight es obligatorio usar el parámetro monoName con el nombre de un fichero válido, si no hay sustitución monoName debe fijarse a nothing. En caso de que monoName no se haya fijado a un valor correcto entonces el script dará un error en tiempo de ejecución.

El parámetro outputFormat se refiere al tipo de 3D de salida: SBS o TAB (arriba y abajo). Hay que tener en cuenta que cuando se habla de SBS o TAB se refiere a los conceptos originales y no a lo que se entiende actualmente. Hoy en día se llama alegremente SBS a lo que en realidad es un Half SBS y lo mismo para el formato TAB. Por lo tanto el programa maneja las definiciones de la escuela antigua, donde el SBS ocupa el doble de anchura y el TAB el doble de altura. Si se quiere lograr un SBS o un TAB compatible con las TV 3D actuales, habrá que redimensionar el vídeo estableciendo el valor del parámetro outputResize a Yes y fijar las dimensiones correctas en los parámetros outputWidth (anchura) y outputHeight (altura) en pixeles. Además, outputFormat indica la fase estereoscópica. El estándar para SBS es que la imagen izquierda esté a la izquierda SBS_Left_First y en el TAB que la imagen izquierda esté arriba TB_Left_Top.

En el caso de la película Vamos A La Luna como queremos que sea un Half SBS compatible con las TV 3D habrá que poner lo siguiente:

isMono = “monoRight”
swapAnaglyph = “No”
outputFormat = “SBS_Left_First”
outputResize = “Yes”
outputWidth = 1920
outputHeight = 1080

El sistema anaglífico (aquel que usa gafas de colores para ver películas en 3D) no es muy bueno en cuanto a separación de la vista de cada ojo, ya que los colores varían según la luz de proyección y la distancia a que estemos de la pantalla. Así pues es muy difícil que se logre una coincidencia perfecta entre el color proyectado y el usado en las gafas; esto hace que a veces un ojo perciba resto de la imagen del otro, produciéndose un cruce en la comunicación o crosstalk, generando una doble imagen o ghosting con zonas correspondientes a la visión del otro ojo, que se verán en el color de filtrado correspondiente. La lente izquierda de las gafas emplea un filtro rojo que impide que el ojo izquierdo vea las imágenes de tonos rojizos (correspondientes a la visión estereoscópica derecha). Lo mismo hace la lente azul derecha con las imágenes de la vista estereoscópica izquierda, que se muestran en tonos azules.

El filtrado digital por colores es más preciso que el óptico empleado en las gafas, no obstante también presenta fallos de filtrado y los mismos problemas que en una proyección anaglífica. Además, el filtrado por colores altera el color verdadero de la fotografía, llegando en casos extremos a parecer que se está viendo casi una película en blanco y negro, o con muy pocos colores. Es por esto que el script trabaja con tonos de blanco y grises, añadiéndole después el color a partir del vídeo 2D. Pero para que sean colores y no una fotografía se reduce la imagen en un porcentaje horizontal y vertical, para luego devolverla a su tamaño original. De esta manera se pierde el detalle, pero no el color; lo que se superpone encima del video en blanco y negro son los colores y no una nueva fotografía. Esto es lo que indican los parámetros decimateHoriz (reducción de la escala horizontal) y decimateVert (reducción de la escala vertical), su valor se expresa en porcentaje, si valen 100 significa que no se reduce la imagen, siendo su tamaño el 100%. Un valor de 50 indica una reducción del 50%. Es preferible usar valores bajos, ya que aunque con un valor de 100 se tendría una foto exacta de la película 2D que seguramente funcionaria muy bien para una de las vistas, en la otra podría producir manchas erráticas de colores debido a la diferencia de paralaje de los objetos (en cada una de las vistas los objetos están en diferente posición y por lo tanto los colores se pintarían fuera de los objetos). Para evitar esa situación se reduce la imagen para obtener unos colores con una posición más amplia.

Ejemplos de cómo afecta el parámetro decimateHoriz y decimateVert

colores poco definidos

decimateHoriz = 1.7 y decímateVert = 6.0

colores muy definidos

decimateHoriz = 8.0 y decimateVert = 3.0

Si los vídeos originales son de baja calidad, por ejemplo DVD, puede producirse alguna pixelización o ruido en la imagen. Para evitarlo se puede difuminar las imágenes, eso se consigue poniendo un valor mayor que 1 para blurLeft si se quiere difuminar la vista izquierda o blurRight para la derecha. Dejándolos en 1 la imagen no se difumina. Como se va a trabajar con vídeos en alta definición, ambos valores estarán en 1.

Como ya se ha dicho, es posible que se produzca algo de crosstalk (que se cuele parte de la otra vista). Para evitarlo lo que se hace es restar la vista que se cuela de la imagen obtenida al aplicar el filtro digital de colores, como este ghosting (doble imagen) puede ser más o menos fuerte, se indicará con un porcentaje entre 100 y -100, donde 0 indica que no es necesario restar la otra vista, ya que no se cuela. leakCorrectL indica el porcentaje necesario para corregir la vista izquierda cuando se cuela parte de la imagen derecha. leakCorrectR indica el porcentaje de la imagen izquierda que hay que restar a la vista resultante derecha para corregirla.

Los valores leakCorrect mal aplicados pueden producir sombras o una imagen difuminada en las zonas no comunes a ambas vistas. Precisamente el script de Tony Ash tiene un pequeño error que puede dar este tipo de problemas si no se corrige. Básicamente el error es utilizar el vídeo de la versión 2D, en vez del vídeo correspondiente a la versión anaglífica (que es el que se cuela y no la versión 2D). A no ser que se corrija, para lo único que valdrá el parámetro leakCorrectL o leakCorrectR es para que la imagen se vuelva más clara u oscura. De hecho, si al colarse parte de la imagen del otro ojo se forma doble imagen, al aplicar leakCorrect se producirá una tercera imagen que se notará muchísimo.

Los cambios que hay que hacer al script de Tony Ash, en el fichero AnaExtract.avs, son:

  1. Almacenar la vista derecha extraída del vídeo anaglífico en la variable vidRO. Primero se convierte a RGB, luego se filtra por color y se pasa a escala de grises (siguiendo las mismas directivas que el resto del código, excepto que se hará sobre el vídeo anaglífico en vez de la versión 2D).

    vidRO = ConvertToRGB(vidOrig)
    vidRO = MergeRGB(vidRO.ShowGreen(“YV12”), vidRO.ShowGreen(“YV12”), vidRO.ShowGreen(“YV12”))
    vidRO = Greyscale(vidRO)

  2. Una vez obtenida la vista derecha del vídeo anaglífico en escala de grises, se utilizará vidRO en vez de vidR (que sería la versión 2D) en el trozo de código que suprime los restos de la vista derecha que se cuelan en la vista izquierda.

    vidL = Overlay(vidL, vidRO, mode=”subtract”, opacity=(leakCorrectL / 100.0))
    vidL = Levels(vidL, 0, 1.0, Int(255 * (1.0 – (leakCorrectL / 100.0))), 0, 255, coring=false)

Y con eso ya se suprimirán los errores de filtrado. Hay que tener en cuenta que esta función puede cargarse trozos de imagen indebidamente, perdiendo detalle, por lo que hay que afinar el ajuste buscando un equilibrio entre la doble imagen y la definición.

Como ejemplo de lo anterior, aquí tenemos un fotograma de la versión 3 de Vamos A La Luna, creada por el script de Tony Ash con el código de supresión de la doble imagen original, sin corregir. Como se ve, aunque los matices de color y brillo son muy similares en ambas vistas, la fuerte doble imagen creada por el error del script desluce todo el efecto.

con doble imagen

Script no corregido

Aquí el mismo fotograma, pero en la versión 4, creada a partir del script modificado para suprimir de forma efectiva las dobles imágenes. La libélula fantasma de la vista izquierda prácticamente ha desaparecido, aunque con un pequeño efecto colateral de pérdida de matiz de color. Esta doble imagen de la libélula es una de las más difíciles de suprimir de toda la película.

vamosalalunav4

Script corregido

Los últimos parámetros se refieren al brillo, contraste y saturación de cada vista. Si se va a sustituir una de las vistas por la versión 2D, solo se podrá modificar las propiedades de la otra vista, ya que la sustituida las coge de la versión 2D, siendo inmodificables. Los parámetros son: tweakBrightX (brillo), tweakContX (contraste) y tweakSatX (saturación); sustituyendo X por una R para la vista derecha, o una L para la izquierda.

Brillo es la cantidad de luminosidad que se le añade o quita a la que tiene cada pixel que forma la imagen, es la misma cantidad para todos los pixeles. Si este valor es muy grande puede afectar al contraste. Es un valor entero que puede ser positivo para añadir o negativo para quitar.

Contraste es un valor real con una o dos cifra decimales que limita el número de tonalidades o colores, haciendo fácil o no diferenciar entre ellos. Una imagen muy contrastada tiene un elevado valor de matices de colores, mientras que una poca contrastada prácticamente no hay diferencia de tonalidades. Un valor de 1.0 significa que no hay ajuste de contraste. Un contraste poco fuerte puede oscurecer la imagen al tener muy pocos matices de colores.

Saturación es el grado de fuerza o de pureza de un color. Es un valor real con una o dos cifras decimales. Un valor de 1.0 significa que no hay alteración de la pureza del color. Un color demasiado fuerte puede afectar al contraste al producir matices de colores agresivos y poco diferenciados.

Sobre un mismo fotograma se han aplicado distintos valores a los parámetros de brillo, contraste, saturación y supresión de doble imagen. Como estos valores se han aplicado sobre el script original de Tony Ash sin modificación ninguna, se pueden observar fuertes dobles imágenes, como por ejemplo, el de la pieza color crema que está en el suelo.

ajuste brillante

Más brillante

ajuste poco brillante

Más oscuro

mejor ajuste

Más ajustado

La extracción de las vistas estereoscópicas de un film anaglífico implica un proceso de prueba y error en el que hay que ir probando diferentes combinaciones de valores de estos parámetros hasta alcanzar un resultado óptimo. No obstante es inevitable que una de las dos imágenes quede peor que la otra, dada la naturaleza del filtrado por colores, una vista quedará más oscura que la otra y el patrón real de los colores se perderá, siendo muy difícil de recuperar el color rojo. Además, en la reconstrucción del color es inevitable que algunos colores estén superpuestos fuera de sitio (debido a la diferencia de paralaje de ambas vistas). De este proceso hablare en la siguiente parte de esta publicación.

[ Historia | Alineación | Proceso (proximamente) ]