AviUtlフィルタプラグインを利用する のバックアップソース(No.2)

#contents

*概要 [#ibe89819]

AviUtl用のフィルタプラグイン(拡張子 .auf)を、AviSynthで利用するための方法を紹介します。

[[warpsharpプラグイン(warpsharp.dll)>warpsharpパッケージ]]に内蔵されているLoadAviUtlFilterPluginフィルタを使用することにより、多くの(すべてのではない)AviUtlフィルタプラグイン(以下、AUFと表記)を、AviSynthでも利用できるようになります((すべてのAviUtlフィルタプラグインが利用できるわけではありません。また、AviUtl内蔵フィルタも利用できません。))。

*用意するもの [#c91ec10f]

以下の2つを用意してください。

-[[warpsharpプラグイン(warpsharp.dll)>warpsharpパッケージ]]
--LoadAviUtlFilterPluginフィルタが収録されています。
-[[ShowAUFInfo.exe]]
--AUFをAviSynthで利用する際に必要な情報(Info)を表示/出力するためのコマンドラインツールです。

どちらも[[warpsharpパッケージ]]に同梱されています。入手先については、[[warpsharpパッケージ]]を参照。

*手順 [#la40dc3d]

以下の説明は、AUFをAviSynthで利用するための手順の一例です。

**1.AUF用の定義ファイル(aufilters.avs)の作成 [#bf43179f]

[[ShowAUFInfo.exe]]を使って、AUF用の定義ファイルを作成します。使用したいAUFの数だけ[[ShowAUFInfo.exe]]を実行してください。

出力されたaufilters.avsには、AUFを利用するための関数(以降、AU関数と表記)が含まれています。以後、AviSynthにおいてAUFを利用する際には、この関数を呼び出します。

なお、定義ファイルの名前は自由に付けることができますが、ここではaufilters.avsという名前にしたものとします。

***[[ShowAUFInfo.exe]]の使い方 [#j0327c1e]

[[ShowAUFInfo.exe]]の使い方については、[[ShowAUFInfo.exe]]のページを参照。コマンドラインツールの使い方がわからない場合は、[[ShowAUFInfo実行支援バッチスクリプト]]を試してみてください。

**2.aufilters.avsの修正 [#w7daa77c]

aufilters.avs(ShowAUFInfoによって出力される情報)には、AU関数以外に、LoadAviUtlFilterPluginのための変数とAUFのパスを指定するための変数が含まれています。

aufilters.avsをメモ帳で開いて、これらの変数の設定を、必要に応じて変更します。

***3つのglobal変数の意味 [#md931ae4]

#ref(aufilters_global_variables.png)

aufilters.avsの最初の3行目には、図のように3つのglobal変数が含まれています。これらの変数によって指定される内容は、以下の通りです。

-AviUtl_plugin_directory: 
--AviUtlのプラグインディレクトリの指定
-AviUtl_plugin_copy: 
--LoadAviUtlFilterPluginのcopyパラメータ用の変数
-AviUtl_plugin_debug: 
--LoadAviUtlFilterPluginのdebugパラメータ用の変数

通常、AviUtl_plugin_copyとAviUtl_plugin_debugはデフォルト(false)のままで問題ありませんが、1つめのAviUtl_plugin_directoryは環境にあわせて設定し直す必要があります。

なお、これらのglobal変数はShowAUFInfo.exeの実行ごとに出力されますが、aufilters.avsの中において必要なのは1組のみです。複数の同じ変数が含まれていると、エラー発生の原因になりかねませんので、注意してください。

**3.スクリプトの挿入 [#of0b16b8]

#ref(aufilters_auf_function.png)

これは、[[将:http://latch-up.hp.infoseek.co.jp/]]さん作の[[ノイズ付加フィルタ:http://latch-up.hp.infoseek.co.jp/]](addnoise.auf)に対して、ShowAUFInfo.exeを実行した結果です。[[global変数>#md931ae4]]の部分は省略してあります。

このうち、exampleより下の3行(図の使用例の部分)を、メインのスクリプトの、AUFを使用したい行にコピー&ペーストし、行頭の#を削除します((#が付いたままだと、コメント扱いになります。))。

さらに、今、AU関数を挿入した行よりも前に、warpsharpプラグインの読み込み((すでに読み込んでいる場合やプラグインのオートローディングを利用している場合は不要))とaufilters.avsのインポートのための行を追加します。

下記の使用例を参照。

***使用例 [#aee1ee91]

AU_addnoise関数(ノイズ付加フィルタ)の使用例です。

-スクリプト
#code(nonumber){{
# warpsharpプラグインの読み込み
LoadPlugin("C:\AviSynth\Plugins\warpsharp.dll") # オートローディング使用時は不要
# aufilters.avsのインポート
Import("C:\AviSynth\AVS\aufilters.avs")
# 
# 他のフィルタなど
#
# ConvertToYUY2() # クリップがYUY2以外の場合
#
# AU関数の実行
ConvertYUY2ToAviUtlYC()
AU_addnoise(128,1)
ConvertAviUtlYCToYUY2()
}}

プラグインとaufilters.avsのパスは、環境にあわせて変更してください。

-プレビュー画面
--フィルタ適用前
#ref(aufilters_before_filtering.png)
--フィルタ適用後
#ref(aufilters_after_filtering.png)

*AU関数のパラメータ調整方法 [#p4e060de]

[[あじ:http://www.geocities.jp/aji_0/]]さん作の[[フィルタ設定 エクスポートプラグイン(filtersetting_export.auf):http://www.geocities.jp/aji_0/]]((「AviSynth Script エクスポート」に収録されています。))利用すれば、AviUtl上でAUFの設定を行い、その設定情報を、AU関数の形式で出力することができます。

*使用上の注意 [#w169a6d9]

-必ず、AU関数を、ConvertYUY2ToAviUtlYC()とConvertAviUtlYCToYUY2()で挟む形にしてください。もし、ConvertYUY2ToAviUtlYC()とConvertAviUtlYCToYUY2()を使わずに、AU関数のみを実行すると、フィルタが期待したようには適用されず、クリップの画が崩れてしまうおそれがあります。
--サンプル(AU関数(AU_addnoise)のみを実行したところ)((このサンプルの作成にあたっては、結果が一目でわかるように、AU_addnoiseの引数の値を大きめに設定しました。また、このサンプル画像は、オリジナル画像を縮小したものです。オリジナルの画像は[[こちら:http://www.avisynth.info/?plugin=attach&pcmd=open&file=aufilters_not_convert_preview.png&refer=AviUtl%A5%D5%A5%A3%A5%EB%A5%BF%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%A4%F2%CD%F8%CD%D1%A4%B9%A4%EB]]。))
#ref(aufilters_not_convert_preview_s.png)

-逆に、onvertYUY2ToAviUtlYC()とConvertAviUtlYCToYUY2()の間においては、AviSynth用の関数(フィルタ)を実行することはできません。

-複数のAU関数を使用し、かつ、あいだにAU関数以外のフィルタ(関数)を使用しない場合(複数のAU関数を連続して使用する場合)は、最初のAU関数の前にConvertYUY2ToAviUtlYC()を、最後のAU関数の後にConvertAviUtlYCToYUY2()を挿入するだけでかまいません。
--例:
#code(nonumber){{
ConvertYUY2ToAviUtlYC()
AU_foo() # AU関数1
AU_bar() # AU関数2
# ・
# ・
# ・
ConvertAviUtlYCToYUY2()
}}

-ConvertYUY2ToAviUtlYC()はYUY2専用です。クリップがYUY2で'''ない'''場合は、ConvertYUY2ToAviUtlYC()よりも前に、クリップをYUY2に変換しておく必要があります。YUY2への変換には、ConvertToYUY2フィルタを使用します。