DirectShowSource のバックアップの現在との差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
 DirectShowSource(string filename [, float fps] [, bool seek] [, bool audio] [, bool video])
#pre{{
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は、Windowsメディアプレイヤーが使用しているのと同じマルチメディア再生システムであるDirectShowを使用してfilenameを読み取ります。メディアプレイヤーが再生することのできる、ほとんどのフォーマットを読み取ることができます。その中には、(DV Type-1、あるいはDirectShowのみのコーデックを使用するファイルのように)AVISourceがサポートしていないAVIファイルばかりでなく、MPEG、MP3、そしてQuickTimeファイルも含まれています。まず最初に、AVISourceでAVIファイルを読み込んでみてください。そして、それがうまく行かなかったら、代わりに、このフィルタを試してみてください。
DirectShowSource は、Windows Media Player が使用するマルチメディア再生システムの DirectShow を使って '''filename''' を読み込みます。(DV Type 1 や DirectShow のみのコーデックを使用するファイルのように)AVISource がサポートしない AVI ファイルばかりでなく、MPEG、MP3 や QuickTime を含む、Media Player が再生することのできるほとんどのフォーマットを読み込むことができます。まずは AVISource を使って AVI ファイルを読み込んでみてください。そして、もしそれがうまく行かなかったら、代わりにこのフィルタを試してみてください。

いくつかの注意があります:

