Импорт медиа в Avisynth

Содержание

1) Загрузка клипов в AviSynth
    1.1) Загрузка клипов с видео и аудио в AviSynth
    1.2) Загрузка видео клипов в AviSynth
    1.3) Загрузка аудио клипов в AviSynth
    1.4) Загрузка изображений в AviSynth

2) Изменение приоритета DirectShow фильтров

3) Использование GraphEdit для создания графов DirectShow фильтров и загрузка этих графов в AviSynth

Загрузка клипов в AviSynth

Большинство видео/аудио форматы могут быть загружены в AviSynth, но есть некоторые исключения как swf видео, flv4 (VP6) и dvr-ms. Если невозможно загрузить клип в AviSynth, вы должны преобразовать его в некоторый другой формат, который может быть загружен. Помните выбрать формат, для которого вы будете иметь минимальную потерю в качестве в результате преобразования.

Вообще есть два способа загрузить ваше видео в AviSynth:

  1. используя AviSynth фильтр или плагин, который предназначен для открытия некоторого специального формата.
  2. используя DirectShowSource плагин.

Удостоверьтесь, что ваш клип содержит максимум один видео и (или) один аудио поток (таким образом удалите субтитры и удалите другие видео/аудио потоки). Если вы хотите загрузить клип, который содержит видео и аудио, у вас есть две возможности:

При загрузке клипа в AviSynth советуем следовать следующим правилам:

Для многих форматов объясняется, как загрузить их в AviSynth, но если ваш формат не обсуждается здесь, тут должно быть достаточно обсуждения, с чего вам надо начать. Часто существуют несколько способов загрузить ваш формат в AviSynth, так что если один из них не работает, не забудьте попробовать другие. Например, пусть вы получили AVI с 5.1 DTS,но он не открывается как 5.1 с AviSource. Попробуйте другие способы, такие как открытие с DirectShowSource (используя AC3filter), или разделите видео и аудио и загрузите dts с NicAudio.

1.1) Загрузка клипов с видео и аудио в AviSynth

1.1.1) AVI с аудио:

Для загрузки AVI с аудио вам необходимыd (1) VfW (Video for Windows) кодек чтобы открыть (то есть декодировать) ваше видео в AviSynth и ACM (Audio Compression Manager) кодек чтобы открыть ваше аудио в AviSynth. Для многих видео и аудио форматов такие кодеки доступны, но точно не для всех.

Число различных видео форматов, которые могут быть найдены в AVI, достаточно ограничено. Вот избранные из них:

Список аудио форматов дан ниже:

аудио: несжатый WAV, CBR/VBR MP2 или CBR/VBR MP3:

Существует ACM кодек для MP2 называемый [QDesign]. Существуют ACM кодеки для MP3 [Radium Codec] или [Lame ACM].

аудио: AC3/DTS:

Существует ACM кодек для AC3 называемый [AC3ACM]. Есть ACM кодек для AC3/DTS называемый valex ACM кодек [vac3acm].

Примеры:

AviSource("d:\xvid_dts.avi")

Возьмите AC3/DTS directshow фильтр подобно AC3Flter (удостоверьтесь, что микширование (downmixing) выключено, если только вы не хотите, чтобы звук был смикширован или он является стерео или моно) и AVI-AC3/DTS splitter, или ffdshow (с DTS установленным в libdts). Используйте AC3Filter и создайте скрипт:

DirectShowSource("d:\xvid_dts.avi")

аудио: AAC:

Для AAC не существует надежного ACM кодека, так что невозможно загрузить ваш клип с AAC с AviSource. Возьмите AAC directshow фильтр подобный CoreAAC (удостоверьтесь, что микширование выключено, если только вы не хотите микшировать) или ffdshow (с AAC установленным в libfaad2 или realaac). Мы использовали ffdshow здесь:

используйте скрипт

DirectShowSource("d:\xvid_aac.avi")

для загрузки вашего AVI.

1.1.2) Другие контейнеры с аудио:

Не всегда возможно загрузить ваши клипы в AviSynth используя AviSource (или один из специальных плагинов, которые будут обсуждены ниже). Примерами являются не-AVI, представляющие собой клипы, содержащиеся внутри другого контейнера, такого как MKV, MP4, RMVB, OGM или ASF/WMV. В этом случае DirectShowSource является вашей последней надеждой. Также вполне возможно, что вы имеете AVI, с соответствующим установленным VfW кодеком, но вы хотите использовать DirectShow кодек для открытия в AviSynth. В этом случае вы также должны использовать DirectShowSource.

