Está en la página 1de 20

Hacer Overlays con plugin de avisynth (Overlay sign)

Sunday, 20. September 2009, 05:42:04


Overlay, Avisynth, Tutorial, Tecnicas
Bueno para comenzar les cuento esta nueva tcnica la adquir tratando de simplificar la
tcnica que ocupaba antes, la cual utiliza trims y lo dems, lo que a veces puede ponerse
muy confuso si es que queremos hacer overlays con mas de un video (Opening, Ending y
Logos), vamos a los pasos que debemos realizar como requerimiento mnimo deben saber
algo bsico sobre avisynth:

1. Primero debemos copiar este cdigo a un bloc de notas o un editor de texto y guardarlo
con el nombre de "Overlay sign.avsi"

function insertsign(clip mainclip, clip overlayclip, int startframe, int


"endframe") {
endframe = default(endframe,startframe+overlayclip.framecount()-1)
endframe = (endframe == 0) ? startframe+overlayclip.framecount()-1 :
endframe
endframe = (endframe >= mainclip.framecount()-1) ? mainclip.framecount()1 : endframe
begin= (startframe == 1) ? mainclip.trim(0,-1) :
mainclip.trim(0,startframe-1)
middle= mainclip.trim(startframe,endframe)
end= (endframe == mainclip.framecount()-1) ? blankclip(mainclip,length=0)
: mainclip.trim(endframe+1,0)
middleoverlay = Overlay(middle, overlayclip,
mask=overlayclip.showalpha())
final = (startframe == 0) ? middleoverlay ++ end : begin ++ middleoverlay
++ end
return final
}

Este archivo lo guardaremos en la carpeta de plugins del avisynth, que por lo general
tiene la siguiente ruta: C:\Program Files\AviSynth 2.5\plugins

2. A continuacin iremos a la creacin de nuestro script de avisynth:

DirectShowSource("C:\Documents and
Settings\Rosario_to_Vampire_Capu2_03_h2647485EA2D_Track1.mkv",
fps=23.976, convertfps=true, audio=false)
Op=avisource("D:\Karaokes\Rosario to Vampire CAPU2 - 03 RGBA2.avi")
insertsign(last, Op[en este caso Op es el nombre del archivo al cual le
queremos hacer la mascar u overlay], [Fotograma de inicio], [Fotograma de
termino])
ConvertToYV12()

Asi quedaria mi script .avs

3. Explicacin: la sintaxis con la que trabaja esta tcnica es bien simple, para hacer la
mascara solo debemos colocar lo siguiente: insertsign (last[este parametro siempre va],
[Aqui colocamos el nombre del video RGBA], [inicio del karaoke o logo que querramos
insertar], [y por ultimo el fotograma de fin del segmento]) asi de simple es y nada de estar
haciendo trims ni cosas por el estilo.

4. Ahora Que pasa si queremos insertar mas vdeos rgba a nuestro capitulo? Bueno esto es
aun mas simple ya que solo debemos agregar otra linea con los mismos parmetros, por
ejemplo:
DirectShowSource("C:\Documents and
Settings\Rosario_to_Vampire_Capu2_03_h2647485EA2D_Track1.mkv",
fps=23.976, convertfps=true, audio=false)
Logo=avisource("D:\Karaokes\Logo Rgba.avi")
Op=avisource("D:\Karaokes\Rosario to Vampire CAPU2 - 03 RGBA2.avi")
Ed=avisource("D:\Karaokes\Rosario to Vampire CAPU2 - Ed RGBA2.avi")
insertsign(last, Op, 0, 2106)
insertsign(last, Logo, 21845, 21989)
insertsign(Last, Ed, 23578, 23860)

Por ultimo les cuento que el plugin "Overlay sign.avsi" tiene muchas funcionalidades
aparte de esta como por ejemplo con un para de parmetros aplicar filtros solo a una parte
del vdeo, insertar imgenes. Aun estoy en proceso de descubrir mas cosas as que se
vendrn mas tutoriales sobre este plugin y sobre otro que pille que lo creo pichu's (el
mismo que hizo el script KrK para AE)aun eso si no trabajo con el, pero apenas avance algo
lo posteo...

