• 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Guía Avisynth
#1
Introducción

Avisynth es un programa libre y gratuito destinado a realizar frameserver. Su finalidad es la decodificación de casi cualquier formato existente y la posterior aplicación 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, también llamado “script”, el cual puede ser creado con el notepad o similares, y debe ser guardado con extensión AVS. En dicho texto se deben indicar los parámetros de decodificación y que filtros se aplicaran.
Durante la instalación se les preguntara si desean instalar algunos extras, como por ejemplo la opción de asociar a Avisynth los archivos de extensión AVS ("Associate AVS with Notepad"), recomendable activarla para así identificar facilmente los script. Y también "Add Avisynth Script to new items menú", que les permite acceder a ClickDerecho->Nuevo->AviSynth Script para así crear ya automáticamente un archivo con extensión 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.

Pueden encontrar al programa aquí

Lo Básico


Comencemos con los comandos para cargar un video, es decir los primeros que deben ir en el script, después de la carga de los filtros:

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 (sólo 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 línea, que hace uso del DirectShow y así permite demultiplexar/decodificar todo formato que posea un CODEC directshow adecuado instalado en el sistema, así como también 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 sólo es necesario en ciertos casos de decoders directshow que fallan en informarlo, como cuando se trata de achivos ASF.

Si desean sólo 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 línea cuándo 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”.


Filtros

FILTROS Internos

Debajo del nombre del filtro verán 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 más adelante.

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

El primero que trataremos es quizás el más utilizado en la recompresión de videos, se trata del filtro Resize; avisynth nos ofrece unas cuantas variantes, donde las más 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 resolución del video, para así estirarlo o comprimirlo (espacialmente hablando) lo necesario hasta alcanzar la resolución 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 más chica posible es el pixel.

Explicación 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 resolución.

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 resolución, ya que se logra una imagen más nítida, pero sólo es recomendable cuando habrá suficiente bitrate como para codificar dicho detalle extra, sino puede ser más 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 más arriba. Estos parámetros 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 aparición de macrobloques al comprimir a muy bajos bitrates; mientras que el ringing hace todo lo contrario, a mayores valores más fino será el filtro y más detalle dejará pasar. Con b=0 y c=0.75 el filtro es idéntico al presente en VirtualDub, "VirtualDub`s Precise Bicubic". Un valor normal sería 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 estaría generando más 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 aún más detalle y con mejor calidad que el Bicubic, sólo recomendable para altos bitrates. Sirve como alternativa al Bicubic con valores de “c” entre 0,6 y 0,75, sólo que logra una calidad superior en estos valores (menos artifacts).

Lanczos4: es una abreviación a LanczosResize(taps=4). (Desarrollo pendiente).

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

Gauss: filtro basado en el algoritmo de Gauss. El parámetro "p" ajusta la nitidez, desde 0 (menor detalle, mas borroso) hasta 100 (mayor detalle, más fino). Su velocidad es similar al Lanczos4.

Point: es el filtro para resize más simple que existe. Su uso no es para nada recomendable a no ser que se quiera disminuir la calidad del vídeo adrede. Sus resultados suelen contener mucho bloque.

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

Para una comparación entre filtros de resize pueden ver aqui (inglés)

Desde la versión 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 línea:
Crop(10, 10, 200, 300).BilinearResize(100, 150)

Seria casi lo mismo que usar la siguiente:
BilinearResize(100, 150, 10, 10, 200, 300)

Este método es conveniente usarlo cuando quieren cortar parte de la imagen previa a su reescalado. Usándolo 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 tamaño (espacial) de un vídeo con sólo redimensionar dado que las resoluciones que se deben obtener son fijas para cumplir algún estándar, entonces con sólo dimensionar se dañaría el aspect ratio (AR) del mismo y éste se vería alargado o achatado; así que para llegar a la resolución 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 algún 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 márgenes. Las letras siguen el siguiente orden: "x": superior; "z": inferior; "v": izquierda; "y": derecha. Lo más común es agregar bandas arriba y abajo, pero también se agregan en los cuatro lados por ejemplo cuando se desea solucionar el efecto overscan.

El parámetro "color" permite elegir un color distinto del negro (default, si no se especifica nada); este color lo deben indicar en código hexadecimal. Aquí pueden ver una lista con los códigos y colores soportados.

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

Esta línea agrega bandas de 64 pixeles tanto arriba como abajo de color Cyan. De seguro quede horrible pero es un ejemplo nada más p:.

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" líneas de la parte inferior de la imagen, especialmente útil para eliminar la distorsión 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 aparición de bloques o pixelado, o también para facilitar la codificación 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. Según 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. También 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 más efectivo.
El Spatial sólo funciona en el espacio de color YUY2, así que si desean implementarlo y tienen como origen un formato distinto deberán convertirlo, lo cual será explicado en otro filtro próximamente.

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 cómo influyen estos valores deberán 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 serán cuantos frames adyacentes), cuanto mayor sea mejor se desempeñara el mismo, pero más 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 sólo se procesan si ambos superan el límite.

