Vous êtes sur la page 1sur 12

Gua Bsica De Avisynth

Habiendo publicado el tutorial de encodeo con el XVID4PSP me puse a investigar un


poquito y les reun cierta informacin que les ser de ayuda para darle soporte al tema del
encodeo mediante el uso del Avisynth, un programa que es utilizado por el MeGUI,
XVID4PSP, CLI, etc. Con l podemos aplicarle filtros a los videos para poder cambiar la
resolucin de la pantalla, cortar el video y modificar o incluso mejorar la calidad del
mismo.

Introduccin

Avisynth es un programa libre y gratuito destinado a realizar frameserver. Su finalidad es la


decodificacin de casi cualquier formato existente y la posterior aplicacin de filtros, de los
cuales incluye una enorme cantidad internos y posibilidad de utilizar externos; siendo este
proceso realizado al vuelo, los frames descomprimidos y ya editados deben ser enviados
a un programa codificador para as ser comprimidos nuevamente a un formato adecuado,
avisynth no se ocupa de esta ltima tarea, siendo nicamente un programa destinado a
frameserver. Cabe aclarar que no posee decodificadores/demultiplexadores propios, utiliza
los instalados en el sistema, as que de todas formas habr que poseer los decoders y
splitters necesarios.
El programa se configura enteramente desde un archivo de texto sin formato, tambin
llamado script, el cual puede ser creado con el notepad o similares, y debe ser guardado
con extensin AVS. En dicho texto se deben indicar los parmetros de decodificacin y que
filtros se aplicaran.
Durante la instalacin se les preguntara si desean instalar algunos extras, como por ejemplo
la opcin de asociar a Avisynth los archivos de extensin AVS (Associate AVS with
Notepad), recomendable activarla para as identificar facilmente los script. Y tambin
Add Avisynth Script to new items men, que les permite acceder a ClickDerecho-
>Nuevo->AviSynth Script para as crear ya automticamente un archivo con extensin
AVS.
Una vez tienen ya el AVS deben abrirlo con el programa que usen para codificar como si
de un archivo de video se tratara, Avisynth se ocupa del resto.

Qu es AviSynth?

Avisynth es una poderosa herramienta de post-produccin de vdeo. Proporciona formas


ilimitadas de edicin y procesamiento de vdeos. AviSynth trabaja como un frameserver,
proporcionando edicin instantnea sin la necesidad de ficheros temporales.

AviSynth por s mismo no proporciona una interfaz grfica (GUI) pero en vez de eso, usa
un sistema de scripting que permite edicin no linear avanzada. Mientras esto puede
parecer tedioso a primera vista, es extraordinariamente poderoso y es una forma muy buena
para manejar proyectos precisa, consistente, y reproduciblemente. Como los scripts basados
en texto son comprensibles, los proyectos estn inherentemente autodocumentados. El
lenguaje de scripting es poderoso pero simple, y filtros complejos pueden crearse a partir de
operaciones bsicas, para desarrollar una sofisticada paleta de efectos tiles y nicos.

Carga de ArchivosEmpecemos con los scripts de AviSynth ms bsicos:

AviSource(c:\carpeta\video.avi)

Para cargar un archivo AVI. Entre las comillas se indica la ruta completa al archivo, aunque
sta se puede obviar (slo se pone el nombre) si el fichero AVS est en la misma carpeta
que dicho archivo.

DirectShowSource(c:\carpeta\video.mp4, audio=false, fps=23.976, convertfps=true)

Para poder cargar otros formatos que no sean AVI se utiliza esta lnea, que hace uso del
DirectShow y as permite demultiplexar/decodificar todo formato que posea un CODEC
directshow adecuado instalado en el sistema, as como tambin hace falta el splitter
correspondiente, como en el caso del formato MP4 del ejemplo, donde es necesario el Haali
Media Splitter.

Especificar los FPS del video de origen slo es necesario en ciertos casos de decoders
directshow que fallan en informarlo, como cuando se trata de achivos ASF.

Si desean slo cargar el video, pueden agregar audio=false a la linea, quedando


