DirectShowSource のバックアップ差分(No.12)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#code(nonumber){{
DirectShowSource(string filename [, float fps, bool seek, bool audio, bool video, bool convertfps, bool seekzero, int timeout, string pixel_type])
}}

** 解説 [#e82d4a4c]

''filename'': DirectShowSourceは、Windowsメディアプレイヤーが使用しているマルチメディア再生システムのDirectShowを使用してfilenameを読み取ります。メディアプレイヤーが再生することのできる、ほとんどのフォーマットを読み取ることができます。その中には、(DV Type-1、あるいはDirectShowのみのコーデックを使用するファイルのように)AVISourceがサポートしていないAVIファイルばかりでなく、MPEG、MP3、そしてQuickTimeファイルも含まれています。まず最初に、AVISourceでAVIファイルを読み込んでみてください。そして、それがうまく行かなかったら、代わりに、このフィルタを試してみてください。v2.53から、GraphEdit(grf)ファイルにも対応しています。

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

+いくつかのデコーダ(特にMS MPEG-4)は、天地が逆さまのビデオを作り出すでしょう。その場合、[[FlipVertical>Flip]]を使わなければなりません。
+DirectShowビデオデコーダは、正確なフレームのシーク(frame-accurate seeking)をサポートしなくても構いません。ほとんどの場合、シークは機能するでしょうが、場合によっては、うまく機能しないかもしれません。
+DirectShowビデオデコーダは、入力ビデオのフレームレートを知らせることさえも要求されません。ほとんどのデコーダはフレームレートを教えてくれますが、 ASFデコーダでは不可能です。fpsパラメータを使って、フレームレートを指定しなければなりません: DirectShowSource("video.asf", fps=15) 。
+このバージョンは、Microsoft DVコーデックを自動的に検出し、それを(ハーフではなく)フル解像度でデコードするようにします。これは注意ではないと思いますが。 :-)

''fps'': これは、ビデオのフレームレートを指定するために、時々、必要とされます。もしフレームレートかフレームの数が間違っているなら(これはasfかmovクリップについて起こりえます)、正しいフレームレートを強制するために、このオプションを使用してください。

''seek'' = true (v2.53から): 完全なシークのサポートがあります(ほとんどのファイルフォーマットに対して利用可能)。

''audio'' = true (v2.53から): DirectShowSourceにおいて、オーディオサポートがあります。もしあなたが、たとえばWMP((訳者註: Windows Media Playerの略。))で、WAV/DTS/AC3/MP3のようなフォーマットを再生することができるとすれば(より正確には: もしそれらのファイルがGraphEditで正しくレンダリングされるとすれば)、DirectShowSourceは、それらのファイルを開くことができます。チャンネルの配置(ordening)は、[[[wave-format-extensible format]:http://www.cs.bath.ac.uk/~jpff/NOS-DREAM/researchdev/wave-ex/wave_ex.html]]と同じです。なぜなら、入力ファイルは、つねにWAVに復元(decompress)されるからです。詳しくは、またGetChannelを見てください。AviSynthは、8, 16, 24, 32ビットのint(整数)型PCMサンプル、およびfloat(浮動小数)型PCMフォーマット、そしてチャンネルはいくらでも読み込みます。

''video'' = true (v2.52から): これをfalseに設定すると、オーディオしか開くことができません。
''video'' = true (v2.52から): これをfalseに設定すると、オーディオしか開くことができません。

''convertfps'' = false (v2.56から): フレームを追加することによって、可変フレームレート(vfr)のビデオを、固定フレームレート(cfr)のビデオにします。AviSynthにおいて、vfrビデオ(たとえば、混合フレームレートビデオ(hybrid video)のmkv, rmvb, mp4, asf または wmv)を開きたいときに役に立ちます。
''convertfps'' = false (v2.56から): フレームを追加することによって、可変フレームレート(vfr)のビデオを、固定フレームレート(cfr)のビデオにします。AviSynthにおいて、vfrビデオ(たとえば、混合フレームレートビデオ(hybrid video)のmkv, rmvb, mp4, asf または wmv)を開きたいときに役に立ちます。

''seekzero'' = false (v2.56から): 開始点へシークすることを制限するためのオプション。インデックス化されていないASFファイルに対して、限られたシークを許可します。前方へのシークは、もちろん地道に実行されます。
''seekzero'' = false (v2.56から): 開始点へシークすることを制限するためのオプション。インデックス化されていないASFファイルに対して、限られたシークを許可します。前方へのシークは、もちろん地道に実行されます。

''timeout'' = 60000 (in milliseconds; 60000 ms = 1 min) (in v2.56): To set time to wait when DirectShow refuses to render. Positive values return blank frames and/or silence.
''timeout'' = 60000 (ミリ秒単位。60000ミリ秒 = 1分) (v2.56から): DirectShowがレンダリングを拒否するときに待つ時間を設定します。正の値は、空のフレームと/または無音を返します。

''pixel_type'' (in v2.56): The pixel type of the resulting clip, it can be "YV12", "YUY2", "ARGB", "RGB32", "RGB24", "YUV", "RGB" or "AUTO". It limits the acceptable video stream subformats for the IPin negotiation. Note the graph builder may add a format converter to satisfy your request, so make sure the codec in use can actually decode to your chosen format. The M$ format converter is just adequate.
''pixel_type'' (in v2.56): 結果として生じるクリップのピクセル・タイプ。"YV12", "YUY2", "ARGB", "RGB32", "RGB24", "YUV", "RGB" または "AUTO"から指定できます。これは、IPinネゴシエーション((訳者註: [[まるも製作所:http://www.marumo.ne.jp/index.htm]]の[[6月15日(水) DirectShow の仕組み [4]:http://www.marumo.ne.jp/db2005_6.htm#15]]を参照。))のために、受け入れ可能なビデオストリームのサブフォーマットを制限します。あなたのリクエストを満たすために、グラフビルダーがフォーマットコンバータを追加するかもしれないということに注意してください。そこで、用いられているコーデックが、実際に、選択されたフォーマットにデコードできることを確めてください。たぶんM$フォーマットコンバータで事足ります。

** 例 [#d7d1b5af]

Opens an avi as RGB32 (without audio):
AVIをRGB32として開く(音声なし):
#code(nonumber){{
DirectShowSource("F:\TestStreams\xvid.avi",fps=25, audio=false, pixel_type="RGB")
}}

Opens a DV clip with the MS DV decoder:
DVクリップをMS DV デコーダで開く:
#code(nonumber){{
DirectShowSource("F:\Guides\DVCodecs\Analysis\Ced_dv.avi") # MS-DV
}}

Opens a variable framerate mkv as 119.88 by adding frames (ensuring sync):
フレームを追加することによって((ビデオとオーディオの)同期を確実にして)可変フレームレートのMKVを119.88fpsとして開く:
#code(nonumber){{
DirectShowSource("F:\Guides\Hybrid\vfr_startrek.mkv", fps=119.88, convertfps=true)
}}

Opens a realmedia *rmvb clip:
RealMediaの*rmvbクリップを開く:
#code(nonumber){{
DirectShowSource("F:\test.rmvb", fps=24, convertfps=true)
}}

