## DirectShowSource

`DirectShowSource` (string filename, float "fps", bool "seek", bool "audio", bool "video", bool "convertfps", bool "seekzero", int "timeout", string "pixel_type", int "framecount", string "logfile", int "logmask")

`DirectShowSource` считывает файл filename, используя DirectShow, ту же систему воспроизведения мультимедия, которую использует Windows Media Player. Может считывать большинство форматов, которые может воспроизводить Media Player, включая MPEG, MP3, и QuickTime, также как AVI файлы, которые `AVISource` не поддерживает (такие как DV тип 1, или файлы, использующие только DirectShow кодеки). Сначала надо попробовать считать AVI файлы с помощью `AVISource`, и если не заработает, тогда попробовать вместо него этот фильтр.

Некоторые предостережения:

- Некоторые декодеры (особенно MS MPEG-4) будут производить перевернутое по вертикали видео. Необходимо использовать `FlipVertical`.
- DirectShow видео декодеры не обязательно поддерживают покадрово точный поиск. В большинстве случаев поиск будет работать, но в некоторых может не работать.
- DirectShow даже не обязательно сообщают точную частоту кадров входящего видео. Многие сообщают, но ASF декодер не сообщает. Необходимо указать частоту кадров, используя параметр fps , в виде `DirectShowSource` ("video.asf", fps=15).
- Эта версия автоматически детектирует Microsoft DV кодек и настраивает его на декодирование в полном (вместо половинного) разрешения. Я предполагаю нет протестов :-)
- Также эта версия пытается отменить любой деинтерлейс в декодере.

fps: Иногда необходимо указать частоту кадров видео. Если частота кадров или число кадров некорректны (это может случиться с asf или mov клипами), используйте эту опцию, чтобы установить корректную частоту кадров.

seek = true (с v2.53): Полная поддержка поиска (доступная на большинстве форматов файлов). Если случатся проблемы, попытайтесь сначала разрешить опцию seekzero, если поиск все еще вызывает проблемы, полностью отмените поиск. С отмененным поиском, аудиопоток возвращает тишину, а видео поток - последний обработанный кадр, если попытаться делать поиск назад. Отметьте, что кэш Avisynth может обеспечить ограниченный доступ к нескольким предыдущим кадрам, за которыми будет возвращен последний обработанный кадр.

audio = true (с v2.53): Поддержка звука в DirectShowSource. `DirectShowSource` может открывать такие форматы как WAV/DTS/AC3/MP3, при условии, что их можно воспроизвести например в WMP (более точно: при условии, что они рендерятся корректно в GraphEdit). Порядок каналов такой же как в wave-format-extensible (расширяемом WAV)формате, т.к. вход всегда декомпрессируется в WAV. Для большей информации см также `GetChannel`. AviSynth загружает 8, 16, 24 и 32 бит целые PCM (ИКМ) аудио отсчеты, и аудио формат с плавающей точкой, и любое количество каналов.

video = true (с v2.52): Если установлено в false, это позволяет открыть только аудио.

convertfps = false (с v2.56): Преобразует переменную частоту кадров (vfr) в постоянную частоту кадров (cfr), добавляя кадры. Это полезно, когда надо открыть видео с переменой частотой кадров (например mkv, rmvb, mp4, asf или wmv с гибридным видео) в AviSynth. Это наиболее полезно, если параметр fps установлен в наименьший общий множитель компонент vfr скоростей, например 120 или 119.880

seekzero = false (с v2.56): Опция ограничивающая поиск только назад к началу. Это допускает ограниченный поиск с неидексированными файлами ASF. Поиск вперед - это конечно сделано трудным способом.

timeout = 60000 (в миллисекундах; 60000 ms = 1 мин) (с v2.56): Чтобы установить время ожидания, когда DirectShow отказывается рендерить. Положительные величины возвращают пустые кадры видео и тишину аудио потоков. Отрицательные величины вызывают Avisynth исключение во время выполнения.