video.mp4, audio=false), y viceversa con video=false.

Nota: es recomendable poner siempre esta lnea cundo se hace el uso del directshow:
,audio=false, fps=119.88, convertfps=true). sto para evitar problemas con raws de fps
variable, es decir una raw de VFR.

Introduccin a los Filtros

Para tratar y editar un video, es necesaria la inclusin de los filtros, que son archivos .dll
que nos sirven para eliminar ruido, cortar bordes, mejorar el color, etc.

Para cagar los filtros que no vienen incluidos con Avisynth se utiliza Loadplugin(ruta
donde se encuentra el filtro)

Ejemplo:

LoadPlugin(C:\plugins\Vsfilter.dll)

Esto debe colocarse antes de la carga del archivo, quedando de la siguiente manera:

LoadPlugin(C:\plugins\Vsfilter.dll)
DirectShowSource(c:\Carpera\video.mp4)
Nota: Filtros internos no necesitan ser llamados al comienzo del script avs.

FILTROS

Filtrtos Internos

Debajo del nombre del filtro vern los formatos de color con los que dicho filtro puede
trabajar. Llegado el caso en que su video est en un formato no soportado por el filtro,
pueden convertirlo usando el filtro ConvertToXXX, explicado ms adelante.

Resize
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]

El primero que trataremos es quizs el ms utilizado en la recompresin de videos, se trata


del filtro Resize; avisynth nos ofrece unas cuantas variantes, donde las ms conocidas y
usadas son Bilinear, Bicubic y Lanczos, aunque se tratara de explicar en detalle todas las
presentes.Este filtro se usa para modificar la resolucin del video, para as estirarlo o
comprimirlo (espacialmente hablando) lo necesario hasta alcanzar la resolucin adecuada.

Invocando los filtros de resize:

BilinearResize(ancho,altura)
BicubicResize(ancho,altura,b,c)
LanczosResize(ancho,altura)
Lanczos4Resize(ancho,altura)
GaussResize(ancho,altura,p)
BlackmanResize(ancho,altura)
PointResize(ancho,altura)
SplineXXResize(ancho,altura) , donde XX puede ser 16, 36 o 64

El ancho y altura deben indicarse con valores enteros, dado que la nidad ms chica posible
es el pixel.

Explicacin Detallada de cada variante:

Bilinear: tiende a suavizar la imagen, esto significa que es el que menos detalle deja pasar
al redimensionar, as que es adecuado para cuando usen bitrates bajos, y/o cuando se reduce
la resolucin.

Bicubic: es similar en funcionamiento al anterior, pero gracias a mejores algoritmos logra