При проигрывании клипа в WMP6.4 (mplayer2.exe), для проигрывания используются DirectShow фильтры (*.ax). Они являются теми же самыми, которые "используются" DirectShowSource. Так что вам надо удостовериться, что вы имеете установленными соответствующие DirectShow фильтры. Чтобы выяснить, какие фильтры используются при проигрывании клипа, откройте клип в WMP6.4 и посмотрите в меню: файл -> свойства -> Дополнительно. Здесь вы также можете изменить настройки фильтров. Вы получите больше информации о фильтрах если вы откроете ваш клип например в GSpot. Просто откройте клип и нажмите "1" под A/V в "Proposed Codec Solutions and Tests" панели. Конструируется "graph" с фильтрами, которые используются чтобы проиграть клип:

(Если вы удивлены, благодаря моим настройкам в AC3Filter, он всегда показывается вверху в цепочке фильтров. Но в данном примере он не должен загрузиться, так как он не поддерживает AAC.)

Если вы получили сообщение "rendering failed (...)", это означает, что требуемые DirectShow фильтры не установлены. Удостоверьтесь, что файл проигрывается корректно путем нажатия "2" под "1". Потому что если он не играется, DirectShowSource не сможет загрузить клип. Вообще говоря, вы можете столкнуться со следующей проблемой с этим подходом: другие DirectShow фильтры используются при проигрывании медиа файла, а не те, которые вы установили или хотите использовать. Это может случиться из-за того, что используемые фильтры имеют более высокий приоритет (merit), чем те, которые вы хотели бы использовать. Есть два решения этой проблемы:

  1. изменить приоритет используемых фильтров используя Radlight Filter Manager.
  2. использовать GraphEdit (последнее сообщение в ветке) чтобы построить граф, используя DirectShow фильтры по вашему выбору и загрузить данный граф с DirectShowSource.

Это будет обсуждено в разделах "Изменение приоритета DirectShow фильтров" и "Использование GraphEdit для создания графов DirectShow фильтров и загрузка этих графы в AviSynth".

К счастью вы можете установить ffdshow (который идет с несколькими DirectShow декодерами), который способен декодировать многие форматы. Например:

Пример:

Загрузим MP4 (видео: h.264, аудио: aac) используя DirectShowSource и ffdshow (декодирование aac разрешено в ffdshow; если audio является AC3 или DTS, вы можете также вместо этого использовать AC3Filter). Ваш скрипт станет например таким:

DirectShowSource("d:\x264_aac.mp4", fps=25, convertfps=true) # подстройте fps при необходимости

некоторые другие форматы:

* RM/RMVB (RealMedia / RealMedia с переменным битрейтом; обычно содержит Real Video/Audio): установите rmvb splitter и Real кодеки путем устанвки RealPlayer/RealAlternative. Создайте скрипт:

DirectShowSource("d:\clip.rmvb", fps=25, convertfps=true) # подстройте fps при необходимости

* WMV/ASF (Windows Media Video / Advanced Systems Format; обычно содержит WMV/WMA): этот формат не полностью поддерживается ffdshow, так что вы должны будете установить wmv кодеки. Возьмите WMF SDK v9 для W2K или позже для XP/Vista который содержит кодеки (и DMO упаковщики (wrappers) необходимые для использования DMO фильтров в DirectShow). (Заметьте, что собственный кодек Microsoft VC1 не поддерживается в W2K так как вам необходим WMF SDK v11.) Создайте скрипт:

DirectShowSource("d:\clip.wmv", fps=25, convertfps=true) # подстройте fps при необходимости

1.2) Загрузка видео клипов в AviSynth

Как уже объяснялось, вообще есть два способа загрузить ваше видео в AviSynth:

  1. используя AviSynth функцию или плагин, которые разработаны для открытия некоторого специального формата.
  2. используя DirectShowSource.

Список всех этих плагинов и принимаемых форматов дан ниже.

1) AviSynth фильтры и плагины, предназначенные для открытия специфических форматов:

AviSource - AVI/VDR:

AviSource поддерживает все виды AVI (в том числе с MP3 (VBR MP3) или AC3 аудио). Он также поддерживает DV типа 1 и типа 2, и фрейм-серверные файлы VirtualDub (VDR).

AVI может быть загружен в AviSynth при условии, что вы имеете соответствующий установленный VfW кодек для декодирования данного формата AVI. Кодек по умолчанию, используемый для декодирования AVI, указан в заголовке медиа файла (в его заголовке) как FourCC (FOUR Character Code, четырех-символьный код). Начиная с версии 2.55 в AVISource добавлена опция fourCC, которая позволяет использовать другие кодеки для загрузки вашего AVI.

Несколько примеров:

AviSource("d:\filename.avi")

