AviSynth es un programa de servidor de cuadros para Microsoft Windows , Linux y macOS desarrollado inicialmente por Ben Rudiak-Gould, Edwin van Eggelen, Klaus Post, Richard Berg e Ian Brabham en mayo de 2000 [1] y posteriormente retomado y mantenido por la comunidad de código abierto que aún sigue activa en la actualidad. Es software libre con licencia GNU General Public License .
AviSynth actúa como un editor de vídeo no lineal controlado completamente por scripts (sin una GUI ). [2] Emula un archivo de vídeo AVI (o un archivo de audio WAV ) como lo ve la aplicación VFW , que normalmente es un reproductor multimedia , un software de edición de vídeo o un codificador . [3]
AviSynth se basa en filtros , que son muy similares a los filtros DirectShow , pero con una interfaz binaria diferente . Las capacidades de los filtros incluyen recorte , desentrelazado , telecine inverso , trabajo con imágenes fijas, gradación de color básica , reducción de ruido de video y muchas otras cosas. AviSynth también realiza tareas de edición de video tradicionales como cortar, recortar y volver a secuenciar segmentos.
Por ejemplo, considere el script "myAvi.avs" (simplemente un archivo de texto simple guardado con la extensión "avs")
AviSource("miAvi.avi") Recortar(0, 0, 320, 240) Desenfoque(0,1)
Este archivo de script se puede abrir en la mayoría de los reproductores multimedia (como Windows Media Player ). El programa reproducirá el archivo de vídeo "myAvi.avi" recortado hasta los 320 píxeles de la esquina superior izquierda por 240 píxeles y ligeramente desenfocado. Las operaciones se realizan en orden secuencial, de modo que primero se recorta y luego se desenfoca.
Técnicamente, AviSynth construye un gráfico de filtros (como Microsoft GraphEdit pero con capacidades adicionales), [4] controlado por scripts escritos en el lenguaje de scripts de AviSynth. Su funcionalidad se puede ampliar mediante el uso de filtros de terceros conocidos como complementos . Se mantiene una lista de complementos externos en AviSynth Filter Collection.
AviSynth es un servidor de cuadros : el programa que realiza la llamada solicita cuadros de audio o video y el script los sirve . El programa que realiza la llamada puede llamar cuadros en cualquier orden, lo que le permite pausar, avanzar o retroceder, etc., tal como sucede con un archivo físico.
El lenguaje de scripting es un lenguaje de flujo de datos : [4] un paradigma de programación que describe un gráfico dirigido de los datos que fluyen entre operaciones. Carece de algunas estructuras de control de programación procedimental , [5] pero contiene muchas características familiares para los programadores, incluidas variables , tipos de datos distintos , condicionales y expresiones complejas .
El lenguaje trabaja principalmente con el clip de audio/video como un tipo de datos integrado. El clip es una estructura compleja con muchos atributos como ancho, alto y duración. [6] El lenguaje también tiene otros tipos de datos más estándar: int , float , bool y string . [7] Estos se pueden usar para realizar cálculos, tomar decisiones y escribir texto como subtítulos para el video.
El script tiene un único valor de retorno , que es el audio y el video "vistos" por el programa que ejecuta el script. Normalmente, esta es la última línea del script, pero se puede insertar una declaración de retorno en cualquier momento.
Este ejemplo es un programa "Hola Mundo" .
Clip en blanco() Subtítulo("¡Hola, mundo!")
Si el texto anterior se ingresa en un archivo de texto con la extensión .avs, se puede abrir en Windows Media Player o en cualquiera de los otros programas de la lista a continuación, y se mostrará un video que contiene las palabras "¡Hola, mundo!".
La función BlankClip crea un nuevo vídeo. Los paréntesis al final de la palabra son opcionales, ya que no se pasan argumentos, pero se incluyen en este caso para indicar que se trata de una función y no de una variable.
La función Subtítulo dibuja las palabras "¡Hola, mundo!" sobre el video en blanco creado previamente.
Aunque ambas funciones aceptan muchos más argumentos (por ejemplo, controlar el tamaño y la duración del video en blanco, y la posición, la fuente y el color del subtítulo), este ejemplo los omite; las funciones usan argumentos predeterminados integrados.
Avisynth utiliza una sintaxis que hace que escribir scripts simples sea mucho más fácil: una variable implícita llamada Last . Sin variables implícitas, el script anterior tendría que escribirse de la siguiente manera:
Último = BlankClip() Apellido = Apellido.Subtítulo("¡Hola, mundo!") volver Último
o así:
A = Clip en blanco() B = A.Subtítulo("¡Hola, mundo!") devolver B
Las variables de clip explícitas normalmente solo se utilizan para funciones que involucran más de un clip:
A = Clip en blanco() B = A.Subtítulo("¡Hola, mundo!") devuelve Dissolve(A, B, 30) # fundido cruzado de 30 cuadros
Este ejemplo toma un video real, le aplica un procesamiento simple y lo devuelve a la salida.
AviSource("C:\Ejemplo.avi") ReducirPor2() Escala de grises()
La función AviSource se utiliza para cargar un vídeo AVI desde una ubicación real. Para abrir otros tipos de medios, se puede utilizar la función DirectShowSource . ReduceBy2 divide el tamaño vertical y horizontal del vídeo a la mitad, y GreyScale elimina toda la información de color.
Los filtros de AviSynth funcionan en muchos espacios de color RGB y YUV para permitir todo tipo de entrada y salida de video. [8] Ciertas funciones solo funcionan en espacios de color específicos , lo que requiere conversión; por ejemplo, la mayoría de los videos se distribuyen en un espacio de color YUV , pero la mayor parte de la corrección de color se realiza en uno de los espacios RGB . Un script de corrección de color podría verse así:
DirectShowSource("movie.mp4") # Espacio de color YV12 Convertir a RGB32 RGBAdjust(1.0, 0.95, 1.0) # disminuye el canal verde Convertir a YV12
El lenguaje de script AviSynth permite a los usuarios definir sus propias funciones.
Este es un ejemplo de una función que le permite pasar de un clip a otro sin dañar las líneas entrelazadas.
clip1 = AVISource("video1.avi") clip2 = AVISource("video2.avi") # llama a la función definida por el usuario que se define a continuación: disolución entrelazada(clip1, clip2, 30) # ...el script devuelve el resultado anterior al programa que lo llama # función definida por el usuario: # disolver del clip1 al clip2 en 30 fotogramas función entrelazada_dissolve(clip clip1, clip clip2, int iter) { clip1 = clip1.CamposSeparados evn1 = clip1.SeleccionarPar impar1 = clip1.SeleccionarImpar clip2 = clip2.CamposSeparados evn2 = clip2.SeleccionarPar impar2 = clip2.SeleccionarImpar evn = Disolver(evn1, evn2, iter) impar = Disolver(impar1, impar2, iter) Entrelazar (par, impar).Tejer.DobleTejer.SeleccionarImpar # ...la función devuelve el resultado anterior al script principal}
AviSynth 3.0 fue una reescritura completa de AviSynth 2.x y tenía como objetivo superar las limitaciones de AviSynth 2.x. Añadió mejoras como un modelo de espacio de color abstracto , en el que se podían admitir nuevos espacios de color (incluidos dos con una profundidad de 45 bits) a través de un mecanismo de complemento, mejor gestión de caché para un mejor rendimiento y el uso de Ruby en lugar del lenguaje local empleado en las versiones actuales. [9]
AviSynth 3.0 iba a estar disponible para otros sistemas operativos además de Windows , y en su lugar se basaba en GStreamer , lo que ampliaba el soporte a plataformas como Linux , Mac OS X y BSD . El desarrollo se ha estancado desde agosto de 2007. [9] [10]
AviSynth+ es una bifurcación del AviSynth 2.xx oficial, que introduce características largamente buscadas como soporte de 64 bits , multithreading , espacios de color profundos , soporte para compiladores recientes, nuevas construcciones de scripting (nuevas construcciones de flujo de control como bucles) y un mayor rendimiento en muchas áreas. [11] Al mismo tiempo, mantuvo el 100% de compatibilidad con la serie AviSynth 2.5/2.6, tanto para filtros como para aplicaciones host. En el momento de escribir este artículo (2023-06), también se mantiene activamente.
AviSynth 2.xx puede utilizarse en sistemas operativos distintos de Windows mediante el uso de Wine . Para trabajar con scripts, se puede utilizar VirtualDub / VirtualDubMod como en Windows. Para interactuar entre AviSynth bajo Wine y, por ejemplo, FFmpeg ejecutándose en un host Linux, se puede utilizar Avs2YUV. Avs2YUV es un programa de línea de comandos de Windows que se ejecuta bajo Wine y muestra la salida de un script de AviSynth en stdout que luego se envía a FFmpeg. Avs2YUV también admite la escritura en una canalización con nombre . [12]
Existe un puerto Linux de AviSynth llamado AvxSynth. [13]
Además, ahora se han creado varios programas que sólo aceptan scripts de AviSynth como entrada, lo que simplifica los programas en sí pero ofrece a los usuarios todo el poder de AviSynth para la entrada.
También existen varias aplicaciones de codificación por lotes que combinan AviSynth con codificadores y multiplexores de audio y video de línea de comandos para brindar una aplicación de codificación de video personalizable, modular y todo en uno. MeGUI es un ejemplo de este tipo de aplicación.
Aunque los scripts de AviSynth están pensados para abrirse fácilmente en programas de edición de texto sencillos, existen varios editores diseñados especialmente para editar scripts de AviSynth, como AvsPMod.