Section4 Importing filters from VirtualDub
Q4.1: VirtualDubのフィルタをインポートするスクリプトの最新版は、どこでダウンロードすることができますか? †
A: AviSynthスクリプトは、ShareFunctionsページにあります。もしくは、vdub_filtersv15.zipというパッケージを[1]か[2]から、ダウンロードすることもできます。
Q4.2: どのフィルタがインポートされますか? †
A: ほとんどのフィルタが。関連するキュメントを読んでください。
Q4.3: これらのスクリプトは、RGB空間やYUV空間で動作しますか? †
A: RGB空間(RGB32)のみです。
Q4.4: そのようなスクリプトは、どうやって作るのですか? †
A: スクリプト例(このVirtualDubフィルタは、[Donalds homepage]から、ダウンロードすることが出来ます):
Smart Bob by Donald Graft:
function VD_SmartBob(clip ''clip'', bool ''show_motion'', int ''threshold'', bool ''motion_map_denoising'') LoadVirtualDubPlugin("d:\bob.vdf", "_VD_SmartBob", 1) return clip.SeparateFields._VD_SmartBob(clip.GetParity?1:0, \ default(show_motion,false)?1:0, default(threshold,10), \ default(motion_map_denoising,true)?1:0) }
VirtualDubのプラグインは、"LoadVirtualDubPlugin"というコマンドでインポートされます。1つ目の引数はプラグインのパスを、2つ目の引数はスクリプト内で使われるプラグインの名前を与え、3つ目の引数はプリロール(preroll)と呼ばれます。
プリロールは、少なくとも、フィルタがバッファをいっぱいにし、そして/または、内部変数を更新するために、前処理(pre-process)するのに必要なフレーム数に設定されるべきです。最後の引数は、SmartBob、SmartDeinterlace、TemporalCleanerなどのフィルタにおいて使われます。その理由は、VirtualDubのフィルタリング・アーキテクチャにより、未来フレームはフィルタによってアクセスされえないからです。Divideeは報告しています: "VirtualDubの"Add filter"ダイアログにおいて、いくつかのフィルタは、その説明の中に"Lag:"という値を持っています。これはプリロールとして使われなければならない値だと、私は考えます。不幸なことに、この表示が、いつもあるとは限りません。それらのケースでは、あなたは推測しなければなりません。" もちろん、あなたはいつでも、フィルタ作者に問い合わせることができます。
第1段階は、クリップが返される最後の行の中に、引数の連続を見つけ出すことです。VirtualDubでスクリプトを設定し、Fileメニューで"Save processing Settings"を選択するか、Ctrl+Sを押します。テキストエディタで生成された.vcfファイル*1を開いて、このような行を見つけます:
VirtualDub.video.filters.Add("smart bob (1.1 beta 2)"); VirtualDub.video.filters.instance[0].Config(1, 0, 10, 1);
引数の順番は、AviSynthで使われなければならない順番です。引数の役割を知るためには、それらの引数をVirtualDubでいじって、結果として生じる行を調べてください。
第2段階は、そのフィルタをテストして、VirtualDubでそのフィルタを使用した場合と比較することです。プログラミング自体に関しては、vdub_filters.avsに、すでに含まれているスクリプトを見ることによって、多くを学ぶことができます。
VD_SmartBobを使ったスクリプト例:
Import("d:\vdub_filters.avs") AviSource("d:\filename.avi") ConvertToRGB32() # 必要な時のみ(しかし、クリップを傷つけることはない) VD_SmartBob(false, 10, true) ConvertBackToYUY2() # 必要な時のみ