Opens a GraphEdit file:
GraphEditファイルを開く:
#code(nonumber){{
DirectShowSource("F:\graph.grf")
}}

See below for some audio examples.
オーディオの例については、下記参照。

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

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

***"The Filter Graph won't talk to me" !!!(フィルタグラフが話かけてこないよ!!!) [#w9c9781c]

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

***The samplerate is wrong!(サンプリング周波数が不正!) [#s275812c]

いくつかのフィルタは、正しいサンプリング周波数を報告することに関して問題を抱えており、ファイルが実際に再生している時に、これを訂正するかもしれません。不幸なことに、いったんファイルが開かれてしまうと、AviSynthがこれを訂正する方法はありません。"AssumeSampleRate"を使って、正しいサンプリング周波数に設定し、この問題を修正してください。

***My sound is choppy(音声が途切れ途切れだ) [#dc8375c8]

不幸にも、DirectShowでは、100%正確にシークすることは不可能です。精度は、常に、コンテナ・フォーマットに左右されます。音声を別の方法で開くか、ビデオファイルを分離してから、AviSynthに渡してみてください。ほかに、"seek = false"をパラメータとして明示することもできます。

**コモン・タスク(Common tasks) [#jf61e7e0]
これを行うための方法は、本質的には、2つあります。その1つ目は、あなたが使用しているAC3デコーダ自身の設定でダウンミックスすることです。そして、2つ目の方法は、"Trombettworks"という外部のダウンミキサーを使うことです:

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

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

次のスクリプトを作成します:

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

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

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

 regsvr32 ChannelDownmixer.ax 

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

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

次のスクリプトを作成します:

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

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

何らかの理由により、DTSストリームでは、これがうまく行きません :(

''更新履歴''

|v2.56|convertfps, seekzero, timeout と pixel_typeを追加|

#hr
註: このページは、http://www.avisynth.org/DirectShowSourceの日本語訳です。

なお、[[にゃおでぃお - 音楽圧縮に関するウェブページ (旧 Vorbish: 気まぐれなVorbis追っかけ):http://nyaochi.sakura.ne.jp/xoops/]]で、DirectShowSourceフィルタプラグインに可変フレームレート(VFR)対応パッチをあてた[[DirectShowSource with ConvertFPS:http://nyaochi.sakura.ne.jp/xoops/modules/mydownloads/singlefile.php?cid=2&lid=3]]が公開されています([[参照>niiyan/2005-03-03#bc04a9f1]])。

(追記)~
上記のパッチは、v2.5.6(beta3以降)から、DirectShowSourceフィルタに取り込まれました。

> [[Doom9's Forum - AviSynth 2.5.6 CVS Pre-Releases. [May 6th]:http://forum.doom9.org/showthread.php?s=&postid=650235#post650235]]
> - Support for [vfr content in DSS]: DirectShowSource("F:\Guides\Hybrid\vfr_startrek.mkv", fps=119.88, convertfps=true) turns vfr into cfr stream by adding frames.