## 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` čte soubor v parametru filename s použitím DirectShow, stejného multimediálního přehrávacího systému, který používá Windows Media Player. Může číst většinu formátů které Media Player umí přehrát, včetně MPEG, MP3, a QuickTime, stejně jako AVI soubory které `AVISource` nepodporuje (jako DV typ 1, nebo soubory používající pouze DirectShow kodeky). Zkuste nejdřív přečíst AVI soubory pomocí `AVISource` , a pokud to nepůjde pak zkuste tento filtr.

Několik upozornění:

- Některé dekodéry (zvlášť MS MPEG-4) budou produkovat převrácené video hlavou dolů. Budete muset použít `FlipVertical`.
- DirectShow video dekodéry nemusí podporovat přesné vyhledávání (seekování) po snímcích. Většinou vyhledávání bude fungovat, ale někdy nemusí.
- DirectShow video dekodéry nemusí sdělit snímkovou frekvenci vstupního videa. Většinou to dělají, ale ASF dekodér ne. musíte zadat snímkovou frekvenci pomocí parametru fps, jako zde: `DirectShowSource` ("video.asf", fps=15).
- Tato verze automaticky detekuje Microsoft DV kodek a nastaví ho na dekódování v plném (místo v polovičním) rozlišení. Předpokládám, že nejsou námitky :-)
- Také se tato verze snaží vypnout jakékoliv odstranění prokládání v dekodéru.

fps: Toto je občas potřeba pro zadání snímkové frekvence videa. Pokud jsou frekvence snímků nebo počet snímků nesprávné (to se může stát u asf nebo mov klipů), použijte tuto volbu pro vynucení správné frekvence snímků.

seek = true (od v2.53): Toto je plná podpora vyhledávání (dostupná ve většině formátů). Jestli se objeví problémy, zkuste nejdřív zapnout volbu seekzero, pokud vyhledávání stále působí problémy úplně vypněte vyhledávání. S vypnutým vyhledáváním vrátí audio stream ticho a video stream poslední zpracovaný snímek, když se snažíte vyhledávat zpět. Všimněte si, že vyrovnávací paměť Avisynthu může zajistit omezený přístup k několika předchozím snímkům, po kterých je vrácen poslední zpracovaný snímek.

audio = true (od v2.53): Toto je audio podpora v DirectShowSource. DirectShowSource je schopen otevřít formáty jako WAV/DTS/AC3/MP3, za podmínky, že je můžete přehrát například ve WMP (přesněji: za podmínky, že jsou správně rendrovány v grapheditu). Pořadí kanálů je stejné jako v [wave-format-extensible format], protože vstup je vždy dekomprimován do WAV. Pro více informací, se podívejte také na `GetChannel` . AviSynth načítá 8, 16, 24 a 32 bitové celé PCM vzorky, a desetinný PCM formát, a jakýkoliv počet kanálů.

video = true (od v2.52 ): Když ho nastavíte na false, otevřete pouze audio.

convertfps = false (od v2.56): Bude-li nastaven na true převede proměnnou snímkovou frekvenci videa (vfr) na konstantní snímkovou frekvenci videa (cfr) duplikováním nebo vynecháním snímků. To je užitečné, když chcete otevřít vfr video (například mkv, rmvb, mp4, asf nebo wmv s hybridním videem) v AviSynthu. Nejvíce užitečné je to když je parametr fps nastaven na nejmenší společný násobek komponent vfr rychlostí, t.j. 120 nebo 119.880.

seekzero = false (od v2.56 ): Volba omezení vyhledávání pouze při pohybu zpět k začátku. Dovolí omezené vyhledávání v neindexovaných souborech ASF. Vyhledávání vpřed je samozřejmě proveden tvrdým způsobem (čtením všech snímků).

timeout = 60000 (v millisekundách; 60000 ms = 1 min) (od v2.56): K nastavení času vyčkání ve chvíli, kdy DirectShow odmítá rendrovat. Kladné hodnoty vrací prázdné snímky pro video a ticho pro audio stream. Záporné hodnoty vyvolají výluku zpracování v Avisynthu.

