これによりAvsPmodやVirtualDub等でプレビューできるようになったので、この前書いたプレビュー用スクリプトは(Windowsでは)早くも用済みとなった次第です。いや、大変喜ばしい。
この記事はVapourSynth r18までを対象としています。
r19以降では使い方が一部変更されたので、この記事のとおりではうまくいきません。
VFWモジュールの使い方
1.スクリプトを書く
#sample.vpy import vapoursynth as vs core = vs.Core() core.std.LoadPlugin('C:/foo/bar/ffms2.dll') clip = core.ffms2.Source('D:/hoge/fuga/video.mp4') clip = core.resize.Bicubic(clip, clip.width. clip.height, vs.YUV420P8) last = clip
注意する点
・スクリプト名は普通のPythonのように拡張子".py"ではなく、".vpy"として保存すること。・VFWモジュールを使う場合、出力先に渡すクリップのインスタンス名は必ず'last'とすること。
'last'以外の名前のクリップは渡せません。
・プラグインやソースファイルの読み込みは、ファイルパスを必ずフルパスで記述すること。
相対パスで扱うのは失敗のもとです。
これはVideo for Windowsが8bit以上のものを扱うことを想定していないことによる制限です。
なお、RGBでもVSのRGB24はplanarフォーマットなので、これも使えません。RGBの場合はCOMPATBGR32に変換する必要があります。
・VFWモジュールを使う際は、クリップのoutputメソッドは使えません。
2.読み込ませる
・AviSynthの場合
AviSynthにvpyを読みこませる場合はAVIFileSource(又はAVISource)を使います。・VirtualDubの場合
通常のaviやavsと違ってVirtualDubではvpyをD&Dで読み込ませることはできません(拡張子vpyがVirtualDubには登録されていないため)。VirtualDubのメニューから
File -> Open video file
-> 読み込ませるファイルをダイアログで指定 -> 'ファイルの種類'を'AVIFile input driver(compat)(*.avs,*vdr)'に変更 -> '開く’
と、現時点ではちょっと面倒な手順が必要になります。
追記:
こちらの最新テスト版から、vpyを直で開けるようになりました。
・AviUtlの場合
AviUtl0.99k以降であれば、内蔵の'AVI File Reader(Video for Windows)'、または'DirectShow File Reader'でvpyを読み込むことができます。ただし、AviUtlですので、クリップのフォーマットはCOMPATYUY2に変換しておきましょう。
なお、vpyになんらかの誤りがあった場合(ファイルパスを相対パスで書いたため、読み込みで不備がおこったとか)、AviUtlが固まってエクスプローラごと落ちて一旦Ctrl+Alt+Delでログオフしなければならなくなったりますので、くれぐれも注意しましょう。
・avconv/ffmpegの場合
avconv/ffmpegはAVIの読み込みにはVFWを使用しませんが、avsの読み込みはVFWを使用します。よって、これを利用すればvpyをpipeを使わずに渡すことができます。
avconv.exe -f avs -i "d:/herp/derp/sample.vpy" -c:v utvideo out.aviもっとも、こういったコマンドラインツールはPythonスクリプトから操作するなりしたほうがラクだと思います。
10bitYUVとかの入力にも対応してるし。
追記:
2013年3月以降、ffmpeg.exeではこの方法は使えなくなりました(avs読み込みにVFWを使わなくなったため)。
avconv.exeならばまだ使えます。
AviSynthにvpyを読みこませると以下のようなエラーが出るのですが…
返信削除「Avisynth open failure:Python exception: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence」
vpyの中身(メモ帳で編集してUTF-8で保存)
import vapoursynth as vs
core = vs.Core()
core.std.LoadPlugin('C:/Program Files (x86)/AviSynth 2.5/plugins/ffms2.dll')
clip = core.ffms2.Source('E:/test.avi')
last = clip
avsの中身
AVIFileSource("XXX\sample.vpy")
VapourSynthのバージョンはr14
aviファイルのコーデックはUtVideo(ULY0)で、音声なし
追記です。
削除ffms2はFFmpegSource r725 ICL Attempt 4を使用しています。
aviutlに読み込ませると、赤・緑・青の3色のカラーバーが表示されるだけです(AVI File Reader(Video for Windows)で読み込まれました)。
'byte 0xef in position 0'ということは、ファイルの先頭にBOM(Byte Order Mark)の0xFFEFが付いている可能性が高いですね。
返信削除UTF-8にBOMを付けるか否かはいろいろと議論自体はありますが、結局のところは一部のWindows環境以外ではBOM付きUTF-8は使えませんし、今後使われるようになることもないでしょう。
特にクロスプラットフォームなツールを使う場合はBOMは厳禁です。
とりあえずUTF-8にBOMを勝手につけるテキストエディタ(メモ帳とか)を使っているのであれば、もうちょっとましなテキストエディタを使ってみて下さい。
Notepad2-modというテキストエディタを使ったらいけました(EncodingをUTF-8に指定)。
削除vpyの編集はメモ帳ではダメですね。
別にメモ帳は全くダメというわけでもないですよ。
削除そもそも保存形式をANSIにしておけば、日本語版WindowsであればCP932で保存されますので問題はでません。
結局のところWindowsでUTF-8を扱うのはいろいろと問題が多すぎて無理があるんでしょう。