Начало работы
Обычно работа с AviSynth строится таким образом: Сначала Вы создаете простой текстовый документ со специальными командами, называемый скриптом (т.е. сценарием, программой на языке Avisynth), и сохраняете файл. Эти команды соотносят один или несколько видео-клипов с фильтрами, которыми Вы хотите их обработать. Затем Вы запускаете видео-приложение, например VirtualDub, и открываете в нем этот файл скрипта (скрипт-файл). Тогда и начинает работать AviSynth. Он открывает видео-клипы, на которые ссылаются фильтры в скрипте, выполняет фильтрование и передает результат видео-приложению. Приложение при этом и не подозревает, что имеет дело с AviSynth-ом, работающем в фоновом режиме. Наоборот, приложение считает, что оно работает напрямую с уже ранее отфильтрованными видео-клипами, находящимися у Вас на жестком диске.
Линейное редактирование:
Простейшее, что Вы можете выполнить с помощью AviSynth - того же сорта, что вы можете выполнить в VirtualDub. Скрипты при этом просты для написания: вам нет нужды волноваться о переменных и сложных выражениях если вы этого не хотите.
Для начала создайте файл с именем version.avs (или любым другим, лишь бы расширение было AVS) и вставьте туда следующую единственную строку текста:
Version
Теперь запустите, например, Windows Media Player, откройте в нем Ваш файл и Вы должны увидеть 10-секундный видео-клип, показывающий номер версии AviSynth и copyright-информацию.
Version - то, что можно назвать "фильтром-источником", подразумевая, что он формирует новый клип вместо модификации существующего. Первой командой в скрипте AviSynth должен быть фильтр-источник.
Теперь добавьте вторую строчку в файл скрипта, так что он должен читаться так:
Version
ReduceBy2
Снова откройте этот файл в Media Player. Вы снова должны увидеть информацию о версии, но в половину прежнего размера.
ReduceBy2 - "трансформирующий фильтр", это значит, что он берет предшествующий клип и каким-то образом модифицирует его. Вы можете собрать последовательно множество трансформирующих фильтров, как в VirtualDub.
Например добавим еще один, чтобы сделать наше видео затухающим в темноту в конце. Добавим еще строчку в файл скрипта:
Version
ReduceBy2
FadeOut(10)
Опять откроем файл. Клип должен быть таким же первые 9 секунд и затем, на последней секунде должен плавно перейти в черный. Фильтр FadeOut берет целочисленный аргумент, который показывает число кадров, в течении которых идет затухание.
Проходит много времени до начала затухания, так что давайте отрежем начало клипа для уменьшения ожидания.
Давайте отбросим первые 120 кадров и сохраним кадры 120-150:
AVIsynth script:
Version
ReduceBy2
# отрезать первые 119 кадров и сохранить кадры 120-150
# (AviSynth начинает отсчет с кадра 0)
Trim(120,150)
FadeOut(10)
В этом примере впервые использован комментарий.
Комментарий начинается с символа #, продолжается до конца строки и полностью игнорируется AviSynth.
Фильтр Trim требует два аргумента разделенных запятой: первый и последний кадр части клипа, которую следует сохранить. Если передать 0 как номер последнего кадра, то это будет аналогично концу клипа, так что если Вы просто желаете удалить первые 119 кадров, можно использовать команду Trim(120,0).
Помнить число кадров таким образом муторно. Гораздо легче открыть частично-готовый клип в приложении типа VirtualDub, которое покажет вам номера кадров. Вы также можете использовать фильтр ShowFrameNumber, который впечатает номер кадра в клип.
На практике гораздо более используемым фильтром нежели Version будет AVISource, считывающий AVI-файл (или один из нескольких других типов файлов) с диска. Если у Вас под рукой есть AVI-файл, Вы можете попробовать использовать те же фильтры на нем:
AVIsynth script:
AVISource("d:\capture.avi") # проставляется нужный путь к файлу
ReduceBy2
FadeOut(15)
Trim(120,0)
Даже однострочный скрипт, содержащий только команду AVISource, может быть весьма полезен для добавления поддержки AVI-файлов >2GB к приложениям, поддерживающим только файлы <2GB.
Нелинейное редактирование:
Теперь перейдем к более веселой части. Сделаем AVI-файл со следующим скриптом внутри:
StackVertical(Version, Version)
Теперь откроем его. Результат: Выходное видео имеет две идентичных строчки информации о версии, одна над другой.
Вместо взятия чисел или строк как аргументов, StackVertical берет в качестве аргументов видео-клипы. В этом скрипте фильтр Version вызывается дважды. Каждый раз, метод возвращает копию клипа о версии. Эти два клипа затем передаются в StackVertical, который объединяет их вместе (не интересуясь их происхождением).
Один из наиболее используемых фильтров такого типа это UnalignedSplice, который соединяет видео-клипы друг-за-другом. Вот скрипт, который грузит три AVI-файла (которые могут быть созданы AVI_IO) и объединяет их вместе.
AVIsynth script:
UnalignedSplice(AVISource("d:\capture.00.avi"), \
AVISource("d:\capture.01.avi"), \
AVISource("d:\capture.02.avi"))
Обе команды, StackVertical и UnalignedSplice могут принимать как минимум два и как максимум шестьдесят аргументов.
Вы можете использовать оператор "+" как короткий псевдоним для UnalignedSplice.
К примеру, такой скрипт делает тоже, что и предыдущий:
AVIsynth script:
AVISource("d:\capture.00.avi") + \
AVISource("d:\capture.01.avi") + \
AVISource("d:\capture.02.avi")
Давайте теперь предположим, что Вы захватываете видео, используя приложение, которое сохраняет видео в различных AVI сегментах, а звук помещает в отдельном WAV файле. Можем ли мы воссоединить все? Ваш выбор:
AVIsynth script:
AudioDub(AVISource("d:\capture.00.avi")+ \
AVISource("d:\capture.01.avi")+ \
AVISource("d:\capture.02.avi"), \
WAVSource("d:\audio.wav"))