AviSynth e imagenes
Friday, March 18, 2011 2:45:50 AM
Videos, AviSynth
De nueva cuenta les traigo otro de mis jugueteos con AviSynth, en esta ocasin
dedicado al uso de imgenes...Bueno, sabemos que los videos no son mas que una rpida
secuencia de imgenes que gracias a una cualidad (o defecto) del ojo, generan en nuestro
cerebro la sensacin de movimiento, pero...mejor lean el post y sabrn a que me refiero.

Imagesplice
Este til Script lo descubr en el foro Doom9, lo utilic un par de veces en el Opening de
los Thundercats, y me permiti reemplazar algunos frames que despus del filtrado de ruido
aun mostraban defectos muy notorios (nada raro si tomamos en cuenta la edad de este
video).

Gracias a la funcion "Guardar imagen como..." de AvsP pude trabajar los frames mas
daados en Photoshop y despus reintegrarlos al video usando Imagesplice.

Se utiliza de la siguiente manera:


DirectShowSource("X:\Ruta del video\Tu video.mp4",audio=false)
o
AVISource("X:\Ruta del video\Tu video.avi",audio=false)#Para los AVI
imagesplice("X:\Ruta de la imagen\Imagen.bmp",1234)

En donde "1234" representa el frame que sera reemplazado por la imagen retocada.
NOTA: El video tiene que estar en formato YV12, de no ser as lo convertimos con el
comando ConvertToYV12, el resultado sera el siguiente:
DirectShowSource("X:\Ruta del video\Tu video.mp4",audio=false)
ConvertToYV12()
imagesplice("X:\Ruta de la imagen\Imagen.bmp",1234)

Para obtener este Script lo nico que tienen que hacer es abrir el block de notas, copiar el
siguiente cdigo y guardarlo como "imagesplice.avsi" en el folder de Plug-Ins de AviSynth.
function imagesplice (clip c, string "filename", int "frameno")
{
frame=imagesource(filename)
frame=frame.selectevery(frame.framecount,0).assumefps(c.framerate).conver
ttoyv12()
c.trim(0,frameno-1)++frame++c.trim(frameno+1,0)
}

Aadir logo al video


Antes que nada una sencilla descripcin de lo que es el Canal Alpha:
Las imgenes que encontramos al navegar por la red se componen de una mezcla de los
colores rojo, verde y azul. Aumentando o reduciendo la intensidad de ellos obtenemos una
gran variedad de colores. Este esquema de color es conocido como RGB.
Pero en algunos casos se agrega a las imgenes una nueva capa conocida como Canal
Alpha que le aade informacin de transparencia. Tomemos por ejemplo la siguiente
imagen, se trata de un archivo PNG de 128 x 128 pixeles.

Aunque no es visible esta imagen cuenta con un Canal Alpha que nos permite ver el color
de fondo del blog a travs del hueco de la letra. Si pudiramos ver este canal el resultado
sera algo como esto:

Y si colocramos esta imagen sobre un fondo entramado obtendramos esto:

Creo que con esto quedo claro lo que es Canal Alpha, ahora continuemos con el tema
principal.
Gracias a AviSynth podemos aadir fcilmente un logo a nuestros videos. Una gran ventaja
de usar este programa es que soporta archivos PNG con Canal Alpha, as que podemos
obtener resultados interesantes sin limitarnos a las aburridas formas cuadradas y
rectangulares.
Para este post us la siguiente imagen:

El script para aadir el logo es el siguiente:


Video=DirectShowSource("X:\Ruta del video\Video.mp4",audio=false)
TuLogo=ImageReader("X:\Ruta de la imagen\LogoAir.png")
Mascara=ImageReader("X:\Ruta de la
imagen\LogoAir.png",pixel_type="RGB32").ShowAlpha(pixel_type="RGB32")
Overlay(Video,TuLogo,mask=Mascara,x=503,y=315)

Podemos ubicar el logo en el sitio deseado ajustando los parmetros X y Y. Aumentando X


el logo se mueve hacia la derecha y Y lo desplaza hacia abajo. AvsP nos facilita mucho las
cosas al mostrar en la parte inferior de la pantalla informacin muy til sobre el video,
incluida la posicin del puntero (en la imagen de abajo pos= 503,315)

En otro ejemplo utilic una imagen que abarca toda la pantalla de video (el archivo PNG

que us tenia 704 x 396 pixeles, pero el que sub al blog es de 550 x 309)

El Script queda as:


Video=DirectShowSource("X:\Ruta del video\Video.mp4",audio=false)
Misuzu=ImageReader("X:\Ruta de la imagen\Misuzu.png")
Mascara=ImageReader("X:\Ruta de la
imagen\Misuzu.png",pixel_type="RGB32").ShowAlpha pixel_type="RGB32")
Overlay(Video,Misuzu,mask=Mascara,x=0,y=0)

Algunos programas como Adobe After Effects permiten exportar los videos con Canal
Alpha (RGBA), se utilizan principalmente para crear efectos especiales (Lasers,
relmpagos, explosiones, etc), pero muchos Fansubs utilizan este programa para trabajar los
Openings y Endings que subtitulan (visiten el blog de Suteki para mayor informacin).
Para el siguiente ejemplo us una sencilla animacin (RGBA) creada en Flash MX (as es,
algunos lo seguimos usando XD) . El Script es el siguiente:
Video=DirectShowSource("X:\Ruta del video\Video.mp4",audio=false)
Misuzu=AVISource("X:\Ruta del video\VideoAlpha.avi")
Mascara=AVISource("X:\Ruta del
video\VideoAlpha.avi").ShowAlpha(pixel_type="RGB32")
Overlay(Video,Misuzu,mask=Mascara,x=0,y=0)

ImageSource
Esta funcin de AviSynth nos permite importar una o mas imgenes y convertirlas en video.
Por ejemplo, si necesitamos un clip que dure 70 frames a 24 fps el Script se vera como
esto:
ImageSource("X:\Ruta de la imagen\Imagen.jpg", end=70, fps=24)

Inspirado en el trailer del juego Clive Barker's Undying (Lo subir en un futuro Post),
comprim un corto video usando 5 imgenes y el siguiente Script:

Negro=ImageSource("X:\Ruta
MinaA=ImageSource("X:\Ruta
MinaB=ImageSource("X:\Ruta
MinaC=ImageSource("X:\Ruta
MinaD=ImageSource("X:\Ruta

de
de
de
de
de

la
la
la
la
la

imagen\Negro.jpg",end=120,fps=30)
imagen\Mina1.jpg",end=120,fps=30)
imagen\Mina2.jpg",end=120,fps=30)
imagen\Mina3.jpg",end=120,fps=30)
imagen\Mina4.jpg",end=150,fps=30)

Dissolve(Negro,MinaA,MinaB,MinaC,MinaD,35).ConvertToYV12().FadeOut(30)

La funcin Dissolve combina 2 o mas videos, el numero que va despus de los clips indica
cuanto durara esta fusin (en este caso 35 frames).

Como alternativa a la imagen en negro, se puede utilizar la funcin BlankClip que crea un
clip de video del tamao, duracin, fps y color que especifiquemos.
Negro=BlankClip(length=120,width=480,height=270,pixel_type="YV12",fps=30,
color=$000000).KillAudio()
MinaA=ImageSource("X:\Ruta de la imagen\Mina1.jpg", end=120,
fps=30).ConvertToYV12()
MinaB=ImageSource("X:\Ruta de la imagen\Mina2.jpg", end=120,
fps=30).ConvertToYV12()
MinaC=ImageSource("X:\Ruta de la imagen\Mina3.jpg", end=120,
fps=30).ConvertToYV12()
MinaD=ImageSource("X:\Ruta de la imagen\Mina4.jpg", end=150,
fps=30).ConvertToYV12().FadeOut(30)
Dissolve(Negro,MinaA,MinaB,MinaC,MinaD,35)

ImageSource tambin nos permite importar una secuencia de imgenes y convertirla en


video.
Suponiendo que tenemos el siguiente grupo de archivos BMP:
Tsu01.bmp
Tsu02.bmp
Tsu03.bmp
Tsu04.bmp
etc...
etc...
etc...
Tsu520.bmp
Tsu521.bmp
Tsu522.bmp
Tsu523.bmp

Usando el siguiente Script:

ImageSource("X:\Ruta de la imagen\Tsu
%02d.bmp",start=11,end=520,fps=23.976,use_DevIL=true)

Obtenemos nuestro video. Noten que se puede especificar desde que imagen de la
secuencia comenzara nuestro clip (as como el final).

Y como olvidar el clsico punto brillante sobre algn detalle del video (una letra, una
sonrisa, el filo de un arma, etc)

Para lograr este efecto utilic 2 imgenes y el siguiente Script.


Normal=ImageSource("X:\Ruta de la imagen\Normal.jpg", end=40, fps=24)
Resplandor=ImageSource(""X:\Ruta de la imagen\Resp.jpg", end=45, fps=24)
Dissolve(Normal,Resplandor,Normal,20)
ConvertToYV12()

Chroma Key en AviSynth

Saturday, May 21, 2011 6:32:58 PM


Videos, AviSynth
Chroma Key o insercin croma es una tcnica cinematogrfica que
consiste en filmar a un actor sobre un fondo azul o verde (debido a que son
colores que no estn presentes en la piel humana... con excepcin de los que
padecen de hipotermia y los afectados por la radiacin gamma XD), que
posteriormente se elimina para realizar un montaje de este personaje sobre un
fondo fijo o un video.

Gracias al Chroma Key, podemos disfrutar de sorprendentes escenas de accin


en ambientes hostiles, vertiginosos vuelos de un Super hroe sobre la ciudad o
ver a un aburrido tipo dando un reportaje extremo sobre el clima, desde un
comodo y seguro estudio de grabacin.

Buscando un poco por la red, encontr un sencillo Script para crear este efecto
en AviSynth, pero antes de que se emocionen debo aclarar que el resultado no
es tan perfecto como el obtenido con programas de edicin profesionales como
Adobe After Effects y similares.
A continuacin comparto con Ustedes los resultados de mis experimentos:
Hace un par de das, mientras trabajaba en el Opening de Sakura "Platina", me
tope con la siguiente imagen....lo primero que me vino a la mente fue "Pantalla
azul" XD.

Cargu este video en AvsP y comenc a jugar con el.


Ya lo he mencionado antes, pero por si acaso este es el primero de mis Post
que leen, AvsP nos muestra el cdigo hexadecimal de un color al colocar el
puntero sobre el, por ejemplo en la siguiente imagen el tono rosado de la cinta
que rodea el cuello de Sakura.

Primero utilic una imagen fija para el fondo (esta) y el siguiente Script:
Platina=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(327,439).ConvertToRGB32()
Fondo=ImageReader("C:\Ruta de la
imagen\Fondo.png",fps=23.976,end=113).ConvertToRGB32()
Sakura=ResetMask(Platina).ColorKeyMask($3C67E6,70)
Layer(Fondo,Sakura)

Un punto a aclarar es que tanto la imagen de fondo como el video deben


convertirse al espacio de color RGB32 utilizando el comando
ConvertToRGB32().
Noten que al fondo le agregue la informacin de frames por segundo
(fps=23.976) y la duracin (end=113), que sern las propiedades del video
final.

ColorKeyMask toma un color y lo convierte en transparente, utilizando el ajuste


"tolerancia" se puede ampliar o reducir el rango de colores que sern afectados
por este filtro. Si elegimos un valor bajo lo mas probable es que no se elimine
totalmente el color del fondo, por ejemplo: ColorKeyMask($3C67E6,10)

Pero un valor alto puede comerse detalles importantes de la imagen:


ColorKeyMask($3C67E6,150)

Al final decid utilizar un valor de tolerancia 70, pero el permetro de la imagen


aun mostraba imperfecciones. Para corregirlas utilic los filtros aWarpSharp2 y
AAA, el primero se encarga de adelgazar los contornos, mientras que el
segundo suaviza los bordes con efecto de diente de sierra (aliasing)
Abro un breve parntesis para explicar el funcionamiento de los filtros
externos:
Normalmente este tipo de filtros se colocan en el folder de plugins de AviSynth
(en mi caso C:\Archivos de programa\AviSynth 2.5\plugins), pero pueden
funcionar desde otro sin problema alguno (el folder de plugins de MeGUI por
ejemplo). Si se trata de archivos dll, antes de utilizarlos en un Script tenemos
que cargarlos utilizando el comando LoadPlugin seguido de la ruta donde se
encuentre el archivo, por ejemplo:
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\aWarpSharp.dll")

Pero en el caso de los Scripts avs como AAA, utilizamos la funcin Import
Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")

AAA requiere de dos filtros dll para funcionar (SangNom.dll y UnFilter.dll), as


que los cargamos utilizando LoadPlugin:
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\SangNom.dll")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\UnFilter.dll")
Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")

El orden no importa, siempre y cuando se carguen antes de aplicarlos (lo


normal es colocarlos antes del video).
Existen otro tipo de archivos con extensin avsi conocidos como AviSynth
Autoload Script, cuando necesitemos aplicar de uno de estos, simplemente los
utilizamos como cualquier filtro interno (Crop, Trim, Spline32, etc), sin
necesidad de cargarlos antes, excepto cuando se guardan en un folder que no
sea el de plugins de AviSynth.
Si lo desean pueden descargar estos filtros dando click en el siguiente botn.

Dos sitios interesantes sobre los filtros externos son AviSynth Filter Collection Y
External filters.
Al final mi Script quedo as:
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\SangNom.dll")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\UnFilter.dll")
Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\aWarpSharp.dll")
Platina=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(327,439).ConvertToRGB32()
Fondo=ImageReader("C:\Ruta de la
imagen\Fondo.png",fps=23.976,end=113).ConvertToRGB32()
Sakura=ResetMask(Platina).ColorKeyMask($3C67E6,70)
Layer(Fondo,Sakura)
ConvertToYV12().aWarpSharp2().AAA()

Noten que cambi el espacio de color a YV12 antes de aplicar los filtros. El
resultado es el siguiente:

Si desean descargar un video de muestra:

Despus de obtener estos resultados utilizando un fondo fijo, lo siguiente fue


probar con uno animado. Eleg otra seccin del mismo video (pero no hay nada
que nos impida utilizar uno diferente, de hecho en un futuro Post lo har), el
Script se mantuvo casi intacto:
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\SangNom.dll")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\UnFilter.dll")
Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\aWarpSharp.dll")
Platina=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(327,439).ConvertToRGB32()
FondoAnimado=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(210,323).ConvertToRGB32()
Sakura=ResetMask(Platina).ColorKeyMask($3C67E6,70)
Layer(FondoAnimado,Sakura)
ConvertToYV12().aWarpSharp2().AAA()

Para descargar la muestra en video:

Continuara en el prximo Post...

Pues aqu estoy nuevamente, continuando con el Pot de Chroma Key en AviSynth, para
decepcin de Natasha quien detesta esta clase de temas.
Mientras jugaba un poco con los Scripts, ademas de la cura para el hipo (XD), descubr que
al agregar el filtro Invert despus de ColorKeyMask se obtiene un resultado muy
interesante.
Imagen del post anterior:

Utilizando el filtro Invert:

En este caso el fondo se conserva (aunque cambia de color), dejando nicamente la silueta
de Sakura, Hoeeee!!.

El Script que utilic fue el siguiente:


Platina=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(327,439).ConvertToRGB32()
FondoAnimado=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(210,323).ConvertToRGB32()
Sakura=ResetMask(Platina).ColorKeyMask($3C67E6,70).invert()
Layer(FondoAnimado,Sakura)

Decid aplicar un segundo paso para reemplazar el fondo amarillo. Utilic la misma imagen
del Post pasado). As quedo mi Script:
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\SangNom.dll")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\UnFilter.dll")
Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")
Platina=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(327,439).ConvertToRGB32()
FondoAnimado=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(210,323).ConvertToRGB32()
FondoFijo=ImageReader("C:\Ruta de la
imagen\Fondo.png",fps=23.976,end=113).ConvertToRGB32()
Sakura=ResetMask(Platina).ColorKeyMask($3C67E6,70).invert()
PrimerPaso=Layer(FondoAnimado,Sakura)
SegundoPaso=ResetMask(PrimerPaso).ColorKeyMask($C39E17,70)
Layer(FondoFijo,SegundoPaso)
ConvertToYV12().AAA()

Al final del Script apliqu el filtro AAA para suavizar los bordes dentados, el resultado fue
el siguiente:

Y el enlace para descargar el video de muestra:

El resultado me record los efectos utilizados en el Opening de Air, as que decid


emularlo.

Como fondo para la silueta tom una escena de cielo de Air, para el fondo general utilic un
fragmento del video Arigatou y la silueta de Sakura es la misma que utilic para este Post y
el pasado (tomada de Platina).
Mi Script qued as:
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\SangNom.dll")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\UnFilter.dll")
Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")
Platina=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(327,439).Spline36Resize(528,396).Con
vertToRGB32()
Air=DirectShowSource("C:\Ruta del
Video\Air.mp4",Audio=false).Tweak(bright=100,cont=1.3).Trim(414,527).ConvertToRGB32()
Arigatou=DirectShowSource("C:\Ruta del
Video\Arigatou.mov",Audio=false).Trim(330,442).FlipHorizontal().ConvertTo
RGB32()
SiluetaDSakura=ResetMask(Platina).ColorKeyMask($3C67E6,72).invert("A")
PrimerPaso=Layer(Air,SiluetaDSakura,x=176).Crop(176,0,0,0)
SegundoPaso=ResetMask(PrimerPaso).ColorKeyMask($C39E17,75)
Layer(Arigatou,SegundoPaso,x=176)
ConvertToYV12()
AAA()

Paso a explicar algunos detalles:


El video de Platina tiene un tamao de 640 x 480 pixeles (4 x 3), as que lo ajuste con
Spline32 para darle la misma altura que los otros videos (704 x 396 ~ 16 x 9), pero
manteniendo la relacin de aspecto 4 x 3:
Spline36Resize(528,396)

Al cielo de Air le baj un poco el brillo utilizando Tweak. Este filtro funciona como los
controles de brillo, contraste y saturacin de las TVs y monitores.
Tweak(bright=-100,cont=1.3)

En el video de Arigatou, Sakura aparece siempre en el lado derecho de la pantalla (por lo

menos en las escenas que me gustaban), as que invert la imagen utilizando el filtro Flip
Horizontal
FlipHorizontal()

Despus de la primer mezcla


Layer(Air,SiluetaDSakura,x=176)

obtuve esto:

Como pueden notar utilic el comando x para mover la silueta, entre mayor es este valor, el
video sobrepuesto se mueve ms a la derecha. El comando y funciona similar, pero mueve
el objeto verticalmente (a mayor valor mas abajo queda el video) . Con ambos comandos se
pueden utilizar nmeros negativos si se requiere mover hacia arriba o a la izquierda el clip
sobrepuesto. En caso de no agregarlos al Script (o utilizar x=0, y=0), los videos se alinean
en la esquina superior izquierda.
La silueta de Sakura quedo con una seccin que no servia para nada, as que la elimine
utilizando Crop (aclaro: elimine la seccin intil, no a Sakura).
Crop(176,0,0,0)

Y despus de la segunda mezcla:


SegundoPaso=ResetMask(PrimerPaso).ColorKeyMask($C39E17,75)
Layer(Arigatou,SegundoPaso,x=176)

Noten la cara de felicidad de Sakura, quien quedo muy complacida con el resultado
obtenido:

Y el enlace para descargar el video de muestra:

Que crees Natasha?, har una tercera parte

Yo tambin estoy feliz por el resultado.

La idea de que utilices los videos publicados en el Blog para tus experimentos, es para que
cualquier persona interesada en el tema pueda reproducirlos y obtener resultados similares.
Editado el 28 Noviembre 2011:
El filtro Invert, se utiliza para invertir los canales de color de un video, por ejemplo el canal
rojo pasa a ser verde y el azul se convierte en amarillo, pero algo genial de este filtro es que
tambin puede invertir el canal Alpha de un video, es decir la zona transparente de ste.
Despus de experimentar un poco con este filtro, not que comet un pequeo error en esta
seccin:
Platina=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(327,439).ConvertToRGB32()
FondoAnimado=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(210,323).ConvertToRGB32()
Sakura=ResetMask(Platina).ColorKeyMask($3C67E6,70).invert()
Layer(FondoAnimado,Sakura)

Cuando utilic el filtro Invert con sus valores por defecto (), no solo obtuve la inversin del
canal Alpha, sino que tambin se invirtieron los canales de color (RGB), es por ese motivo
que el fondo paso de ser azul a amarillo. Un Script mas correcto sera el siguiente:
Platina=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(327,439).ConvertToRGB32()
FondoAnimado=DirectShowSource("C:\Ruta del
Video\Platina.mp4",Audio=False).Trim(210,323).ConvertToRGB32()
Sakura=ResetMask(Platina).ColorKeyMask($3C67E6,70).invert("A")
Layer(FondoAnimado,Sakura)

Con esto se invierte nicamente el canal de transparencia (es decir el fondo que era

transparente vuelve a ser visible y la imagen de Sakura desaparece), dejando intactos los
canales de color.
Posibles usos de este filtro son:
invert() o invert("RGBA") Invierte todos los canales de color y tambin el Alpha
invert("R") Invierte nicamente el canal rojo (Red)
invert("G") Invierte nicamente el canal verde (Green)
invert("B") Invierte nicamente el canal azul (Blue)
invert("A") Invierte nicamente el canal de transparencia (Alpha)
En el caso de la imitacin del Opening de Air, me d cuenta de que mi error fue de gran
ayuda, pues si se invirtiera nicamente el canal Alpha, sera complicado eliminar el fondo
azul de Platina sin borrar secciones del cielo azul de Air.
Una disculpa si este error les caus algn inconveniente.
Continuemos con el tema de Chroma Key en AviSynth, si no lo han hecho, por favor lean el
primer y segundo Post dedicados a conseguir este efecto.
Les comento que estoy estrenando cuenta en Youtube, y a partir de hoy la usare para subir
los videos de muestra.
A trabajar:
Jugueteando con los Scripts de los Post pasados, me ocurri utilizar el filtro Overlay para
agregar una pantalla verde al video antes del Chroma Key (Recomiendo que lean "como
aadir un logo" en este Post antes de continuar).
Utilic esta imagen PNG, y de nueva cuenta los videos de Platina y Air. El Script inicial
qued as:
Sakura=DirectShowSource("C:\RutaDVideo\Platina.mp4",Audio=False).Trim(327
,439)
Flor=ImageReader("C:\RutaDimagen\Flor.png")
Mascara=ImageReader("C:\RutaDimagen\Flor.png",pixel_type="RGB32").ShowAlp
ha(pixel_type="RGB32")
Overlay(Sakura,Flor,mask=Mascara)

Y el resultado:

A continuacin mezcl el video de Sakura con fondo verde y el cielo de Air.


LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\SangNom.dll")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\UnFilter.dll")
Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\aWarpSharp.dll")
Sakura=DirectShowSource("C:\RutaDVideo\Platina.mp4",Audio=False).Trim(327
,439)
Flor=ImageReader("C:\RutaDimagen\Flor.png")
Mascara=ImageReader("C:\RutaDimagen\Flor.png",pixel_type="RGB32").ShowAlp
ha(pixel_type="RGB32")
SakuraMasFlor=Overlay(Sakura,Flor,mask=Mascara).ConvertToRGB32()
Cielo=DirectShowSource("C:\RutaDVideo\Air.mp4",Audio=false).Trim(414,527)
.Tweak(sat=1.7, bright=-80).ConvertToRGB32()
SakuraConPantallaVerde=ResetMask(SakuraMasFlor).ColorKeyMask($00FF00,100)
Layer(Cielo,SakuraConPantallaVerde,x=30,y=-20)
ConvertToYV12()
aWarpSharp2().AAA(Xshrp=30,Yshrp=30)

Paso a explicar algunos detalles:


Como pueden notar apliqu un poco de Tweak al video de Air para oscurecer un poco el
cielo.
Cielo=DirectShowSource("C:\RutaDVideo\Air.mp4",Audio=false).Trim(414,527)
.Tweak(sat=1.7, bright=-80)

Mov el video de Sakura para centrarlo en la pantalla. Recuerden; X mueve el objeto


horizontalmente (entre mayor es el parmetro el video se mueve mas a la derecha) y Y lo
mueve verticalmente (a mayor valor se mueve mas hacia abajo). Se pueden utilizar valores
negativos si es necesario.
Layer(Cielo,SakuraConPantallaVerde,x=30,y=-20)

El Chroma Key de AviSynth no es perfecto, tuve que corregir los defectos con
aWarpSharp2 y AAA. Citando un Post anterior:
El primero se encarga de adelgazar los contornos, mientras que el segundo suaviza los
bordes con efecto de diente de sierra (aliasing)

LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\SangNom.dll")


LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\UnFilter.dll")

Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")


LoadPlugin("C:\Archivos de programa\AviSynth
2.5\plugins\aWarpSharp.dll")...
...ConvertToYV12()
aWarpSharp2().AAA(Xshrp=30,Yshrp=30)

Y este es el resultado:

Lo siguiente fue probar con un video en lugar de la imagen PNG fija:


Us Adobe Flash MX para crear una sencilla animacin de una estrella girando sobre un
fondo verde, el resultado lo salve como AVI con canal Alpha. Si lo desean pueden descargar
este video, pero TOMEN EN CUENTA LO SIGUIENTE: este clip de video no fue pasado
por ningn codec compresor (DivX, XviD, AVC o similares), as que una vez
descomprimido ocupara cerca de 140 MB en su disco duro.
Click en la imagen para descargar el archivo.

El Script es similar al anterior:


LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\SangNom.dll")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\UnFilter.dll")
Import("C:\Archivos de programa\AviSynth 2.5\plugins\AAA.avs")
LoadPlugin("C:\Archivos de programa\AviSynth 2.5\plugins\aWarpSharp.dll")
Sakura=DirectShowSource("C:\RutaDVideo\Platina.mp4",Audio=False).Trim(327
,439)
Estrella=AVISource("C:\RutaDVideo\Estrella.avi")
Mascara=AVISource("C:\RutaDVideo\Estrella.avi").ShowAlpha(pixel_type="RGB
32")
SakuraMasEstrella=Overlay(Sakura,Estrella,mask=Mascara).ConvertToRGB32()
Cielo=DirectShowSource("C:\RutaDVideo\Air.mp4",Audio=false).Trim(414,527)
.Tweak(sat=1.7, bright=-80).ConvertToRGB32()
SakuraConPantallaVerde=ResetMask(SakuraMasEstrella).ColorKeyMask($00FF00,
100)
Layer(Cielo,SakuraConPantallaVerde,x=30,y=-20)
ConvertToYV12()
aWarpSharp2().AAA(Xshrp=30,Yshrp=30)

Y el resultado obtenido:

También podría gustarte