или без audio:

AviSource("d:\filename.avi", false)

Явное указание декодера, который будет использован для загрузки клипа в AviSynth:

# load your avi using the XviD codec:
AviSource("d:\filename.avi", fourCC="XVID") # открывает avi (например DivX3) используя кодек XviD

# загружаем ваш dv-avi используя Canopus DV кодек:
AviSource("d:\filename.avi", fourCC="CDVC")

# vdr-файлы (файлы фреймсервера VirtualDub):
AviSource("d:\filename.vdr") 

Если AviSynth жалуется о невозможности загрузить ваш avi (couldn't decompress ...) вам необходимо установить соответствующий кодек. Программа GSpot, например, скажет вам, какой кодек вам необходимо установить для возможности проигрывать ваш avi.

Mpeg2Source/DGDecode - MPEG1/MPEG2/VOB/TS/PVA:

DGDecode (старая версия называлась Mpeg2Dec3) является вшеншим плагином и поддерживает MPEG-1, MPEG-2 / VOB, TS и PVA потоки. Откройте их сначала в DGIndex (или Dvd2avi 1.76/1.77.3 для Mpeg2Dec3) и создайте d2v файл, который может быть открыт в AviSynth (заметьте, что это будет открывать только видео в AviSynth):

Немного примеров:

# старый Mpeg2dec3; если вам необходим d2v файл, созданный с dvd2avi 1.76/1.77.3
LoadPlugin("d:\mpeg2dec3.dll")
mpeg2source("d:\filename.d2v")

# DGDecode:
LoadPlugin("d:\dgecode.dll")
mpeg2source("d:\filename.d2v") 

Заметьте, что Mpeg2Dec3 очень ограничен по сравнению с DGDecode, так как это в сущности более старая версия той же программы, развитие которой ведется теперь под названием DGDecode, и он поддерживает только MPEG-2 / VOB.

RawSource - бесформатные (сырые, raw) форматы с заголовком или без:

Внешний плагин RawSource поддерживает все виды бесформатных (raw) видео файлов с заголовком YUV4MPEG2 или без заголовка (видео файлы, которые содержат YUV2, YV16, YV12, RGB или Y8 видео данные, записанные кадр за кадром без сжатия).

Примеры:

# Следующее предполагает, что есть соответствующий YUV4MPEG2-заголовок внутри:
RawSource("d:\yuv4mpeg.yuv")

# Бесформатный файл с RGBA данными:
RawSource("d:\src6_625.raw",720,576,"BGRA")

# Вы можете указать байтовую позицию видеокадров в файле прямо
# (что может быть найдено  с помощью yuvscan.exe).
# Это полезно, если это видео не сосем неформатированное,
№ но например несжатые файлы MOV или файлы с некоторым специфичным заголовком:
RawSource("d:\yuv.mov", 720, 576, "UYVY", index="0:192512 1:1021952 25:21120512 50:42048512 75:62976512")

QTSource (с QuickTime 6 или 7) и QTReader - MOV/QT:

Есть два способа загрузить ваши quicktime mov видео в AviSynth (и еще RawSource для несжатых mov): QTSource и QTReader. Первый появился недавно и способен открыть многие форматы quicktime (с возможностью открыть их как YUY2), но вам необходимо установить проигрыватель QuickTime player для возможности использовать данный плагин. Второй (QTReader) - очень старый, не требуется установка проигрывателя для открытия форматов quicktime в AviSynth.

QTSource:

Вам необходим Quicktime 6 для получения только видео или Quicktime 7 для получения аудио и видео.

# YUY2 (по умолчанию):
QTInput("FileName.mov", color=2)

# с аудио (с QuickTime 7 возможно во многих случаях)
QTInput("FileName.mov", color=2, audio=true)

# бесформатное (raw) (с примером YUYV):
QTInput("FileName.mov", color=2, mode=1, raw="yuyv")

# dither = 1; преобразует бесформатное (raw) 10 бит в 8 бит видео (v210 = 10 бит uyvy):
QTInput("FileName.mov", color=2, dither=1, raw="v210")

QTReader:

# Если это не работает, или вы не имеете QuickTime, скачайте плагин QTReader
(может быть найден в разделе загрузок Doom9):
LoadVFAPIPlugin("C:\QTReader\QTReader.vfp", "QTReader")
QTReader("C:\quicktime.mov") 

Фильтр Import - для скриптов AviSynth:

Просто импортируйте скрипт используя Import в начале (или другом месте) вашего скрипта:

Import("d:\filename.avs")

В версии v2.05 или более поздних вы можете использовать автозагрузку скриптов AVSI. Просто поместите ваш AVS-файл в каталог автозагрузки плагинов, содержащий внешние плагины, и переименуйте расширение на 'avsi'. Смотри также FAQ для обсуждения.

2) DirectShowSource:

Взгляните на раздел "Другие контейнеры с аудио " для подробной информации.

1.3) Загрузка аудио клипов в AviSynth

Большинство аудио форматов могут быть загружены в AviSynth, но есть некоторые исключения такие как MPL или многоканальные WMA используя W98/W2K. Если невозможно загрузить клип в AviSynth, вы должны преобразовать их к некоторому другому формату, который может быть загружен. При этом помните о выборе такого формата, с которым вы получите минимальные (допустимые) потери в качестве в результате этого преобразования.

Воооще есть два способа загрузить ваше аудио в AviSynth:

  1. используя AviSynth фильтр или плагин, который предназначен для открытия некоторого специального формата.
  2. используя фильтр DirectShowSource.

Список всех этих плагинов и принимаемых ими форматов приведен ниже.

1) AviSynth фильтры и плагины, предназначенные для открытия специфических форматов:

WavSource - WAV:

WavSource поддерживает все виды WAV, такие как несжатые WAV или MP3/MP3/AC3/DTS аудио с заголовком WAVE. WAV может быть загружен в AviSynth при условии, что вы имеете соответствующий ACM codec установленным, который и используется для декодирования WAV. Кодек по умолчанию, используемый для декодирования WAV указан в начале медиа файла (в его заголовке; немного похоже на fourCC для видео кодеков).

audio: MP2/MP3 с заголовком WAVE:

Существует ACM кодек для MP2 называемый [QDesign]. Существует ACM кодеки для MP3 [Radium Codec] или [Lame ACM].

audio: AC3/DTS с заголовком WAVE (также называемые DD-AC3 и DTSWAV):

Существует ACM кодек для AC3 называемый [AC3ACM]. Есть ACM кодек для AC3/DTS называемый valex ACM codec [vac3acm].

Пример:

# DTS в WAV:
V = BlankClip(height=576, width=720, fps=25)
A = WAVSource("D:\audio_dts.wav")
AudioDub(V, A)

или если вы имеете WinDVD platinum, установите hypercube's DTSWAV filter.

Примеры:

xxx

MPASource - MP1/MP2/MP3/MPA:

Пример:

LoadPlugin("C:\Program Files\AviSynth25\plugins\mpasource.dll")
V = BlankClip(height=576, width=720, fps=25)
A = MPASource("D:\audio.mp3", normalize = false)
AudioDub(V, A)

NicAudio - MP1/MP2/MP3/MPA/AC3/DTS/LPCM:

Некоторые примеры:

LoadPlugin("C:\Program Files\AviSynth25\plugins\NicAudio.dll")

# AC3 audio:
V = BlankClip(height=576, width=720, fps=25)
A = NicAC3Source("D:\audio.AC3")
#A = NicAC3Source("D:\audio.AC3", downmix=2) # downmix to stereo
AudioDub(V, A)

# LPCM audio (48 kHz, 16 bit and stereo):
V = BlankClip(height=576, width=720, fps=25)
A = NicLPCMSource("D:\audio.lpcm", 48000, 16, 2)
AudioDub(V, A)

BassAudio - MP3/MP2/MP1/OGG/WAV/AIFF/WMA/FLAC/WavPack/Speex/Musepack/AAC/M4A/APE/CDA:

BassAudio может быть загружен там. Некоторые примеры:

# FLAC files:
bassAudioSource("C:\ab\Dido\001 Here With Me.flc")

# OGG files:
bassAudioSource("C:\ab\Dido\001 Here With Me.ogg")

# AAC files:
bassAudioSource("C:\ab\Dido\001 Here With Me.aac")
# Audio-CD копирование (Ripping) используя это плагин
# Загрузите BASSCD 2.2 с официального сайта BASS
# Извлеките basscd.dll и переименуйте его в bass_cd.dll
# Поместите bass_cd.dll в ту же папку что и bassAudio.dll
bassAudioSource("D:\Track01.cda")

2) DirectShowSource:

Посмотрите раздел " Другие контейнеры с audio" для информации. Некоторые directshow фильтры (помимо имеющихся в ffdshow) для Ogg Vorbis, Speex, Theora и FLAC могут быть найдены там.

аудио: MP2/MP3 с заголовком WAVE:

Используйте: разрешите MP1/2/3 декодирование с выбором mp3lib или libmad.

аудио: AC3/DTS с заголовком WAVE (также называемый DD-AC3 и DTSWAV):

