AviUtlといえば前から不思議に思っていたのが「なぜavsを読むのにわざわざ別に入力プラグインが必要なのか」である。
そもそもAviSynthはスクリプトをAVIに偽装するソフトウェアである。
もし任意のソフトウェアがVFWのAVIFileOpen関数を使って拡張子がavsのファイルを開こうとすれば、レジストリ登録情報によりavisynth.dllが動いて、ただのテキストはAVIとして扱われるような仕組みになっている。
AviUtlにはVFWを使用する入力プラグイン(AVI File Reader)が内蔵されているのだから、本来外部プラグイン(avsinp.aui)は必要ないはずなのだ。
で、このたびPluginSDKのサンプルコード(avi_input.cpp)を読んでみたら、疑問はすぐに解決した。
AviUtlは、まずファイルの拡張子を見てプラグインが対応しているかどうかを判別するため、*.avsというファイルはAVI File Readerには渡されないというだけのことだった。
てなわけで、ちょっと実験。
まず、avi_input.cppのINPUT_PLUGIN_TABLE構造体のfilefilter変数の中身を*.aviから*.avsに変更。
入力プラグイン名をAviSynth Script Reader (VFW)にして、コメント以外の日本語文字を除去(CP932は色々面倒)、ついでにファイル名を.cppから.cにして(avi_input.cppはC++ではなくCで書かれている)、あとはGCCでコンパイルしてやれば…
gcc -c avi_input.c -o avsread.o gcc -o avsread.aui -shared -Wl,--dll,--add-stdcall-alias avsread.o -lavifil32ああ、読めた。
つまり、KENくん氏が内蔵のAVI File Readerに拡張子*.avsを追加してくれれば、avsinp.auiは要らなくなるんだよなぁ…。
AVI File ReaderではRGBでしか読み込めなかったと思います(VFWの仕様)。
返信削除なので、YUY2で読み込むためにはavsinp.aui或いはその代替フィルタは必須になるはずです。
たしかにAVI File Readerの既存の実装ではそのようになっているようです。
返信削除これは自分の認識不足でした。
ちなみに次の更新(0.99j3か0.99k)では、avsもプラグインなしで読めるようになるそうです。
https://twitter.com/#!/_kenkun/status/145866563197734913