pixel_type (с v2.56): Тип пиксела результирующего клипа, он может быть "YV12", "YUY2", "ARGB", "RGB32", "RGB24", "YUV", "RGB" или "AUTO". По умолчанию, расположенные выше по течению DirectShow фильтры свободны предложить все ими поддерживаемые медиафоматы в ими самими определямом порядке. Некоторые DirectShow фильтры делают это неверно. pixel_type ограничивает допустимый субформат видеопотока для согласования входного вывода (IPin). Заметьте, что построитель графа может добавить конвертер формата, чтобы выполнить ваш запрос, так что удостоверьтесь, что используемый кодек может действительно декодировать в выбранный вами формат. Конвертер форматов M$ как раз достаточен. "YUV" и "RGB" псевдо-типы ограничивают согласование до всех поддерживаемых yuv или rgb форматов соответственно. Псевдо-тип "AUTO" разрешает при согласовании использовать все подходящие форматы в следующем порядке предпочтения: YV12, YUY2, ARGB, RGB32, RGB24. Многие DirectShow фильтры делают это неверно, вот почему это не сделано по умолчанию. Данная опция существует, чтобы дать Вам достаточно возможностей содействовать максимальному сортаменту фильтров обслужить Ваши медиа файлы. (Смотри обсуждение.)

framecount (с v2.57): Иногда надо указать число кадров видео. Если частота кадров или число кадров некорректны (это может случиться с клипами asf или mov), используйте эту опцию, чтобы назначить коректное число кадров. Если также указана fps, то длина аудиопотока также подгоняется.

logfile (с v2.57): Используйте эту опцию, чтобы указать имя отладочного лог-файла протокола.

logmask = 35 (с v2.57): Если указан лог-файл, используйте эту опцию, чтобы выбрать, какая информация протоколируется.

Величина | Данные
--- | ---
1 | Согласование формата (Format Negotiation)
2 | Полученные отсчеты (Receive samples)
4 | Вызовы кадров/аудио (GetFrame/GetAudio calls)
8 | Обратные вызовы Directshow (Directshow callbacks)
16 | Запросы к Directshow (Requests to Directshow)
32 | Ошибки (Errors)
64 | Счет использования объектов COM (COM object use count)
128 | Новые объекты (New objects)
256 | Дополнительная информация (Extra info)
512 | Случаи ожидания (Wait events)

Сложите вместе величины для данных, которые Вы хотите протоколировать. Укажите -1 чтобы протоколировать все. По умолчанию 35 - Format Negotiation, Received samples и Errors, то есть 1+2+32

### Примеры

Открывает avi как первый доступный RGB формат (без аудио):

    DirectShowSource("F:\TestStreams\xvid.avi",fps=25, audio=false, pixel_type="RGB")

Открывает DV клип, используя MS DV декодер:

    DirectShowSource("F:\DVCodecs\Analysis\Ced_dv.avi") # MS-DV

Открывает mkv c переменной частотой кадров как 119.88 к/с путем добавления кадров (обеспечивая синхронизацию):

    DirectShowSource("F:\Guides\Hybrid\vfr_startrek.mkv", fps=119.88, convertfps=true)

Открывает realmedia *rmvb клип:

    DirectShowSource("F:\test.rmvb", fps=24, convertfps=true)

Открывает файл GraphEdit:

    V=DirectShowSource("F:\vid_graph.grf", audio=False) # только видео (аудио отменено)
    A=DirectShowSource("F:\aud_graph.grf", video=False) # только аудио (видео отменено)
    AudioDub(V, A)

Смотри ниже некоторые примеры с аудио.

### Устранение видео и аудио проблем

AviSynth по умолчанию будет пытаться открыть только медиа (компоненты), которые он может открыть без проблем. Если какой-либо компонент не может быть открыт, он просто не будет добавлен в выход. Это также означает, что если есть проблема, Вы не увидите ошибки. Для получения сообщения о ошибке отсутствующего компонента, используйте audio=false или video=false и запретите компонент, который на самом деле работает. В этом случае AviSynth выведет сообщение о компоненте, который не работает.

#### "RenderFile, the Filter Graph won't talk to me" ("Фильтерграф не говорит со мной", сообщение)

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

#### Скорость отсчетов не верна !

Некоторые фильтры по всей видимости имеют проблемы с сообщением правильной скорости следования отсчетов, и тогда корректируют это во время реального воспроизведения файла. К сожалению нет способа для AviSynth скорректировать это после того, как файл был открыт. Используйте AssumeSampleRate и установить правильную скорость отсчетов для устранения этой проблемы.

#### Мой звук неустойчивый

К несчастью DirectShow не требует поддержки точного поиска отсчетов. Откройте звук другим методом или отделите звук (demux) видео файла и подайте его в AviSynth другим методом. Иначе можно указать "seekzero = true" или "seek = false" как параметры или использовать EnsureVBRMP3Sync фильтр чтобы вынудить линейный доступ к Directshow аудио потоку.