pixel_type (od v2.56): Typ pixelu výsledného klipu, může to být "YV12", "YUY2", "ARGB", "RGB32", "RGB24", "YUV", "RGB" nebo "AUTO". Ve výchozím stavu, jsou DirectShow filtry volné pro výzvu všech jejich podporovaných media typů podle jejich volby. Některé DirectShow filtry to mají špatně. Argument pixel_type omezuje přípustný subformát video streamu pro odsouhlasení vstupního pinu (IPin). Všimněte si, že graph builder může přidat převodník formátu aby splnil váš požadavek, proto se přesvědčte, že použitý kodek může skutečně dekódovat do vámi vybraného formátu. Převodník formátu M$ je dostatečný. Pseudo typy "YUV" a "RGB" omezují odsouhlasení do všech podporovaných YUV nebo RGB formátů.Pseudo-typ "AUTO" povoluje umožnění použít všechny relevantní formáty podle pořadí vlastností YV12, YUY2, ARGB, RGB32, RGB24. Mnohé DirectShow filtry to mají špatně, což je důvod proč to není zapnuto jako výchozí možnost. Možnost existuje takže máte dostatek prostředků ovládání pro podporu maximálního rozsahu filtrů pro předávání vašich médií. (Viz diskuze.)

framecount (od v2.57 ): Někdy je potřeba zadat počet snímků videa. Pokud je snímková frekvence nebo počet snímků nesprávný (to se může stát u asf nebo mov klipů), použijte tuto volbu pro vynucení správného počtu snímků. Pokud je fps zadáno, tak je přizpůsobena také délka audio streamu.

logfile (od v2.57): Použijte tuto volbu pro zadání názvu ladícího log souboru.

logmask = 35 (od v2.57): Když je zadaný log soubor, použijte tuto volbu pro výběr informací, které jsou zapisovány.

Hodnota | Data
--- | ---
1 | Odsouhlasení formátu (Format Negotiation)
2 | Obdržené vzorky (Receive samples)
4 | Volání snímků/zvuku (GetFrame/GetAudio calls)
8 | Zpětná volání Directshow (Directshow callbacks)
16 | Požadavky na Directshow (Requests to Directshow)
32 | Chyby (Errors)
64 | Výčet použití objektů COM (COM object use count)
128 | Nové objekty (New objects)
256 | Doplňkové informace (Extra info)
512 | Případy očekávání (Wait events)

Dejte dohromady hodnoty údajů, které potřebujete zapsat. Zadejte -1 pro zapsání všeho. Výchozí, 35, logs Format Negotiation, Received samples a Errors. t.j 1+2+32

### Příklady

Otvírá avi v prvním dostupném RGB formátu (bez zvuku):

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

Otvírá DV klip použitím MS DV dekodéru:

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

Otvírá mkv s proměnnou frekvencí snímků jako 119.88 cestou přidání snímků (zajišťuje synchronizaci):

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

Otvírá realmedia *rmvb klip:

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

Otvírá soubor GraphEdit:

    V=DirectShowSource("F:\vid_graph.grf", audio=False) # pouze video (audio renderer odstraněn)
    A=DirectShowSource("F:\aud_graph.grf", video=False) # pouze audio (video renderer odstraněn)
    AudioDub(V, A)

Podívejte se níže na některé příklady audia.

### Řešení video a audio problémů

AviSynth se ve výchozím stavu pokusí otevřít pouze média, která může otevřít bez problémů. Pokud nějaké komponenta nejde otevřít, jednoduše nebude přidána do výstupu. To také znamená, že pokud je problém neuvidíte chybu. Pro obdržení zprávy o chybě chybějící komponenty použijte audio= false nebo video= false a vypněte komponentu, která ve skutečnosti pracuje. Tak AviSynth zobrazí zprávu o chybě komponenty, která nepracuje.

#### RenderFile, the filter graph manager won't talk to me

To je obecná chyba, která vzniká, když DirectShow nemůže poskytnout žádný formát čitelný pro AviSynth. Zkuste vytvořit filter graph ručně a podívejte se jestli můžete vytvořit filter graph, který doručí nějaký výstup, který AviSynth otevře. Pokud se to nepodaří, budete muset stáhnout doplňující DirectShow filtry, které umí doručit správný materiál.

#### Vzorkovací frekvence je špatná

Některé filtry mají problémy se sdělením správné vzorkovací frekvence, a upravit ji při skutečném přehrávání souboru. Naneštěstí není způsob, kterým by to AviSynth opravil, po tom, kdy už byl soubor otevřen. Použijte AssumeSampleRate a nastavte správnou vzorkovací frekvenci pro opravu tohoto problému.

#### Můj zvuk je trhaný

Naneštěstí Directshow nevyžaduje podporu přesného vyhledávání vzorků. Otevřete zvuk jiným způsobem, nebo demuxujte váš video soubor a předložte ho AviSynthu jiným způsobem. Jinak je možné zadat "seekzero = true" nebo "seek = false" jako parametry, nebo použít filtr EnsureVBRMP3Sync pro vynucení lineárního přístupu do Directshow audio streamu.

