Documente Academic
Documente Profesional
Documente Cultură
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"
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
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()
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.
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)
}
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:
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:
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)
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("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)
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.
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)
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")
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:
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:
En este caso el fondo se conserva (aunque cambia de color), dejando nicamente la silueta
de Sakura, Hoeeee!!.
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:
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()
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)
menos en las escenas que me gustaban), as que invert la imagen utilizando el filtro Flip
Horizontal
FlipHorizontal()
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)
Noten la cara de felicidad de Sakura, quien quedo muy complacida con el resultado
obtenido:
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:
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)
Y este es el resultado:
Y el resultado obtenido: