VapourSynthの導入

以下の内容2015年10月(Version r28)のものです。古い場合があります。更新日に注意してください。最近割と更新が激しいので内容がすぐ陳腐化するかもしれません。AviSynthは楽に使える人向けの記事です

 

VapourSynthって何?

AviSynthと同じようなフレームサーバー。AviSynthと同じような機能の内蔵フィルタやプラグインが用意されていますし、AviSynth2.5のプラグインをロードして使用できるので、AviSynthの知識がそのまま流用できます。AviSynthをこのまま改良していくのは大変なので1から作ったのがVapourSynth、がんばって改良しているのがAviSynth+、という認識でいます。

  • 32bit版と64bit版が共存可能
  • マルチスレッドで動く
  • スクリプトはPythonで記述
  • 音声は(基本的にまだ)扱えない
  • スクリプト内で日本語を使う場合は注意がいる
  • AviSynth2.5(32bit)のプラグインを使用可能。64bitは不可

スクリプトはAviSythスクリプトではなくPythonで書くので書式はガラッと変わります(構造自体は割と似てるけれど)。AviSynthに慣れている人でも導入は大変かもしれません。私はPythonがわからない人なので結構苦労しました

 

VapourSynthの導入

必要なもの

 

Python

まずPythonをいれる必要があります。32bitで動かす場合は32bit版を、64bit版で動かす場合は64bit版を、両方の環境を用意したいのであれば両方入れます。r28以降では3.5.xをインストールするようにしましょう

Pythonをオールユーザー向けにインストールしないとVapourSynthが32bitと64bit同時に使えないことがあるらしい?ので、もしそこで詰まったらPythonのインストールを見直して見て下さい

 

VapourSynth

左側中段のWindows Binariesをダウンロードしてインストール。インストール時に、コンテキストメニューの新規作成にスクリプトの作成を追加するかどうかと、VapourSynth File Systemの導入が選べます。VapourSynth File Systemを使う場合は先にPismo File Mount Audit Packageをインストールしておきましょう

新規作成に追加した場合、インストール先のtemplate.vpyが名前の通りテンプレになります

 

プラグイン&スクリプト

AviSynthから移植されているものも多く、同じような感覚で使っていけます。一部AviSynthとは名前が違っているけれど機能としては(一部だったり大部分だったり)同じものがあります。ものによってはAviSynthのプラグイン2つが1つのプラグインに統合されているものもあります。例としては以下の表にあるものたち

 

AviSynth VapourSynth
TIVTC VIVTC
dither fmtconv
TDeint + TMM TDeintMod
MSmooth + MSharpen MSmooth

また、nnedi3など、VapourSynthではhigh bitdepth対応になっているプラグインもあります

AviSynth 2.5の欄には互換性があやしいAviSynthプラグインが記載されています。AviSynthのMVTools2を使いたいならAVSTP.dllを消せ、RemoveGrainはVapourSynthのNative Pluginになったからいらない、といった感じですVapourSynth用のプラグインはVapourSynthのインストール先フォルダのPluginフォルダに入れればオートロードされるようになります

外部スクリプトはPythonのインストール先/Libs/site-packages に配置します。32bitと64bit両方使う場合は両方にいれておきましょう。とりあえずAviSynthで有名だった関数が移植されているHAvsFuncは導入しておいて損はないでしょう

 

AvsPmod

AviSynthスクリプトの編集で有名なAvsPmodですが、拡張子が.vpyのものはVapourSynthスクリプトとみなしてくれるのでVapourSynthのスクリプトを作る場合もAvsPmodが使えます。勿論プレビューも可能です

.vpyはUTF-8のBOM無しで記述する必要があるのですが、AvsPmodでは拡張子.vpyでは自動的にUTF-8のBOM無しで保存してくれます。逆にWindows標準のメモ帳など、UTF-8のBOM無しに対応していないエディタでは作れなくなりました。読めなかった場合はAvsPmodを更新してください

 

Pismo File Mount Audit Package

VSFSを使う場合のみ。使わない場合は必要ありません。AVFSのVapourSynth版。スクリプトを右クリック→マウントをするとaviファイルとして扱うことができるようになります

 

スクリプトの書き方

詳しく説明できるほど理解していないのでとりあえず動いたサンプルスクリプトを載せておきます。詳しくは公式等で確認してください。

AviSynthのプラグインの場合は core.avs.xxxx だとかVapourSynthの内蔵フィルタの場合は core.std.xxxx などになるとか、AviSynthでは省略できた xxxx = core~のxxxx = が省略できなくなってるとかまぁそんな感じで・・・。DelogoはすでにVapourSynth版があるので実際はそちらを使えばいいのですが、まあAviSynthプラグインを使う例としてそのままにしておきます

AviSynthのDoubleWeaveは、VapourSynthではSeparateFields+DoubleWeaveです

内蔵フィルタがAviSynthに比べて少ない印象です。WeaveやPulldownもありません(他のフィルタの組み合わせて同じ事はできる)。Pythonや他の内蔵フィルタと組み合わせて同じ事ができるもの、は割と省かれてます

 

エスケープ絡みの注意点

Pythonはクォーテーションで括った文字列でもエスケープシークエンスが使えてしまいます。例えば

core.avs.LoadPlugin(‘D:\App\AviSynth 2.5\plugins\delogo.dll’)

こう書いてしまうと’\’が正しく読めません。Pythonの場合

core.avs.LoadPlugin(r‘D:\App\AviSynth 2.5\plugins\delogo.dll’)

このようにクォーテーションの前にrをつけてやるか

core.avs.LoadPlugin(‘D:/App/AviSynth 2.5/plugins/delogo.dll’)

 このように’\’ではなく’/’でパスを表現してあげる必要があります

 

日本語の使用の注意点

プラグインが日本語に対応していないと基本的に日本語は使えません。使う場合はスクリプト内でUTF-8からcp932にエンコードして渡してあげる必要があります。上記のサンプルは日本語前ファイル名が含まれている前提で書きましたが、d2vファイル名に日本語が含まれていないなら、単に

と記述するだけでOKです

 

インターレース処理の注意点

r27でAssumeT/BFFに相当するものができました

このように_FieldBasedプロパティにフィールドオーダーを登録できるようになりました。対応しているフィルタで読み取ってくれます。古いプラグインは読んでくれないので、インターレースがらみの処理をするプラグインは更新しましょう

 

HAvsFunc

AviSynthでよく使われるスクリプトを移植したものです。AviSynthと同じようにimportして使います。プラグインが移植・更新されるとそれにともない更新されることがあるので、使おうとしてエラーが出たらスクリプトや依存プラグインを更新してみてください。この記事の更新日時点ではr20が最新です

AviSynthではHigh bitdepth未対応だった関数も、HAvsFuncでは対応しているものが多いです

 

QTGMCの注意点

mvtools2,fmtconv,RemoveGrain,TemporalSoften,SceneChangeが必須です。mvtoolsがVapourSynthに移植されたのでAviSynthのmvtoolsは必要なくなりました

GenericFiltersも内蔵フィルタになったので、外部プラグインのは必要なくなりました。r14まで軽かったけれどr15以降やたらと重くなった気がする・・・

 

LSFmodの注意点

必須はRemoveGrain,fmtconvです。AviSynth版のmode3-5がmode1-3相当になります

リンギング防止のnoringオプションが追加されています(拡大をAviSynthでいうDither_resize_16nrでやるモード)

 

音声の扱い

外部プラグインのdambでwav、ogg、flacが一応扱えるようになりましたが、音声まわりはもう少し成熟が見られてからじっくり確認したいと思っているのでとりあえず保留…。1回試しに使ってみましたが、音声の書き出しが映像のエンコードと同期されていたので、音声をneroやqaac等でエンコードする場合は映像のエンコード終了後にすることになります

 

32bitと64bitの共存

32bitのアプリでvpyファイルにアクセスすると32bitのVapourSynthが、64bitのアプリでvpyファイルにアクセスすると64bitのVapourSynthが動作します。AviSynth+と一緒ですね。当然64bitでエンコード中に32bitのAvsPmodで編集、といった同時使用も可能です

ただ、AviSynthのプラグインが転用できるのは32bit版のみです

 

x264でエンコード

インストールしたときについてくるvspipeを使うのが公式推奨?パイプなので、32bitのvspipe+64bitのx264みたいな使い方も可能です

直接x264に投げてvfwやvsscriptで読み込んでエンコードもできるようだけれど私の環境だとワーニングが出たりでちょっと気持ち悪かったのでちょっと保留中。x264や環境次第では

これでもOKなんでしょう

 

動作状況

AviSynthのMTとは違い、特に何も気にしなくても勝手にマルチスレッドで動作してくれます。マルチスレッドでの動作も安定しています。AviSynthとどちらの方が速いか、は使うプラグイン次第かな?TDeint+TMMはVapourSynthの方が相当速そう。使うプラグインが移植されていれば導入を考える価値は大いにあると思います。最近は本体の開発もプラグイン移植(64bit含め)も活発でエンコード速度も向上しています

内蔵フィルタがAviSynthより用意されているものが少ないですが、PythonさえわかればAviSynthより色々融通が利きます。が、Pythonがわからないと割と大変だと思います

 

更新履歴

2015/10/29 r28用に更新

2015/05/25 r27用など色々更新&修正加筆

2015/02/09 レイアウト変更とちょっと修正加筆程度。内容はあまり変化なし

コメント

タイトルとURLをコピーしました