AviSynth: сложно о простом


Открытие источников

В предыдущей статье (№51, 2006) мы рассмотрели общую структуру AVS-скрипта.

Т.к. основное предназначение "Ависинта" - обработка видео и передача результатов работы в другие приложения, то и открытие источников является важнейшей функцией.

В базовый набор AviSynth входят фильтры-источники для открытия медиа-файлов основных типов - AVI видеофайлов AVISource, DirectShowSource, звуковых файлов WavSource, а также файлов изображений ImageSource.

Помимо этого, существует большое количество сторонних плагинов, позволяющих открывать в AviSynth множество других форматов медиа-файлов.

Для чтения ряда других форматов файлов разработаны (и продолжают разрабатываться) отдельные плагины: QTSource для файлов QuickTime, NicAudio для MPEG аудио и др. Для файлов MPEG1 и MPEG2 в настоящее время наиболее распростарненным является использование функции Mpeg2Source плагина DGDecode. Для этого предварительно необходимо воспользоваться программой DGIndex из пакета DGMPGDec, в которой открыть файл MPEG2 и сохранить индексный файл с расширением *.d2v, который и должен быть указать в качестве открываемого источника.

#Открываем источник в формате mpeg2, пропущенный через DGIndex
#Подключаем плагин DGDecode
LoadPlugin(C:\Program Files\AviSynth 2.5\plugins\DGDecode.dll)
Mpeg2Source(D:\Test\test.d2v)

AVISource берет как аргумент одно или более имен файлов в кавычках. Кроме, собственно, AVI-файлов, данный фильтр способен открывать также WAV-файлы, AVS (AviSynth скрипт) и VDR (фреймсервер VirtualDUB). Если в качестве аргумента указать несколько имен файлов через запятую, клипы будут объединены вместе с помощью функции UnalignedSplice (про объединение источников поговорим далее).

Пример:

AVISource("G:\test\1.avi", "G:\test\2.avi")

Такое выражение можно записать и по-другому:

AVISource("G:\test\1.avi")+ AVISource("G:\test\2.avi")

Помним, что имена файлов должны быть обязательно в кавычках. Хотя, если для составления скриптов вы будете пользоваться каким-либо редактором, кавычки он поставит автоматически. AVISource также может открывать видео DV типа 1.

Встроенная функция WAVSource, как ясно из названия, позволяет открывать аудио-источники в формате WAV.

У WAVSource есть одна полезная особенность - возможность из видеофайла со звуком открыть только звук без видеопотока. Т.е. для того, чтобы извлечь звуковую дорожку из видеофайла со звуком, достаточно немного изменить уже использованный нами скрипт -

WAVSource("G:\test\ 1.avi","G:\test\2.avi")

При открытии в любом редакторе видео или плеере (поддерживающего работу с AviSynth) такого скрипта будет проигрываться лишь звуковой поток без видео, что иногда очень удобно.

Конечно же, данную функцию можно применять и по прямому назначению:

WAVSource("G:\test\ sound.wav")

Помимо того, что можно объединить большое количество файлов в один виртуальный видеофрагмент, существует возможность комбинировать как целые файлы, так и их произвольные фрагменты.

Для объединения фрагментов видео из нескольких входных файлов необходимо в скрипте для каждого файла указать команду открытия с присвоением переменных. То есть каждый наш фрагмент получит свой псевдоним. Фрагменты будем вырезать командой Trim. Упростить процедуру вырезания нужных фрагментов можно при помощи VirtualDUBMod, как было описано в предыдущей статье.

A=AVISource("G:\test\1.avi") #присваиваем файлу 1.avi переменную A
A
A=Trim(50,450) #используя команду Trim, вырезаем подходящий фрагмент
B=AVISource("G:\test\2.avi")
B
B=Trim(0,230)
#Объединяем фрагменты
A++B

Итогом работы этого скрипта будет виртуальный видеофайл, объединяющий два видеофрагмента из двух видеофайлов.

Команда Trim вырезает только указанный пользователем фрагмент. Звук вырезается вместе с видео. Синхронизация звука и видео полностью сохраняется.

Существует еще команда SegmentedAVISource, очень удобная в случае необходимости автоматически открыть большое количество (до 100) AVI-файлов. Особенность данной функции открытия - файлы должны иметь имена вида test.00.avi, test.01.avi и т.д. В таком случае, если аргументом для SegmentedAVISource указано имя файла test.avi, будут последовательно открыты все файлы в каталоге, имеющие имя такого формата, как указано выше.


Приложение

Чтобы не отрывать теорию от практики, приведу примеры, которые, на мой взгляд, могут быть полезны во многих случаях.

При помощи пакета DGMPGDec и плагина для "Ависинт" DGDecode можно быстро пережать DVD-фильм в другой формат. Для чего нужно загрузить в программу DGIndex все необходимые vob-файлы, избавившись от рекламы и пр. В результате сохранения проекта будет получен индекс-файл с расширением *.d2v и один или несколько (в зависимости от настроек) WAV-файлов. Далее работаем с этими файлами как указано в начале статьи. Конечно, для пережатия DVD существует огромное количество конвертеров, но тут вы полностью контролируете процесс, да и в скорости можно получить немалый выигрыш.

Второй пример, касающийся объединения файлов и фрагментов из них - захват телепередач. После захвата в VirtualDUBMod можно "выкинуть" все, что вам покажется лишним. После чего во встроенном редакторе скриптов воспользоваться функцией Edit - Import FrameSet as Trim. Останется только дополнить скрипт необходимыми элементами (AVISource, LoadPlugin и пр.) - и наш скрипт можно использовать дальше по желанию.


Заключение

Если вам приходится работать с видео, уверен, вы знаете, как раздражают задержки при вроде бы простых операциях резки, склейки, выделении звуковой дорожки из видео. Особенно неприятно, если эти фрагменты имеют очень большую длительность и занимают много места. Как только начнешь их резать, проект многократно увеличивается в размере, и не избежать длительного ожидания. AviSynth позволяет принципиально решить эту проблему, не производя фактически никаких операций над видео, пока это не потребуется используемой вами программе. Это же относится и к простому редактированию - приложению с высокой скоростью передаются только те фрагменты, которые были указаны вами в скрипте.

(Продолжение следует)

Андрей АЧИНОВИЧ,
minhex@gmail.com


Ссылки по теме:

www.neuron2.net/dgmpgdec/dgmpgdec.html - домашняя страница пакета DGMPGDec

Версия для печатиВерсия для печати

Номер: 

01 за 2007 год

Рубрика: 

Multimedia
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!