#### Můj zvuk je nesynchronní s videem

To se může stát zvláště u WMV, zřejmě kvůli vracené proměnné frekvenci snímků videa. Určete jaká by měla být fps a nastavte ji explicitně, a také použijte "ConvertFPS" pro její vynucení aby zůstala konstantní. A EnsureVBRMP3Sync snižuje problémy s proměnnou rychlostí audia.

    DirectShowSource("video.wmv", fps=25, ConvertFPS=True)
    EnsureVBRMP3Sync()

#### Moje přehrávání ASF začíná rychle a končí pomalu

Microsoft se ve své nekonečné moudrosti rozhodl změnit implementovaný ASF stream timing v ASF demuxeru. A protože není možné uvolnit soubory formátu ASF rychleji než v reálném čase. To je nejvíce vidět při startu procesu zpracování streamů, obvykle po otevření skriptu Avisynthu potřebujete nějaký čas, aby se zkonfiguroval váš video editor, a mezitím muxer stále hromadí credit času. Když pak začnete zpracování vašeho streamu, běží s maximální rychlostí dokud nedoženete reálný čas, v tomto místě se zpomalí na reálnou rychlost materiálu zdroje. Tato zvláštnost znemožňuje Avisynthu přetaktovat frekvenci 24fps ASF materiálu na 25fps pro přímé přehrávání v PAL.

### Obecné úlohy

Tato kapitola popíše různé úlohy, které nemusí být 100% zřejmé. :)

#### Otvírání GRF souborů

GraphEdit GRF-soubory jsou automaticky detekovány podle přípony .grf a přímo načteny pomocí DirectShowSource. Aby byl AviSynth schopen připojit se k němu, musíte nechat v GraphEditu otevřené piny (spojovací body) těch typů medií, ke kterým se dokáže připojit také AviSynth. AviSynth se nubude snažit odpojit žádné filtry, takže je důležité aby byl správný typ výstupu. DirectShowSource přijímá pouze YV12, YUY2, ARGB, RGB32 a RGB24 video formáty a 32, 24, 16 a 8 bitové PCM a IEEE FLOAT audio formáty.

Daný GRF-soubor musí vyvést jen jeden výstup audio sreamu nebo video streamu, aby se vyhnul nedorozumění, kdy se Directshowsource pokouší připojit k vašemu otevřenému pinu(ům). Od verze 2.57 je toto jednostreamové omezení nezbytné.

#### Smíchání -snížení počtu- kanálů (Downmixing) AC3 na stereo

Ve skutečnosti existují dva způsoby jak to provést. Prvním je nastavení smíchání v konfiguraci vašeho AC3 dekodéru samotného, a druhým způsobem je použití externího směšovače (downmixer) od "Trombettworks":

1) Nainstalujte AC3filter. Otevřete AC3 soubor ve WMP6.4 a vyberte vlastnosti souboru. Nastavte výstup AC3Filtru na 2/0 - stereo. Pokud chcete nejvyšší možnou kvalitu, vyberte PCM Float jako Sample format.

Vytvořte následující skript:

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

Nakonec otevřete skript ve VirtualDubu a převeďte audio stream do MP3 (samozřejmě můžete také demuxovat smíchaný (downmixed) WAV stream pokud je potřeba).

2) Registrujte directshow filtr Channel Downmixer by Trombettworks (ve Start -> Spustit):

regsvr32 ChannelDownmixer.ax

Otevřete AC3 soubor ve WMP6.4 a vyberte vlastnosti souboru. Nastavte výstup AC3Filtru na 3/2+SW 5.1 channels (tento downmixer nepodporuje PCM Float, proto je zde zvoleno PCM 16 bit). Ve vlastnostech downmixeru, by měl být počet vstupních a výstupních kanálů určen automaticky. Zkontrolujte jestli je to opravdu správně.

Vytvořte následující skript:

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

Nakonec otevřete skript ve VirtualDubu a převeďte audio stream do MP3 (samozřejmě můžete také demuxovat smíchaný (downmixed) WAV stream pokud je potřeba).

Z nějakého důvodu mi to nejde udělat s DTS streamy :(

Změny

v2.56 | convertfps převádí vfr na konstantní cfr přidáním snímků
seekzero omezuje vyhledávání jen směrem k začátku
timeout ovládá odezvu na neposlušné grafy
pixel_type zadává/omezuje výstupní formát pixelu
v2.57 | framecount přepisuje délku streamů.
logfile a logmask ukazují ladící protokolování (záznamy).

`$English Date: 2009/07/12 12:49:34 $`

`Český překlad:18.9.2009`