高速に動作し詳細な動画編集が可能なツールであるAvisynth+と、必須プラグインを紹介します。
AviSynth+をダウンロードする
以下のページからインストーラをダウンロードします。32bit/64bit共用です。
なお今回の記事ではWindows 10 64bit版を想定しており、AviSynth+ MT 64bit版をインストールする前提ですが、32bit版も一緒にインストールします。
これは、呼び出し元となるツールによっては32bit版も必要になるためです。
上記サイトから、"MT"の付く最新版をダウンロードしてください。
with-vc_redist.exeと付く方にはVisual C++ Redistributable Packagesが含まれています。既にインストール済みの場合はwith~の付かないほうでOKです。
AviSynth+をインストールする
ダウンロードしたファイルは.exe形式のインストーラーですのでこれを実行します。
言語は日本語になっていると思いますのでそのままで進めます。
インストール先の指定は通常そのままでOKです。
コンポーネントの選択も基本的には変更する必要はありません。
そのまま進めればインストールが完了します。
以前はこれをベースにMT版のdllファイルを上書きコピーする必要がありましたが、最新のMT版では不要です。
ちなみにですが、AviSynth MT 32bitからAviSynth+ MT 64bitに乗り換えた結果、x264での平均エンコード速度が56fpsから68fps程度に向上しました。
OC(オーバークロック)などの力技ではなく、ソフトウェアの差し替えによって10fps以上の違いが出るのは素晴らしいことだと思います。
おすすめプラグインを導入する
有名、必須、おすすめのフィルタを紹介します。組み合わせて使うものや、定番関数で使用されているため必須というものまで色々です。
これらは次回の記事で使用予定のプラグインです。
下記のAviSynth+ x64 pluginsからダウンロードできます。
基本的に64bit版はC:¥Program Files (x86)¥AviSynth+
内のplugins64+
フォルダへ、32bit版はplugins+
フォルダへコピーして使用します。
先に述べた通り、呼び出し元によってはAviSynthが32bitで動作することもあり得ますので、両方あるのであれば32bitと64bitの両方をコピーしておくべきです。
プラグイン名 | 説明 |
---|---|
Delogo | 放送局などのロゴを消去(別途ロゴファイルが必要 / AviUtlで作成可能) |
Hqdn3dY | ノイズ除去 |
LSMASHSource | L-SMASHによる他形式ファイル読み込み(LSMASHSourceの方) |
nnedi3 | インターレース解除 / リサイズ |
TDeint | インターレース解除 |
TIVTC | 逆テレシネ(TIVTC24P2関数で使用) |
VSFilterMod | 字幕処理 |
yadifmod2 | 高速インターレース解除 |
AvsPmod 64bit版をインストールする
AviSynth及びAviSynth+には独自のGUIがありませんが、有志によってGUI(というかプレビュー付きのエディタ)であるAvsPmodが公開されています。
実はAviUtlでも.avsファイルを読み込んで表示できます。チャプター編集プラグイン + Trimエクスポートによるカット編集は非常に便利です。
ただし公式から入手できるものは32bit版しかありませんので、以下から64bitの最新版を入手します。
圧縮ファイルにAvsPmod
というフォルダが格納されています。こちらを適当なフォルダに解凍して、中にあるAvsPmod.exe
ファイルを実行して起動します。ショートカットを作っておくと便利です。
起動後は、言語設定を日本語に変更しましょう。
画像は、既に日本語に変更済みの状態です。その他、フォントやテーマの設定もできますので好みの設定に変更しましょう。
私の環境では以下のようになっています。HackGen や Myrica M といった日本語プログラミングフォントの使用を推奨します。メイリオのようなプロポーショナルフォントは、プラグラミングには向きません。
表示 / 非表示を切り替えられるプレビューで効果を確認しながらスクリプトを書くことができ、大変便利です。簡単なカット編集ならAvsPmodだけで行えるほど高機能です。
プラグラミング向けエディタやIDE(統合開発環境)にあるようなオートコンプリート機能もあり、入力途中で候補を絞り込みながら表示してくれます。
慣れ親しんだエディタで書いても良いのですが、やはりプレビューがあると効率が良いですね。
サンプルスクリプトで動作テスト
適当な動画ファイルを使って簡単なスクリプトを動かし、プラグインの効果を確認します。
本来はx264やx265、QSVEncCやNVEncC、またはFFmpegやAviUtlなどの外部ツールにスクリプトを渡してエンコードするまで結果の確認はできませんが、AvsPmodを使えば編集後、即座に結果を確認することができます。
以下のサンプルスクリプトをコピーして、AvsPmodのエディタに貼り付けてください。
SetFilterMTMode("DEFAULT_MT_MODE", MT_MULTI_INSTANCE)
SetFilterMTMode("LWLibavVideoSource", MT_SERIALIZED)
SetFilterMTMode("LWLibavAudioSource", MT_SERIALIZED)
SetFilterMtMode("AudioDub", MT_SERIALIZED)
avsource = "***動画ファイルのパス***"
LWLibavVideoSource(avsource)
AudioDub(last, LWLibavAudioSource(avsource, av_sync=true))
Spline36Resize(640, 360)
Turn180()
Prefetch(4)
return last
avsource
という変数には、読み込む動画ファイルのパスを記述してください。
例:avsource = "C:¥Users¥username¥マイ ビデオ¥video01.mp4"
読み込みにL-SMASH Worksを使っており、ほぼあらゆる形式の動画を読み込むことが出来ます。ただし副産物として初回読み込み時にインデックスファイルがつくられ、これが長い動画だと結構時間がかかります。
同じく多くの形式を読み込むことができ、インデックスファイルが不要なDirectShowSource
で読み込む手もあります。ただし他の方法に比べてやや信頼性に欠けます。
Spline36Resize
では、動画を指定サイズにリサイズしています。AviUtlのリサイズフィルタでおなじみのSpline36というアルゴリズムで綺麗にリサイズできます。
Spline36は長らく人気の高かったLanczos3に比べ、シャープさはかなり近いレベルでありながらリンギングノイズが出にくくなっており、しかも高速です。
Turn180
は、画面を180度回転します。つまり上下が反転したような状態になります。
ここまでで説明のなかった行は、MT(マルチスレッド)関連の記述です。長くなるためここでは説明を省きます。
ここまで入力できた状態で適当にファイル名を付けて保存し、画面左下のプレビューボタンをクリックします。
指定したサイズにリサイズされつつ、上下反転したような状態でプレビューが表示されれば成功です。
なおスクリプト内に#
を書くと、それ以降は行末までコメントとみなされます。例えばTurn180
の行をコメントアウトしたりして、効果を確認してみてください。
ファイルの読み込みやプラグインの処理に失敗すると、プレビューには黒背景に赤文字のエラーが表示されます。
エラー内容は様々ですので、エラーメッセージでググってみてください。
フィルタの順序には意味がある
元の動画ファイルが 640x360px よりも随分大きいと仮定して考えてみます。
上記スクリプトのリサイズ処理と回転処理の順序を逆にすると、少しだけ効率が悪くなります。
画質は変わりませんが、処理速度が若干落ちることになるのです。
これは180度回転の処理を、画像が大きい状態で行うか、小さくしてから行うかという違いがあるためです。
逆にリサイズの処理は、回転していようがいまいが同じサイズを処理するため、ほとんど変化はありません。
他にもインターレース解除処理の前にノイズ除去などの画像が変化してしまう処理を行ってはいけないなど、色々あります。
このような処理順による効率の変化はAviUtlのフィルタ順でもおなじみですが、これが正解!という答えはありません。ソースによりますし、前後の処理内容によりますし、画質と速度のどちらをとるかにもよります。
自分がよく使うソースやプラグインの処理に合わせて、さらに画質と速度のバランスも考えて、「自分的な正解」を追求するのもAviSynth(+)の魅力的な奥深さです。
実際にどう活用するのか
最初はAvsPmodで色々なプラグインの効果をプレビューして遊んでいるだけでも楽しいものです。
しかしAviSynth及びAviSynth+の真の価値は、「定型化」と「自動化」による「省力化」と「高速化」です。
もちろん「高画質化」も大きな価値の一つですが、それはスクリプトの出来次第ですね。
スクリプトによる一括処理は、GUIで毎回ボタンをポチポチ、設定を開いたり閉じたり、進んだり戻ったりしているよりも随分効率的です。
次回の関連記事では実際にバッチファイルを書いて、各種処理やエンコードを一括処理する仕組みを構築してみたいと思います(既にGitHubで公開中です)。