Используйте fddshow: DTS декодирование разрешено и uncompressed: поддерживать все форматы.

Примеры:

# DTS в WAV:
V = BlankClip(height=576, width=720, fps=25)
A = DirectShowSource("D:\audio_dts.wav")
AudioDub(V, A)

или сделав graph:

# DTS в WAV:
# используем WAVE обработчик (parser) и ffdshow или AC3filter: [add screenshots]
V = BlankClip(height=576, width=720, fps=25)
A = DirectShowSource("D:\audio_dts_wav.grf", video=false)
AudioDub(V, A)

aac:

Возьмите AAC directshow фильтр такой как CoreAAC (удостоверьтесь что микширование отключено, если только вы не хотите микшировать) или ffdshow (с AAC установленным в libfaad или realaac), и используйте

DirectShowSource("d:\audio.aac")

чтобы загрузить ваш AAC.

1.4) Загрузка изображений в AviSynth

1) Используйте ImageReader или ImageSource для загрузки ваших картинок в AviSynth (может загрузить наиболее популярные форматы, за исключением GIF и анимированных форматовs). Смотри документацию для информации.

2) Используйте Immaavs плагин для GIF, анимированных форматов и других типов изображений.

# одиночная картинка:
immareadpic("x:\path\pic.bmp")

# анимированный gif:
immareadanim("x:\path\anim.gif")

2) Измененение приоритета DirectShow фильтров

Запустите Radlight Filter Manager и проверьре, какой из фильтров, способных проигрывать ваше клип, имеет более высокий приоритет (merit). Измените приоритет фильтра, которым вы хотите проигрывать, например:

и выполните перезагрузку компьютера (при необходимости). Согласно опыта, это не всегда работает. Например, в AC3Filter есть установка называемая "Filter Merit" которая по умолчанию установлена в 'Prefer AC3Filter' (Предпочитать AC3Filter). Хотя в рассматриваемом случае приоритет AC3Filter был установлен ниже, чем приоритет Moonlight Odio Dekoda (MERIT_NORMAL против MERIT_NORMAL+1), первый был использован для проигрывания AC3 (предположительно в результате этой установки 'Prefer AC3Filter' в AC3Filter; замена ее на 'Prefer other decoder' (Предпочитать другой декодер) решает проблему). Другие фильтры могут иметь подобные установки тоже.

3) Использование GraphEdit для создания графов DirectShow фильтров и загрузка этих графов в AviSynth

В качестве примера будет показано, как сделать граф, где CoreAAC аудио декодер будет использован для получения аудио из AVI-AAC файла. Точнее, будет показано, как ffdshow аудио декодер будет заменен CoreAAC аудио декодером, где первый имел более высокий приоритет (что подразумевает, что этот фильтр будет использован при проигрывании клипа в основанном на DirectShow проигрывателе таком как WMP6.4 или при открытии AVI прямо в AviSynth используя DirectShowSource):

Запустите GraphEdit и откройте ваш клип: File tab -> Open Graph -> Select All Files -> откройте ваш клип:

Щелкните правой кнопкой мыши на фильтре (ffdshow Audio decoder) -> Filter Properties -> измените настройки если необходимо.

Graph tab -> Insert Filters -> в пункте DirectShow Filters -> выберите CoreAAC Audio Decoder:

Нажмите Insert Filter (вставить фильтр). Удалите ffdshow аудио декодер путем его выбора и нажатием Delete:

Наконец, подсоедините CoreAAC аудио декодер, путем соединения выводов (pins) левой кнопкой мыши (стрелки будут нарисованы автоматически):

Проверьте и настройте свойства фильтра, если необходимо. Нажмите play чтобы проверить, что клип может проигрываться выбранной комбинацией DirectShow фильтров. Это очень важно, так как если он не проигрывается, AviSynth не будет способен открыть данный клип. В этом случае вы должны выбрать и установить другие фильтры, которые могут проиграть данный клип.

Наконец удалите WaveOut Device и видео фильтры, так как AviSynth нуждается в свободном выводе (pin) для своего подсоединения когда DirectShowSource вызывается в скрипте.

Сохраните граф как audio.grf. Если вы ходите также загрузить видео в AviSynth, оно должно быть загружено отдельно, используя другой граф (где аудио часть и Video Renderer удалены):

Сохраните граф как video.grf. Ваш скрипт станет:

vid = DirectShowSource("D:\video.grf", fps=25, convertfps=true, audio=false) # измените fps при необходимости
aud = DirectShowSource("D:\audio.grf", video=false)
AudioDub(vid, aud)

$English Date: 2007/06/23 20:11:00 $
Русский перевод 12.06.2007 Fizick