#### Мои проигрывания ASF начинаются быстро и заканчиваются медленно

Microsoft в их бесконечной мудрости решила реализовать установление времени ASF потока в ASF разделителе (демуксере). A в результате невозможно раздеть файлы ASF формата быстрее, чем в реальное время. Это наиболее видно, когда вы сначала начинаете обрабатывать потоки; обычно после открытия Avisynth скрипта Вам требуется некоторое время, чтобы сконфигурировать ваш видеоредактор, все это время смеситель накапливает кредит времени. Когда Вы затем начинаете обработку потока, он бежит с максимальной скоростью, пока вы не догоните реальное время, в этой точке он замедляется до реальной скорости материала источнмка. Эта особенность делает невозможным использовать Avisynth чтобы пересчитать 24fps ASF материал в 25fps для прямого проигрывания PAL.

### Общие задачи

Этот раздел описывает разные задачи, которые могут не быть 100% очевидными. :)

#### Открытие GRF файлов

GRF-файлы GraphEdit (редактор графов, ГрафЭдит) автоматически детектируются по расширению .grf и прямо загружаются DirectShowSource. Чтобы AviSynth мог подсоединиться к нему, необходимо в GraphEdit оставить открытыми пины (соединительные точки) тех медиа типов, к которым AviSynth может подсоединиться. AviSynth не будет пытаться отсоединять никакие фильтры, так что важно, чтобы выходной тип был правильный. DirectShowSource принимает только YV12, YUY2, ARGB, RGB32 и RGB24 видео форматы и 32, 24, 16 и 8-битные PCM и IEEE FLOAT аудио форматы.

Данный GRF-файл должен выводить только один аудио или видео поток, чтобы избежать недоразумения, когда DirectShowSource пытается соединиться к вашему открытому пину (-ам). С версии 2.57 это однопотоковое ограничение обязательно.

#### Смешивание каналов (downmixing) АС3 в стерео

По существу есть два пути сделать это. Первый это установить смешивание каналов (downmixing) в конфигурации собственно используемого АС3 декодера, и второй это использование внешнего смесителя каналов (downmixer) от "Trombettworks":

1) Установите АС3filter. Откройте АС3 файл в WMP6.4 и выберите меню о свойствах файла. Установить выход АС3filter на 2/0 - stereo. Если хочется наилучшее возможное качество, выбрать PCM Float (ИКМ с отсчетами в виде чисел с плавающей точкой) как Sample format (формат отсчетов).

Сделайте следующий скрипт-файл:

    v = Mpeg2Source("e:\movie.d2v")
    a = DirectShowSource("e:\Temp\Test2\test.ac3")
    AudioDub(v,a)

В заключение, откройте этот скрипт в VirtualDub и сконвертируйте аудио поток в МР3 (конечно можно также отделить (demux) этот сокращенный WAV поток, если необходимо).

2) Зарегистрируйте DirectShow фильтр Channel Downmixer by Trombettworks (в Пуск -> Выполнить...):

regsvr32 ChannelDownmixer.ax

Откройте АС3 файл в WMP6.4 и выберите меню о свойствах файла. Установите выход AC3Filter на 3/2+SW 5.1 channels (этот смеситель каналов не может работать с PCM Float, так что здесь выбран РСМ 16 бит). В свойствах смесителя число входных и выходных каналов должно быть определено автоматически. Проверьте, что это действительно правильно.

Сделайте следующий скрипт:

    v = Mpeg2Source("e:\movie.d2v")
    a = DirectShowSource("e:\Temp\Test2\test.ac3")
    AudioDub(v,a)

В заключение, откройте этот скрипт в VirtualDub и сконвертируйте аудио поток в МР3 (конечно можно также отделить (демуксировать, demux) сокращенный WAV поток если необходимо).

По какой-то причине у меня не получается запустить это в работу с DTS потоками :(

Изменения

v2.56 | convertfps преобразует vfr в постоянный cfr добавлением кадров
seekzero ограничивает поиск к началу только
timeout управляет откликом на непокорные графы
pixel_type указывает/ограничивает формат пиксела выходного видео
v2.57 | framecount переопределяет длину потоков.
logfile и logmask указывают отладочное протоколирование.

`$English Date: 2008/12/07 15:47:16 $
Русский перевод 09.05.2005 Drakon Rider drakan.ru
Обновил 26.09.2005-10.12.2008 Fizick avisynth.org.ru`