El valor "modo" por default es 1, pero puede setearse a 2 para aprovechar un mejor desempeño del filtro temporal (mejor calidad y mayor velocidad) agregado en la versión 2.56 de avisynth.
Y por último "escena" permite fijar un valor límite para no procesar imágenes 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 opción requiere un procesador que soporte instrucciones ISSE.

Ejemplo de un buen punto de partida (extraído de la wiki):
TemporalSoften(4,4,8,15,2)

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

Con él podremos regular a gusto contraste, brillo, saturación y color. Es sumamente útil y nos permitirá lograr algún 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): tiñe 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 saturación del color, este vendría 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 variación, valores inferiores lo bajan, valores mayores lo aumentan.

"luma"(opcional, true / false, default=true): true refleja el comportamiento de versiones anteriores de avisynth, básicamente lo que hace cuando esta activado es limitar la luminancia a [16,235], no me pregunten exactamente cuál 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 basándose en el color para el cual se aplicaran los valores de color y saturación 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 basándose en la saturación del color para el cual se aplicaran los valores de color y saturación. Para RGB el valor máximo 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 interpolación, útil por ejemplo cuando el video se compone únicamente de colores uniformes.

Pueden ver algunos ejemplos de aplicación 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 reproducción sin modificar el conteo de frames (causando que el video se reproduzca más rápido o más lento de lo normal). Únicamente setea el parámetro FPS. Si en "syncaudio" colocamos true (false por default) también modificara el sample rate del audio para igualar la duración del video. Esto también constituye un metodo para modificar unicamente el sample rate del audio.
"fps" es un numero real, aunque es más conveniente cuando se trata de NTSC utilizar la relación 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 relación, entonces siendo 23.976 y 29.97 resultados aproximados de las relaciones ya mencionadas en la realidad cuando avisynth los pase no dará la relación estándar exacta.

También pueden valerse de presets ya existentes para elegir los FPS según los estándares, mediante el valor "preset", y según los mencionados en la tabla de esta página.
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 también 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 parámetros y su función son los mismos que AssumeFPS, así que pueden guiarse con dicha descripción.

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

Simple, se ocupa de que el video sea reproducido al revés, de atrás 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 también 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 sólo soporta algunos formatos específicos o uno solo en particular, como por ejemplo el filtro SpatialSoften, que sólo soporta trabajar sobre YUY2. También en el caso de que el codificador a donde envían 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 analógica(16,235) y los PC procesan el rango de color completo (0,255). Según la información en la wiki Rec.601 debe ser usado cuando la fuente es XviD/DivX o capturas analógicas; 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 resolución entre los formatos de color que se están 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]

Rotan al video de tal manera que lo que se veía 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 vería en un espejo.

Sintaxis:
FlipHorizontal()
FlipVertical()
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Un poco de Avisynth kosmito 0 3,582 03-04-2019, 11:02 PM
Último mensaje: kosmito
  Manual Completo de Filtros y sus usos con AviSynth Parte 2 kosmito 0 6,212 03-04-2019, 11:00 PM
Último mensaje: kosmito
  Manual Completo de Filtros y sus usos con AviSynth Parte 1 kosmito 0 7,499 03-04-2019, 10:59 PM
Último mensaje: kosmito

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)