Синтаксис (Syntax)
Выражения (Expressions):
Скрипт AviSynth содержит множество строк утверждений такого вида:
variable_name = expression
В этом примере результат вычислений выражения expression присваивается переменной variable_name.
Очень важна общепринятая сокращенная форма:
expression
В данном случае происходит вычисление expression и результат присваивается специальной переменной (клипу) last (что означает “последний”).
Это аналогично
last = expression
Конец скрипта часто выглядит так:
return expression
Здесь происходит вычисление expression и его результат используется в качестве “возвращаемого значения” скрипта - это и будет видео-клип который покажет приложение, в котором открыли AVS-файл.
Если команда return не указана в явном виде, то скрипт возвращает в конце своей работы клип last (“последний”).
Основная форма выражения, которое выполняет функцию:
Function(args)
Функции работы с клипами всегда производит новый видео-клип, никогда не модифицируя существующий,
Args представляет список аргументов функции, разделяемых запятой. Этот список может быть пустым (подразумевается, что все или часть из аргументов являются необязательными)
Если функция-фильтр ожидает клип в качестве своего первого аргумента, а этот аргумент не указан, то этот клип берется из переменной last
Фильтры AviSynth могут принимать также именованные аргументы. Они могут указываться в любом порядке,
и фильтр будет подставлять значения по умолчанию для всех пропущенных аргументов (именованные аргументы всегда необязательны).
Это делает определенные фильтры намного более удобными в применении.
Можно написать
Subtitle(“Hello, World!”, text_color=$00FF00, x=100, y=200)
вместо
Subtitle(“Hello, World!”, 100, 200, 0, 999999, “Arial”, 24, $00FF00)
Альтернативный синтаксис (называемый “ООП-записью” - в стиле объектно-ориентированного программирования) для клиповых функций:
expression.Function(args)
например:
Version.ReduceBy2.FadeOut(15)
что эквивалентно
Function(expression, args)
например:
FadeOut(15, ReduceBy2(Version))
и подразумевает приложение функции Function к выражению expression.
Одно из неудобств ООП-записи - это возможность ее использования только для фильтров с единственным аргументом типа клип, но никак не для фильтров с несколькими такими аргументами.
Все AviSynth-функции производят определенное количество кадров с определенной частотой кадров (framerate), даже если выражение выглядит очень сложным.
AviSynth, прочитав скрипт, знает какой длины будет выходной клип, какую он будет иметь частоту кадров и соответственно последовательность нарезки кадров из всех используемых источников.
Все это вычисляется при открытии скрипта. Только фактическая фильтрация производится во время выполнения по запросу (кадров).
Комментарий (Comments): AviSynth игнорирует все, начиная от символа # и до конца строки.
# комментарий
В версии v2.58 добавлена возможность размещать блок комментариев и вложенный комментарий следующим образом:
# блок комментариев:
/*
comment 1
comment 2
*/
вложенный комментарий:
[* [* a meaningful example with follow later : ) *] *]
AviSynth игнорирует все от ключевого слова END (с двойными подчеркиваниями) и до конца файла скрипта. Это можно использовать для запрета выполнения некоторых команд скрипта.
Version()
END
ReduceBy2()
Результат будет без уменьшения (без действия команды ReduceBy2) и мы можем здесь писать любой текст
Игнорирование больших-малых букв (Ignore Case): aViSouRCe ничуть не хуже AVISource.
Продолжение (Continue) на следующей строке: \
Subtitle (“Test-Text”)
Subtitle (
“Test-Text”)
Subtitle (
\ “Test-Text”)
Переменные (Variables):
Имя переменной может быть длиной до 50 символов (реально - более чем 4000 символов в Avisynth v2.56) и содержать буквы (только латинские), цифры и подчеркивание (_), но никакие другие символы. Имя не может начинаться с цифры.
Вы можете использовать символы из вашей языковой системной кодовой страницы (локали) в строках и именах файлов (только ANSI 8 бит, не Unicode).
Возможно использование таких типов переменных:
clip: видео-клип, содержащий видео и/или звук. Как минимум одна переменная типа клип должна использоваться и возвращаться скриптом.
string: строка - окружается либо “кавычками” (маркерами цитирования) либо тройными кавычками как в “”“этом примере”“”. Текстовая строка может содержать любые символы кроме прерывающих кавычек или двойного апострофа. Если необходимо включить внутрь строки кавычки, следует использовать тройные кавычки:
Subtitle (“”“Это покажет “hello world” в кавычках”“”)
int: целое - вводится как строка цифр, возможно дополненная + или - в начале.
float: вводится как строка цифр с десятичной точкой (.) там где нужно, и дополненная + или - в начале при необходимости. Например, +1. трактуется как число с плавающей десятичной точкой (floating-point number).
val: тип аргумента функции, для которого не имеет значения, целочисленный он или с десятичной точкой
bool: логическое - может иметь значения только TRUE (истина) или FALSE (ложь)
hexadecimal numbers: шестнадцатеричное число - вводится с предшествующим знаком $. Такая переменная подразумевается целочисленной. Некоторые фильтры используют такое представление для задания цвета. Например, $FF8800 задает темно-оранжевый.
global: определяет глобальную переменную, которая может быть использована всеми определенными пользователем (user-defined) функциями так же как и основным скриптом.
Вот другая версия ранее приведенного примера, который более управляем и легок для понимания:
[AVS]a = AVISource(“d:\capture.00.avi”)
b = AVISource(“d:\capture.01.avi”)
c = AVISource(“d:\capture.02.avi”)
sound_track = WAVSource(“d:\audio.wav”)
AudioDub(a+b+c, sound_track)[/AVS]