procesar un mayor nivel de detalle y por ende es mejor para cuando se aumenta la
resolucin, ya que se logra una imagen ms ntida, pero slo es recomendable cuando habr
suficiente bitrate como para codificar dicho detalle extra, sino puede ser ms conveniente el
Bilinear si no quieren que la calidad caiga en picada al comprimir. Puede ser personalizado
manualmente mediante los valores b y c que pueden ver en la sintaxis de ms arriba.
Estos parmetros son llamados blurring y ringing respectivamente; el blurring sirve para
quitar nitidez, agregando un efecto borroso y as difuminando el detalle, puede servir
para evitar la aparicin de macrobloques al comprimir a muy bajos bitrates; mientras que el
ringing hace todo lo contrario, a mayores valores ms fino ser el filtro y ms detalle dejar
pasar. Con b=0 y c=0.75 el filtro es idntico al presente en VirtualDub, VirtualDub`s
Precise Bicubic. Un valor normal sera b=0 y c=0.5 para as lograr una importante
ganancia de detalle, valores mayores a 0.6 pueden producir ruido dado que se estara
generando ms detalle del que existe, aunque claro depende de la nitidez del video de
origen, si lo amerita entonces pueden aumentar el valor de c.

Lanczos: permite alcanzar an ms detalle y con mejor calidad que el Bicubic, slo
recomendable para altos bitrates. Sirve como alternativa al Bicubic con valores de c entre
0,6 y 0,75, slo que logra una calidad superior en estos valores (menos artifacts).

Lanczos4: es una abreviacin a LanczosResize(taps=4). (Desarrollo pendiente).

BlackMan: sta es una modificacin del Lanczos que permite lograr menos artifacts
(errores) con valores de taps altos.

Gauss: filtro basado en el algoritmo de Gauss. El parmetro p ajusta la nitidez, desde 0


(menor detalle, mas borroso) hasta 100 (mayor detalle, ms fino). Su velocidad es similar al
Lanczos4.

Point: es el filtro para resize ms simple que existe. Su uso no es para nada recomendable a
no ser que se quiera disminuir la calidad del vdeo adrede. Sus resultados suelen contener
mucho bloque.

SplineXX: este filtro tiene como objetivo alcanzar un mximo nivel de detalle, con menos
artifacts a raz del mismo que si se usara Lanczos. XX puede valor 16, 36 y 64, cuanto
mayor este valor mayor nitidez de lograra.

Desde la versin 2.56 de avisynth existe la posibilidad de cortar la imagen desde el mismo
filtro de resize, como con el filtro Crop. Si se utiliza, en el proceso primero se corta y luego
se aplica el resize.

Usar esta lnea:


Crop(10, 10, 200, 300).BilinearResize(100, 150)

Seria casi lo mismo que usar la siguiente:


BilinearResize(100, 150, 10, 10, 200, 300)
Este mtodo es conveniente usarlo cuando quieren cortar parte de la imagen previa a su
reescalado. Usndolo se logra mayor calidad en el reescalado de los bordes. Pero para
cortar bandas negras o artifacts es mejor usar el filtro Crop.

AddBorders
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]Sintaxis:
AddBorders(v,x,y,z,color)

En ciertos casos no es posible modificar el tamao (espacial) de un vdeo con slo


redimensionar dado que las resoluciones que se deben obtener son fijas para cumplir algn
estndar, entonces con slo dimensionar se daara el aspect ratio (AR) del mismo y ste se
vera alargado o achatado; as que para llegar a la resolucin definitiva hace falta completar
los pixeles faltantes con bandas de un color solido, para ello se usa el filtro AddBorders;
este filtro agrega una banda de pixeles de algn color de altura configurable por separado
en cada margen.Vean la sintaxis, cada una de esas cuatro letras representan la cantidad de
pixeles (valores enteros) que ocuparan las bandas contando desde cada uno de los cuatro
mrgenes. Las letras siguen el siguiente orden: x: superior; z: inferior; v: izquierda;
y: derecha. Lo ms comn es agregar bandas arriba y abajo, pero tambin se agregan en
los cuatro lados por ejemplo cuando se desea solucionar el efecto overscan.

El parmetro color permite elegir un color distinto del negro (default, si no se especifica
nada); este color lo deben indicar en cdigo hexadecimal. Aqu pueden ver una lista con los
cdigos y colores soportados.

Ejemplo:
AddBorders(0,64,0,64,$00FFFF)

Esta lnea agrega bandas de 64 pixeles tanto arriba como abajo de color Cyan. De seguro
quede horrible pero es un ejemplo nada ms .

Crop
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]Sintaxis:
Crop(x,y,-z,-k) Crop(izquierda,arriba,-derecha,-abajo)

Debe tener los - o tirar error de mod4.

Este filtro es muy simple de implementar, sirve para cortar cierta cantidad de pixeles de los
lados de la imagen. Se debe indicar la cantidad a cortar de cada lado, donde x es
izquierda, y es arriba, z es derecha y k es abajo.

Una variante del mismo filtro es la siguiente:


CropBottom(j)
Remueve j lneas de la parte inferior de la imagen, especialmente til para eliminar la
distorsin inferior de un video capturado de un VHS.

Blur / Sharpen
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]

El filtro Blur tiene como objetivo distorsionar ligeramente la imagen suavizando los bordes
de los objetos en el video (detalle), esto puede servir para disimular la aparicin de bloques
o pixelado, o tambin para facilitar la codificacin a muy bajos bitrates sin causar feos
artifacts en bordes o sectores de alto detalle que requieren mayor bitrate.

Sintaxis
Blur(x)
Blur(x,y)

Donde x es un valor real que puede variar entre -1.0 y 1.58, siendo los valores negativos
lo mismo que usar el filtro sharpen con valores positivos. La segunda forma de invocarlo
agrega la variable y, que sirve para indicar por separado la intensidad del filtro en forma
vertical, as queda la horizontal con la letra x.

El filtro Sharpen realiza justo lo opuesto, agudiza el detalle de la imagen, es decir que busca
lograr una mayor nitidez. Puede variar entre 0 y 1.0

Sharpen(x)
Sharpen(x,y)

Las variables representan lo mismo que en Blur.

SpatialSoften / TemporalSoften
[SpatialSoften: YUY2/TemporalSoften: YUY2-Y8-YV411-YV12-YV16-YV24]
Estos filtros se ocupan de eliminar el ruido de un video. Segn la wiki oficial pueden lograr
milagros (dice eso textualmente), y se recomienda mucho su uso. Eso s, con cuidado
porque a valores muy altos pueden liquidar detalle. Tambin son muy lentos, especialmente
a mayores valores del radio.
La diferencia entres ambos es que el Spatial compara pixeles adyacentes en un mismo
frame, mientras que el Temporal compara frames adyacentes en un mismo pixel. El
primero sin embargo parece ser el ms efectivo.
El Spatial slo funciona en el espacio de color YUY2, as que si desean implementarlo y
tienen como origen un formato distinto debern convertirlo, lo cual ser explicado en otro
filtro prximamente.
Sintaxis:
SpatialSoften(radio,luma,croma)
TemporalSoften(radio,luma,croma,escena,modo)

Lamentablemente la info en la wiki sobre este filtro es algo escasa as que para mejor
entendimiento de cmo influyen estos valores debern recurrir a prueba y error. Todos los
valores son enteros. radio representa el rea circundante al pixel que el filtro analizar (en
el caso del temporal sern cuantos frames adyacentes), cuanto mayor sea mejor se
desempeara el mismo, pero ms lento resultar. luma y croma corresponden a los
limites para luminancia y crominancia respectivamente a partir de los cuales se les aplicara
el filtro, si la imagen posee valores por debajo el filtro no es aplicado. En el Temporal estos
son considerados y filtrados por separado, pero en el Spatial slo se procesan si ambos
superan el lmite.
El valor modo por default es 1, pero puede setearse a 2 para aprovechar un mejor
desempeo del filtro temporal (mejor calidad y mayor velocidad) agregado en la versin
2.56 de avisynth.
Y por ltimo escena permite fijar un valor lmite para no procesar imgenes involucradas
en cambios de escena. El valor representa el cambio promedio de los pixeles entre frames.
Un rango recomendado es entre 5 y 30. Esta ltima opcin requiere un procesador que
soporte instrucciones ISSE.

Ejemplo de un buen punto de partida (extrado de la wiki):


TemporalSoften(4,4,8,15,2)

Tweak
[YUY2-Y8-YV411-YV12-YV16-YV24]

Con l podremos regular a gusto contraste, brillo, saturacin y color. Es sumamente til y
nos permitir lograr algn que otro efecto muy interesante.

Sintaxis:
Tweak(color,sat,brillo,cont,luma,startcolor,endcolor,maxsat,minsat,interp)

color(-180.0 / +180.0, default=0.0): tie la imagen hacia un determinado color. Valores


mayores llevan la imagen hacia el rojo, mientras que valores menores lo hacen hacia el
verde.

sat(0.0 / 10.0, default=1.0): ajusta la saturacin del color, este vendra a ser el valor que
ajusta la intensidad del color. Valores por debajo de 1.0 la reducen y viceversa.

Brillo(-255.0 / +255.0, default=0.0): regula el brillo. A mayores valores de 0.0 se


aumenta, mientras que a valores negativos se disminuye.
cont(0.0 / 10.0, default=1.0): contraste, 1.0 es sin variacin, valores inferiores lo bajan,
valores mayores lo aumentan.

luma(opcional, true / false, default=true): true refleja el comportamiento de versiones


anteriores de avisynth, bsicamente lo que hace cuando esta activado es limitar la
luminancia a [16,235], no me pregunten exactamente cul es el efecto porque no lo s,
supongo que reduce la gama de valores que sta pueda tomar y as evitar los extremos.

startcolor(default=0.0) y endcolor(default=360.0) (ambos desde 0.0 hasta 360.0 en


grados): permiten especificar un rango basndose en el color para el cual se aplicaran los
valores de color y saturacin antes descriptos.

maxsat(default=150.0) y minsat(default=0.0) (ambos van desde 0.0 a 150.0, en


porcentaje): permiten ajustar un rango basndose en la saturacin del color para el cual se
aplicaran los valores de color y saturacin. Para RGB el valor mximo ser de 100.0
(100%), para otros espacios de color est permitido usar hasta 150.0(150%).

interp(0 / 32, default=16): se usa para interpolar (de forma lineal) los valores de minsat y
maxsat, en el rango [minsat-interp,minsat] y [maxsat,maxsat+interp]. Con interp=0 no hay
interpolacin, til por ejemplo cuando el video se compone nicamente de colores
uniformes.

Pueden ver algunos ejemplos de aplicacin aqu.

AssumeFPS
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]

Sintaxis:
AssumeFPS(fps,syncaudio)
AssumeFPS(num,den,syncaudio)
AssumeFPS(clip1,clip2,syncaudio)
AssumeFPS(preset,syncaudio)

Se ocupa de modificar el framerate de reproduccin sin modificar el conteo de frames


(causando que el video se reproduzca ms rpido o ms lento de lo normal). nicamente
setea el parmetro FPS. Si en syncaudio colocamos true (false por default) tambin
modificara el sample rate del audio para igualar la duracin del video. Esto tambin
constituye un metodo para modificar unicamente el sample rate del audio.
fps es un numero real, aunque es ms conveniente cuando se trata de NTSC utilizar la
relacin 30000/1001 (en vez de 29.97) o 24000/1001 (en vez de 23.976), utilizando los
valores num y den para el numerador y el denominador respectivamente.
Esto se recomienda dado que cuando especifican un numero real avisynth lo pasa a una
relacin, entonces siendo 23.976 y 29.97 resultados aproximados de las relaciones ya
mencionadas en la realidad cuando avisynth los pase no dar la relacin estndar exacta.

Tambin pueden valerse de presets ya existentes para elegir los FPS segn los estndares,
mediante el valor preset, y segn los mencionados en la tabla de esta pgina.
Si otro video est presente (mediante clip2 es posible agregarlo) entonces el frame rate
del video original (clip1) ser igualado al mismo, til cuando se desean unir dos videos
de framerate ligeramente distintos.

Ejemplo:
AssumeFPS(24000,1001,true)
Permite modificar los FPS a 23,976 y tambin modifica el audio.

ChangeFPS
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]

Modifica el frame-rate eliminando o duplicando frames.

Sintaxis:
ChangeFPS(fps,syncaudio)
ChangeFPS(num,den,syncaudio)
ChangeFPS(clip1,clip2,syncaudio)
ChangesFPS(preset,syncaudio)

Los parmetros y su funcin son los mismos que AssumeFPS, as que pueden guiarse con
dicha descripcin.

Reverse
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]

Simple, se ocupa de que el video sea reproducido al revs, de atrs hacia adelante.
En origen entrelazado la paridad entre campo superior e inferior se modifica.
Sintaxis:
Reverse()

Turn
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]TurnLeft()
TurnRight()
Turn180()

Rotan el video 90 grados hacia la izquierda(left), derecha(right) o 180 grados.

PullDown
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]Sintaxis:
PullDown(a,b)

Proceso tambin llamado telecine, se trata de representar el primer frame mediante a


campos y el segundo mediante b campos, y as se repite hasta el final del video.

Por ejemplo: un telecine 2:3 o 3:2 (a:b) modifica el framerate de 23.976 a 29.97
agregando campos duplicados, dos para el primer frame y tres para el segundo, y as hasta
el fin del video.
Usar 0:3 es lo mismo que deshacer el pulldown 3:2 (29.97 -> 23.976).
Este ltimo no lo prob as que ignoro si realmente funciona, aunque el pulldown 2:3 o 3:2
si debiera hacerlo sin problemas.

ConvertToXXX
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]

Convierte el video al espacio de color elegido. til cuando el filtro que quieren usar slo
soporta algunos formatos especficos o uno solo en particular, como por ejemplo el filtro
SpatialSoften, que slo soporta trabajar sobre YUY2. Tambin en el caso de que el
codificador a donde envan el video soporte un formato de color de entrada especifico.

Sintaxis:
ConvertToXXX(matrix,entrelazado,chroma1,chroma2)
XXX puede ser: RGB, RGB24, RGB32, YUY2, Y8, YV411, YV12, YV16, YV24.
En matrix(comillas incluidas) pueden elegir entre: Rec.601(default), PC.601, Rec.709 y
PC.709, que le indica al filtro cual es el rango de colores. Los Rec reducen el rango a aquel
soportado por la TV analgica(16,235) y los PC procesan el rango de color completo
(0,255). Segn la informacin en la wiki Rec.601 debe ser usado cuando la fuente es
XviD/DivX o capturas analgicas; Rec.709 en cambio se recomienda usarlo cuando la
fuente es HDTV o DVD.

entrelazado puede ser true o false(default) y lo activan cuando la fuente es entrelazada.

chroma1 se usa cuando convierten desde o hacia YV12, pueden elegir entre MPEG2
(default), MPEG1 o DV.

chroma2 es el filtro de reescalado que se usa para la crominancia en los casos en donde la
misma tiene diferente resolucin entre los formatos de color que se estn convirtiendo.
Puede usarse cualquiera de los mencionados en el filtro Resize, el default es Bicubic.

GreyScale
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]Convierte el video a escala de
grises (no cambia el formato de color).

Sintaxis:
Greyscale()

FlipHorizontal / FlipVertical
[RGB24-RGB32-YUY2-Y8-YV411-YV12-YV16-YV24]

Sintaxis:
FlipHorizontal()
FlipVertical()
prcticos, y de dnde puedes descargarlos.

Rotan al video de tal manera que lo que se vea de izquierda-derecha pasa a verse de
derecha-izquierda, en el caso del horizontal, el vertical hace lo mismo pero en vertical valga
la redundancia.

Dicho de otra forma el video pasa a verse como el original se vera en un espejo.

Trim

Este filtro se utiliza para cortar secciones del video.


Sintaxis: Trim(Frame inicio, Frame fin)

Ejemplo:

Trim(0,100) # Desde el principio al frame 100


Trim(100,0) #Desde el frame 100 al final
Trim(100, 200) #Desde el frame 100 hasta el 200

[justify]Tambin podemos cortar una seccin del video que no queramos incluir y unir las
partes restantes. Digamos que queremos eliminar la seccin de los patrocinadores que
suelen aparecer en los captulos de Anime, para eso hacemos lo siguiente:

Video=DirectShowSource(c:\Carpera\video.mp4)

Parte1=Video.Trim(0,2000)
Parte2=Video.trim(2001,4000)
Parte3=Video.Trim(4001,0)

Final=Parte1+Parte3

Final=Final

return final

Como ven, le hemos asignado el valor Video a DirecShowSource, luego cortamos las
partes del video que queremos, lo que nos queda en que parte1 va desde el comienzo hasta
el final del opening, parte 2 es donde aparecen los patrocinantes y parte3 es el resto del
video, en la linea de abajo colocamos Final=Parte1+Parte3, ac estamos uniendo las partes
del video que queremos y omitiendo la de los patrocinates. En Final=Final podemoc
colocar los filtros que queramos a nuestro video separando cada filtro por un punto (.),
puede ser para cargar subttulos, etc.

A pesar de lo largo que es el post todava faltan algunas cosas pero esto sera lo ms bsico
en resumidas cuentas. Espero que les haya sido de utilidad. Saludos!!

Vous aimerez peut-être aussi