+いくつかのデコーダ(特にMS MPEG-4)は、天地が逆さまのビデオを作り出すでしょう。その場合、FlipVerticalを使わなければなりません。
+DirectShowビデオデコーダは、正確なフレームのシーク(frame-accurate seeking)をサポートしなくても構いません。ほとんどの場合、シークは機能するでしょうが、場合によっては、うまく機能しないかもしれません。
+DirectShowビデオデコーダは、入力ビデオのフレームレートを知らせることさえも要求されません。ほとんどのデコーダはフレームレートを教えてくれますが、 ASFデコーダでは不可能です。fpsパラメータを使って、フレームレートを指定しなければなりません: DirectShowSource("video.asf", fps=15) 。
+このバージョンは、Microsoft DVコーデックを自動的に検出し、それを(ハーフではなく)フル解像度でデコードするようにします。これは注意ではないと思いますが。 :-)
+デコーダの中には(とりわけ MS MPEG-4)は、上下逆さまのビデオを作り出すものがあります。その場合、[[FlipVertical>Flip]] を使わなければなりません。
+DirectShow ビデオデコーダは、フレームアキュレートなシークをサポートする必要はありません。たいていの場合、シークは機能しますが、場合によっては機能しないこともあるかもしれません。
+DirectShow ビデオデコーダは、入力ビデオのフレームレートを知らせることさえも要求されません。ほとんどのデコーダはフレームレートを教えてくれますが、 ASF((訳者註: Microsoft 社の Windows Media で使用されるファイルコンテナ形式の 1 つ。Advanced Systems Format の略。参考: [[Advanced Systems Format - Wikipedia:http://ja.wikipedia.org/wiki/Advanced_Systems_Format]]。)) デコーダは教えてくれません。fps パラメータを使って、DirectShowSource("video.asf", fps=15) のようにフレームレートを明示する必要があります。
+このバージョンは、Microsoft DV コーデックを自動的に検出し、(ハーフ解像度ではなく)フル解像度でデコードさせます。これは、注意ではありませんね。 :-)
+またこのバージョンは、どんなデコーダベースのインターレース解除も無効にしようとします。

v2.53から、いくつかの機能が追加されました:
'''fps''': これは、ビデオのフレームレートを明示するために必要とされることがあります。もしフレームレートかフレーム数が間違っていたら(これは asf か mov クリップで起こり得ます)、正しいフレームレートを強制するために、このオプションを使用してください。

-DirectShowSourceにおける音声サポート。DirectShowSource is able to open formats like WAV/DTS/AC3/MP3, provided you can play them in WMP for example (more exact: provided they are rendered correctly in graphedit). The channel ordening is the same as in the [wave-format-extensible format], because the input is always decompressed to WAV. For more information, see also GetChannel. AviSynth loads 8, 16, 24 and 32 bit int PCM samples, and float PCM format, and any number of channels.
-フル・シークのサポート(ほとんどのファイル形式で利用可能)。
-GraphEdit(GRF)ファイルのサポート。
'''seek''' = true (v2.53 以降): フルシークをサポートします(ほとんどのファイルフォーマットに対して利用可能)。もし問題が起こるようなら、まず '''seekzero''' オプションを有効にしてみてください。それでもまだシークが問題を引き起こすなら、シークを完全に無効にしてください((訳者註: 「seek = false」にすることで、シークを無効化することができます。))。シークが無効化されると、後方にシークしようとするときに、オーディオストリームは無音を戻し、ビデオストリームは最後に描画されたフレームを返します。描画された最後のフレームが返されるほか、Avisynth のキャッシュが前の数フレームへの制限されたアクセスを提供するかもしれません。

#br
**Troubleshooting video and audio problems [#c35580b8]
AviSynth will by default try to open only the media it can open without any problems. If one component cannot be opened it will simply not be added to the output. This will also mean that if there is a problem, you will not see the error. To get the error message to the missing component, use audio=false or video=false and disable the component that is actually working. This way AviSynth will print out the error message of the component that doesn't work.
'''audio''' = true (v2.53 以降): DirectShowSource における音声サポートを有効にします。たとえば WMP((訳者註: Windows Media Player の略。)) で再生可能なら(より正確には、GraphEdit で正確にレンダリング((訳者註: 「ストリームのレンダリングに必要な残りのフィルタを GraphEdit が自動的に追加および接続すること」([[GraphEdit による TV ハードウェアおよびソフトウェアのテスト(MSDN Japan):http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/testingtvhardwareandsoftwarewithgraphedit.asp]]より引用。)))されるなら)、DirectShowSource は WAV/DTS/AC3/MP3 のようなフォーマットを開くことができます。入力はつねに WAV にデコードされるため、チャンネルオーダーは「[[WaveFormatExtensible フォーマット:http://www.cs.bath.ac.uk/~jpff/NOS-DREAM/researchdev/wave-ex/wave_ex.html]]((訳者註: 参考: [[WAVEFORMATEX:http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/directx9_c/directx/htm/waveformatex.asp]]、[[WAVEFORMATEXTENSIBLE:http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/directx9_c/directx/htm/waveformatextensible.asp]]、[[マルチチャンネル WAV フォーマット:http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/directx9_c/directx/htm/multichannelwavformats.asp]]))」と同じです。詳しくは、[[GetChannel]] を参照してください。AviSynth は、8、16、24、32 ビットの整数 PCM サンプルと浮動小数点数 PCM フォーマットを、何チャンネルでも読み込みます。

***"The Filter Graph won't talk to me" !!! [#w9c9781c]
'''video''' = true (v2.52 以降): false に設定すると、音声のみを開けるようになります。

This is a common error that occurs when DirectShow isn't able to deliver any format that is readable to AviSynth. Try creating a filter graph manually and see if you are able to construct a filter graph that delivers any output AviSynth can open. If not, you might need to download additional DirectShow filters that can deliver correct material.
'''convertfps'''((訳者註: convertfps パラメータの機能は、[[にゃおでぃお - 音楽圧縮に関するウェブページ (旧 Vorbish: 気まぐれなVorbis追っかけ):http://nyaochi.sakura.ne.jp/xoops/]]のにゃおち(Nyaochi)さんによる [[DirectShowSource with ConvertFPS:http://nyaochi.sakura.ne.jp/xoops/modules/mydownloads/singlefile.php?cid=2&lid=3]] が元になっています。参考: [[AviSynth Wiki - niiyan/2005-03-03:http://www.avisynth.info/?niiyan%2F2005-03-03#bc04a9f1]]。)) = false (v2.56 以降): true に設定すると、フレームを複製または省略することによって、可変フレームレート(vfr)のビデオを固定フレームレート(cfr)に変換します。AviSynth で vfr ビデオ(たとえば、混合フレームレートビデオを含む mkv、rmvb、mp4、asf や wmv)を開きたいときに役立ちます。'''fps''' パラメータを vfr ビデオを構成するレートの最小公倍数(たとえば 120 や 119.880)に設定すると、非常に有効です。

***The samplerate is wrong! [#s275812c]
'''seekzero''' = false (v2.56 以降): クリップの開始点へのシークバックのみを制限するオプション。インデックス情報を持たない ASF のようなファイルでの限定的なシークを可能にします。もちろん、前方へのシークはこつこつと(すべてのサンプルを読み込むことによって)実行されます。

Some filters might have problems reporting the right samplerate, and then correct this when the file is actually playing. Unfortunately there is not way for AviSynth to correct this once the file has been opened. Use "AssumeSampleRate" and set the correct samplerate to fix this problem.
'''timeout''' = 60000 (ミリ秒単位。60000 ミリ秒 = 1 分)(v2.56 以降): DirectShow が描画を拒否したときの待ち時間を設定します。正の値に設定すると、映像に関しては空のフレームが、音声に関しては無音が返されます。負の値に設定すると、ランタイム例外が投げられます。

***My sound is choppy [#dc8375c8]
'''pixel_type''' (v2.56 以降): 生成されるクリップのピクセルタイプ。"YV12"、"YUY2"、"ARGB"、"RGB32"、"RGB24"、"YUV"、"RGB" または "AUTO" のいずれかを指定可能。IPin ネゴシエーション((訳者註: [[まるも製作所:http://www.marumo.ne.jp/]]の[[6月15日(水) DirectShow の仕組み [4]:http://www.marumo.ne.jp/db2005_6.htm#15]]を参照。))に関して、受け入れ可能なビデオストリームのサブフォーマットを制限します。グラフビルダは、リクエストを満たすためにフォーマットコンバータを追加するかもしれません。そのため、使われているコーデックが、実際に、選択されたフォーマットにデコードできることを確認してください。マイクロソフトのフォーマットコンバータで何とか事足ります。"YUV" と "RGB" の疑似タイプはそれぞれ、すべてのサポートされている YUV フォーマットまたは RGB フォーマットへのネゴシエーションを制限します。

Unfortunately it is not possible seek 100% accurately in DirectShow. The precision usually depends on the container format. Open the sound another way, or demux your video file and serve it to AviSynth another way. Otherwise you can specify "seek = false" as a parameter.
'''framecount''' (v2.57 以降): これは、ビデオの総フレーム数を明示するために必要とされることがあります。フレームレートかフレーム数が間違っているなら(これは、asf や mov クリップで起こりえます)、正しいフレーム数を強制するためにこのオプションを使用してください。fps も明示された場合、オーディオストリームも調節されます。

**Common tasks [#jf61e7e0]
There are essentially two ways to do this. The first is to set the downmixing in the configuration of your AC3 decoder itself, and the second one is to use the external downmixer of "Trombettworks":
'''logfile''' (v2.57 以降): このオプションを使ってデバッグ用のログファイルの名前を指定してください。

1) Install AC3filter. Open the AC3 file in WMP6.4 and select the file properties. Set the output of AC3Filter on 2/0 - stereo. If you want the best possible quality, select PCM Float as Sample format.
'''logmask''' = 35 (v2.57 以降): logfile を指定した時、このオプションを使ってどの情報を記録するのかを選択してください。

Make the following script:
|~値|~データ|
|1|フォーマットネゴシエーション|
|2|受信サンプル|
|4|GetFrame/GetAudio コール|
|8|Directshow コールバック|
|16|Directshow へのリクエスト|
|32|エラー|
|64|COM オブジェクトの使用回数|
|128|新規オブジェクト|
|256|その他の情報|
|512|待機イベント|

 v = Mpeg2Source("e:\movie.d2v")
 a = DirectShowSource("e:\Temp\Test2\test.ac3")
 AudioDub(v,a)
記録する必要のあるデータの値を足してください。すべてを記録するには -1 を指定してください。デフォルト(35)は、フォーマットネゴシエーションと受信されたサンプルとエラー(すなわち、1+2+32)を記録します。

Finally, open the script in vdub and convert the audio stream to MP3 (of course you can also demux the downmixed WAV stream if needed).
** 使用例 [#r4d62508]

2) Register the directshow filter [Channel Downmixer by Trombettworks] (under start -> run):
最初に利用可能な RGB フォーマット(音声なし)で AVI ファイルを開く:

 regsvr32 ChannelDownmixer.ax 
#pre{{
DirectShowSource("F:\TestStreams\xvid.avi", 
\       fps=25, audio=false, pixel_type="RGB")
}}

Open the AC3 file in WMP6.4 and select the file properties. Set the output of AC3Filter on 3/2+SW 5.1 channels (this downmixer can't handle PCM Float, thus PCM 16 bit is selected here). In the properties of the downmixer, the number of input and output channels should be detected automatically. Check whether this is indeed correct.
Microsoft の DV デコーダを使って DV クリップを開く:

Make the following script:
#pre{{
DirectShowSource("F:\DVCodecs\Analysis\Ced_dv.avi") # MS-DV
}}

 v = Mpeg2Source("e:\movie.d2v")
 a = DirectShowSource("e:\Temp\Test2\test.ac3")
 AudioDub(v,a)
可変フレームレートの mkv を、フレームを追加することによって(同期を確保して) 119.88 fps として開く:

Finally, open the script in vdub and convert the audio stream to MP3 (of course you can also demux the downmixed WAV stream if needed).
#pre{{
DirectShowSource("F:\Guides\Hybrid\vfr_startrek.mkv",
\ fps=119.88, convertfps=true)
}}

For some reason, I can't get this to work with DTS streams :(
RealMedia の *.rmvb((訳者註: RealMedia Variable Bitrate Movie File の拡張子。Variable Bitrate は「可変ビットレート」の意味。参考: [[RealMedia - Wikipedia:http://ja.wikipedia.org/wiki/RealMedia]]))

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

GraphEdit ファイルを開く:

#pre{{
V=DirectShowSource("F:\vid_graph.grf", audio=False) # 映像のみ(オーディオレンダラは削除される)
A=DirectShowSource("F:\aud_graph.grf", video=False) # 音声のみ(ビデオレンダラは削除される)
AudioDub(V, A)
}}

音声の使用例に関しては、下記参照。

** ビデオとオーディオ問題のトラブルシューティング [#b2c4a952]

AviSynth は、デフォルトで何の問題もなく開くことのできるメディアのみを開こうとします。あるコンポーネントが開けない場合、そのコンポーネントは単に出力ファイルに追加されません。要するに、たとえ問題があってもエラーを確認できない、ということにもなります。失われたコンポーネントに対するエラーメッセージを得るには、audio=false または video=false を使って、実際に機能しているコンポーネントを無効化してください。これで AviSynth は、機能していないコンポーネントに関するエラーメッセージをプリントアウトします。

*** 「RenderFile, the filter graph manager won't talk to me」 [#de152652]

これはよくあるエラーで、DirectShow が AviSynth で読み込み可能なフォーマットを転送できないときに発生します。フィルタグラフを手動で作成して、AviSynth が開くことのできる出力を転送するフィルタグラフを構築できるかどうか確認してください。もしできないなら、追加で正しい素材を転送できる DirectShow フィルタをダウンロードする必要があるかもしれません。

*** The samplerate is wrong! [#q6d59eda]

DirectShow フィルタの中には、正しいサンプリング周波数を報告することに問題があり、そのうえ実際にファイルが再生されているときにこれを補正するものがあるかもしれません。残念ながら、いったんファイルが開かれると、AviSynth にはこれを補正する方法はありません。この問題を修正するには、[[AssumeSampleRate]] を使って、正しいサンプリング周波数を設定してください。

*** My sound is choppy [#pb59c1de]

残念なことに、Directshow はサンプルアキュレートなシークのサポートを要求されません。別の方法で音声を開くか、もしくはビデオファイルを分離して別の方法で AviSynth に供給してください。ほかにパラメータとして「seekzero = true」または「seek = false」を指定したり、[[EnsureVBRMP3Sync]] フィルタを使って Directshow オーディオストリームへのリニアアクセスを強制することもできます。

*** My ASF renders start fast and finish slow [#vf46e98d]

Microsoft は、最善と考えて ASF デマルチプレクサにおける ASF ストリームのタイミングを実装することを選択しました。その結果、リアルタイムより速く ASF フォーマットファイルを取り除くことは不可能となっています。このことは最初にストリームの処理を開始するときに最も明らかで、通常、Avisynth スクリプトを開いた後、ビデオ編集ソフトを設定するのにしばらく時間がかかります。この間ずっと、マルチプレクサは'''クレジット'''タイムを蓄積しています。その後ストリームの処理を開始すると、リアルタイムに追いつくまで最高速度で急ぎ、その時点でソース素材のリアルタイムのレートまで速度を落とします。この機能は、24fps の ASF 素材を PAL 方式のダイレクト再生のために AviSynth を使って 25fps にリクロックすることを不可能にします。

** 一般的なタスク [#o070f56e]

このセクションでは、100% 明白ではないかもしれない、さまざまなタスクについて説明されています。 :)

*** GRF ファイルを開く [#g9c320e2]

GraphEdit の GRF ファイルは、.grf というファイル名拡張子によって自動的に検出され、DirectShowSource によって直接読み込まれます。AviSynth がそれに接続できるようにするには、AviSynth が接続可能なメディアタイプのピンを GraphEdit で開いておかなければなりません。AviSynth は、どんなフィルタも切断しようとはしません。そのため、出力タイプが正確であることが重要です。DirectShowSource は、YV12、YUY2、ARGB、RGB32、RGB24 のビデオフォーマットと、32 ビット、24 ビット、16 ビット、8 ビットの PCM と IEEE FLOAT のオーディオフォーマットのみ受け入れます。

与えられた GRF ファイルは、DirectShowSource が開いているピンへの接続を試みる時の混乱を避けるために、オーディオストリームかビデオストリームのいずれか 1 つのみをターゲットとすべきです。バージョン 2.5.7 からは、この単一ストリーム制限が強制されます。

*** AC3 をステレオにダウンミックスする [#rb3a3077]

これを行う方法は、基本的に 2 つあります。1 つ目は、AC3 デコーダ自身の設定でダウンミックスを設定することです。2 つ目は、「Trombettworks」という外部のダウンミキサを使用することです:

1) AC3filter をインストールしてください。Windows Media Player 6.4 で AC3ファイルを開き、ファイルのプロパティを選択してください。AC3Filter の出力を 2/0 - stereo に設定してください。もし最高品質にしたいなら、Sample フォーマットとして PCM Float を選択してください。

&ref(ac3downmix1a.jpg);
&ref(ac3downmix1b.jpg);

次のスクリプトを作成してください:

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

最後に VirtualDub でこのスクリプトを開いて、オーディオストリームを MP3 に変換してください(もちろん、必要なら、ダウンミックスされた WAV ストリームを分離することもできます)。

2) [[Trombettworks の Channel Downmixer:http://www.trombettworks.com/directshow.php]] DirectShow フィルタをレジストリ登録してください(スタート -> ファイル名を指定して実行)((訳者註: 同梱されている Register ChannelDownmixer.bat でも登録することができるようです。)):

 regsvr32 ChannelDownmixer.ax

Windows Media Player 6.4 で AC3 を開き、ファイルのプロパティを選択します。AC3Filter の出力を ''3/2+SW 5.1 channels'' に設定します(このダウンミキサは PCM Float を扱うことが出来ません。そのため、ここでは PCM 16bit が選択されています)。ダウンミキサのプロパティでは、入出力チャンネルが自動的に検出されなければなりません。これが実際に正しいかどうかチェックしてください。

&ref(ac3downmix2a.jpg); 
&ref(ac3downmix2b.jpg);

&ref(ac3downmix2c.jpg);

次のスクリプトを作成してください:

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

最後に VirtualDub でこのスクリプトを開き、音声ストリームを MP3 に変換してください(もちろん、必要なら、ダウンミックスされた WAV ストリームを分離することもできます)。

どういうわけか、これは DTS ストリームではうまく行きません :(

''更新履歴''

|v2.56|convertfps は、フレームを追加することによって VFR を CFR にする|
|~|seekzero は、先頭へのシークのみを制限する|
|~|timeout は、扱いにくいグラフへの反応を制御する|
|~|pixel_type は、出力ビデオのピクセルフォーマットを明示/制限する|
|v2.57|framecount は、ストリームの長さをオーバーライドする。|
|~|logfile と logmask は、デバッグロギングを指定する。|

#hr

註: このページは、AviSynth 2.5.8 RC3 に同梱されている英語版ヘルプの日本語訳です。原文は、AviSynth をインストールしたフォルダ内の Docs/english/corefilters/directshowsource.htm にあります。なお、このページのテキストおよび画像のライセンスは、オリジナルのそれに準じます。詳しくは、[[AboutLicense]] を参照してください。