AviUtlフィルタプラグインを利用する のバックアップの現在との差分(No.10)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

* 概要 [#ibe89819]

[[warpsharpプラグイン(warpsharp.dll)>warpsharpパッケージ]]に内蔵されているLoadAviUtlFilterPluginフィルタを使用することによって、多くのAviUtlフィルタプラグイン(拡張子 .auf。以下、AUFと表記)を、AviSynthでも利用できるようになります。このページでは、その手順について解説します。
[[warpsharp プラグイン(warpsharp.dll)>warpsharpパッケージ]]に内蔵されているLoadAviUtlFilterPlugin(または LoadAviUtlFilterPlugin2)フィルタを使用することによって、多くの AviUtl フィルタプラグイン(拡張子 .auf。以下、AUF と表記)を、AviSynth でも利用できるようになります。このページでは、その手順について解説します。

ただし、この方法によって、すべてのAUFが利用できるようになるわけではありません。また、AviUtlに内蔵されているフィルタは利用できません。
ただし、この方法によって、'''すべての AUF が利用できるようになるわけではありません。また、AviUtl に内蔵されているフィルタは利用できません。'''

** マルチスレッド対応プラグインを使用するには? [#z68b4b1b]
* 必要なもの [#c91ec10f]

AviUtl 0.99a 以降のマルチスレッド機能に対応したプラグインを使用するためには、seraphy 氏による改造版 warpsharp プラグインを使う必要があります。searphy 版では、新たに追加された thread パラメータでスレッド数を指定することができます。searphy 版 warpsharp の入手先については、[[warpsharpパッケージ]] を参照。
以下のフィルタやツールが必要になります。

* 用意するもの [#c91ec10f]
-''[[LoadAviUtlFilterPlugin]] フィルタ(または LoadAviUtlFilterPlugin2 フィルタ)''
--[[warpsharpプラグイン(warpsharp.dll)>warpsharpパッケージ]]に内蔵。
--マルチスレッド対応プラグインを使用する場合は、seraphy 版を使用する。
--LoadAviUtlFilterPlugin2 は、seraphy 版にのみ収録。
-''ConvertYUY2ToAviUtlYC フィルタおよび ConvertAviUtlYCToYUY2 フィルタ、または、[[Convert AviUtlYC Fix:http://vm104.xen.klab.org/mksoft/avisynth.html]] プラグイン''
--YUY2 フォーマットと AviUtl の内部形式との相互変換に必要(AUF が動作する AviUtl の内部形式は、AviSynth で直接サポートされていないため)。
--[[warpsharpプラグイン(warpsharp.dll)>warpsharpパッケージ]]に内蔵。
--[[MakKi's SoftWare:http://vm104.xen.klab.org/mksoft/]] の [[Convert AviUtlYC Fix:http://vm104.xen.klab.org/mksoft/avisynth.html]] プラグインでも代用可能。
---両者の違いについては、[[下記参照>#ve8c1c7b]]。
-''[[ShowAUFInfo.exe]]''
--AUF を AviSynth で利用する際に必要な情報(Info)を表示/出力するためのコマンドラインツール。
--[[warpsharpパッケージ]]に同梱。

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

-LoadAviUtlFilterPluginフィルタ
--[[warpsharpプラグイン(warpsharp.dll)>warpsharpパッケージ]]に内蔵。マルチスレッド対応プラグインを使用する場合は、seraphy 版を使用する。
-ConvertYUY2ToAviUtlYCフィルタ(または、ConvertYUY2ToAviUtlYCFixフィルタ)
-ConvertAviUtlYCToYUY2フィルタ(または、ConvertAviUtlYCToYUY2Fixフィルタ)
--上記の2フィルタは、以下のプラグインのいずれかをAviSynthに読み込ませることによって利用可能。
+++[[warpsharpプラグイン(warpsharp.dll)>warpsharpパッケージ]](オリジナル版。ConvertYUY2ToAviUtlYC/ConvertAviUtlYCToYUY2)。
+++[[Convert AviUtlYC Fix:http://mksoft.hp.infoseek.co.jp/avisynth.html]](色空間変換式修正版。ConvertYUY2ToAviUtlYCFix/ConvertAviUtlYCToYUY2Fix)
+++[[warpsharp (AviUtil内部色形式変換バグ?修正+MMXコーディング版):http://seraphy.fam.cx/~seraphy/program/WarpSharp/index.html]](色空間変換式修正&MMX版。ConvertYUY2ToAviUtlYC/ConvertAviUtlYCToYUY2)
-[[ShowAUFInfo.exe]]
--AUFをAviSynthで利用する際に必要な情報(Info)を表示/出力するためのコマンドラインツール。

それぞれの使い方については、以下の手順の中で説明します。

* 手順 [#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関数のほかにいくつかのglobal変数が含まれています。AviUtlフィルタプラグインを利用するためには、あらかじめ、これらの関数の設定を行っておく必要があります。

#ref(aufilters_global_variables.png)

aufilters.avsをメモ帳で開くと、上図のような式が書かれていると思います。これらの変数によって指定される内容は、以下の通りです。

-AviUtl_plugin_directory
--AviUtlのプラグインディレクトリの指定
-AviUtl_plugin_copy
--LoadAviUtlFilterPluginのcopyパラメータ用の変数
-AviUtl_plugin_debug
--LoadAviUtlFilterPluginのdebugパラメータ用の変数
-AviUtl_plugin_thread(seraphy 版のみ)
--マルチスレッド対応 AviUtl プラグインのスレッド数を指定

1つ目のAviUtl_plugin_directoryは、必ず環境にあわせて設定し直してください。AviUtl_plugin_copyとAviUtl_plugin_debugについては、通常、デフォルト(false)のままで問題ありません(それぞれのパラメータの意味については、LoadAviUtlFilterPluginを参照)。最後の AviUtl_plugin_thread という変数は、seraphy 氏による改造版 [[warpsharpパッケージ]]の [[ShowAUFInfo.exe]] を使って出力した場合にのみ存在します。

なお、これらのglobal変数はShowAUFInfo.exeの実行ごとに出力されますが、必要なのは1組のみです。複数の同じ名前の変数が含まれていると、エラーや意図したのとは異なる結果が生じる原因となります。不要な箇所については削除してください。

aufilters.avsの変更が終わったら、上書き保存してメモ帳を閉じます。

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

最後にAU関数をメインのスクリプト((エンコーダなどのフロントエンドに読み込ませるAVSファイル。))に挿入します。

#ref(aufilters_auf_function.png)

これは、[[将:http://latch-up.hp.infoseek.co.jp/]]氏作の[[ノイズ付加フィルタ:http://latch-up.hp.infoseek.co.jp/]](addnoise.auf)に対して、ShowAUFInfo.exeを実行した結果です(aufilters.avsの一部)。[[global変数>#md931ae4]]の部分は省略してあります((詳しくは、[[ShowAUFInfo.exe]]の[[実行例: ノイズ付加フィルタ(addnoise.auf)の場合>ShowAUFInfo.exe#kd66f51f]]を参照。))。ここでは、これを例に、スクリプトの挿入手順の説明を行います。

これを利用するためには、この中からexampleより下の3行(図の使用例の部分)をコピーして、メインのスクリプトのAUFを使用したい行に貼り付けます。そして、行頭の#記号を削除します((#が付いたままではコメント扱いになり、フィルタが有効になりません。))。

たとえば、以下のようなスクリプトを作成します。これで、AUFをAviSynthのフィルタと同様に扱うことができるようになります。

#code(){{
#pre{{
# プラグインの読み込み
LoadPlugin("C:\foo\warpsharp.dll") # オートローディング使用時は不要
#LoadPlugin("C:\foo\AviUtlYC.dll") # Convert AviUtlYC Fix使用時

# aufilters.avsのインポート
Import("C:\avs\aufilters.avs")

# クリップがYUY2では”ない”場合、YUY2に変換
ConvertToYUY2() # 必要に応じて

# AU関数の実行
## AviUtlのYC空間に変換
ConvertYUY2ToAviUtlYC() # または、ConvertYUY2ToAviUtlYCFix()
ConvertYUY2ToAviUtlYC() # または、ConvertToAviUtlYCFix() など
## AU関数
AU_addnoise(128,1)
## YUY2に再変換
ConvertAviUtlYCToYUY2() # または、ConvertAviUtlYCToYUY2Fix()
ConvertAviUtlYCToYUY2() # または、ConvertAviUtlYCToYUY2Fix() など
}}

*** スクリプト例の解説 [#aee1ee91]

#code(){{
#pre{{
# プラグインの読み込み
LoadPlugin("C:\foo\warpsharp.dll") # オートローディング使用時は不要
#LoadPlugin("C:\foo\AviUtlYC.dll") # Convert AviUtlYC Fix使用時
}}

LoadPluginフィルタを使って、必要なプラグインの読み込みを行います。すでに読み込んでいる場合や[[プラグインのオートローディング]]を利用している場合は不要です。Convert AviUtlYC Fixを使用する場合は、AviUtlYC.dllの読み込みも必要となります。

#code{{
#pre{{
# aufilters.avsのインポート
Import("C:\avs\aufilters.avs")
}}

手順1で作成し、手順2で修正したaufilters.avsをインポートします。

#code{{
#pre{{
# クリップがYUY2では”ない”場合、YUY2に変換
ConvertToYUY2() # 必要に応じて
}}

ビデオクリップがYUY2では'''ない'''なら、前もってYUY2に変換する必要があります。すでにYUY2の場合、この行は必要ありません。

#code{{
#pre{{
# AU関数の実行
## AviUtlのYC空間に変換
ConvertYUY2ToAviUtlYC() # または、ConvertYUY2ToAviUtlYCFix()
ConvertYUY2ToAviUtlYC() # または、ConvertToAviUtlYCFix() など
## AU関数
AU_addnoise(128,1)
## YUY2に再変換
ConvertAviUtlYCToYUY2() # または、ConvertAviUtlYCToYUY2Fix()
ConvertAviUtlYCToYUY2() # または、ConvertAviUtlYCToYUY2Fix() など
}}

AU関数は、その前後をConvertYUY2ToAviUtlYCとConvertAviUtlYCToYUY2(もしくは、ConvertYUY2ToAviUtlYCFixとConvertAviUtlYCToYUY2Fix)で挟む形で使用します。
AU 関数は、その前後を ConvertYUY2ToAviUtlYC と ConvertAviUtlYCToYUY2 (もしくは、Convert AviUtlYC Fix プラグイン収録の同様の関数でも可)で挟む形で使用します。

ConvertYUY2ToAviUtlYC(Fix)は、AviSynthでもAUFを利用できるように、AviUtl内部と同じ(もしくは、それに近い)色空間に変換するためのフィルタです。一方、ConvertAviUtlYCToYUY2(Fix)は、AviUtl内部の色空間をAviSynthで取り扱えるようにYUY2に再変換するためのフィルタです。
ConvertYUY2ToAviUtlYC は、AviSynth で AUF を利用できるように、AviUtl 内部と同じ(もしくは、それに近い)色空間に変換するためのフィルタです。一方、ConvertAviUtlYCToYUY2 は、AviUtl 内部の色空間を AviSynth で取り扱えるように YUY2 に再変換するためのフィルタです。

このうちのどちらか(または両方)を記述し忘れると、AUFが正しく適用されなくなります。詳しくは、下記の[[使用上の注意>#w169a6d9]]を参照してください。
このうちのどちらか(または両方)を記述し忘れると、AUF が正しく適用されなくなります。詳しくは、下記の[[使用上の注意>#w169a6d9]]を参照してください。

*** 実行例(スクリーンショット) [#ld3d08b9]

上記のスクリプト例を実行したところです。

-フィルタ適用前
#ref(aufilters_before_filtering.png)
-フィルタ適用後
#ref(aufilters_after_filtering.png)

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

あじ氏作の「フィルタ設定 エクスポートプラグイン」(AviSynth Script エクスポートに収録)を利用すれば、AviUtl上で行ったAUFの設定情報を、AU関数の形式で出力することができます。

詳しくは、[[AviSynth Script エクスポート]]と[[フィルタ設定 エクスポートプラグインの使い方]]を参照。

* 使用上の注意 [#w169a6d9]

** ConvertYUY2ToAviUtlYC(Fix)とConvertAviUtlYCToYUY2(Fix)について [#m23c634d]
** ConvertYUY2ToAviUtlYC と ConvertAviUtlYCToYUY2 について [#m23c634d]

AU関数を使用する際は、必ず、ConvertYUY2ToAviUtlYCとConvertAviUtlYCToYUY2(またはConvertYUY2ToAviUtlYCFixとConvertAviUtlYCToYUY2Fix)で挟む形にしてください。もし、これらのフィルタを使わずにAU関数を実行すると、フィルタが期待したようには適用されず、クリップの画が崩れてしまうおそれがあります。
AU関数を使用する際は、必ず、ConvertYUY2ToAviUtlYC と ConvertAviUtlYCToYUY2(または Convert AviUtlYC Fix プラグイン収録の同様の関数)で挟む形にしてください。もし、これらのフィルタを使わずに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)

逆に、ConvertYUY2ToAviUtlYCとConvertAviUtlYCToYUY2(Fix)に挟まれた行では、AviSynth用の関数(フィルタ)を使用することはできません。
逆に、ConvertYUY2ToAviUtlYC と ConvertAviUtlYCToYUY2 に挟まれた行では、AviSynth用の関数(フィルタ)を使用することはできません。

ただし、複数のAU関数を使用し、かつ、あいだにAU関数以外のフィルタ(関数)を使用しない場合(複数のAU関数を連続して使用する場合)は、最初のAU関数の前にConvertYUY2ToAviUtlYC(Fix)を、最後のAU関数の後にConvertAviUtlYCToYUY2(Fix)を挿入するだけでかまいません。
ただし、複数の AU 関数を使用し、かつ、あいだに AU 関数以外のフィルタ(関数)を使用しない場合(複数の AU 関数を連続して使用する場合)は、最初の AU 関数の前に ConvertYUY2ToAviUtlYC (または ConvertToAviUtlYCFix() など)を、最後の AU 関数の後に ConvertAviUtlYCToYUY2 (または ConvertAviUtlYCToYUY2Fix() など)を挿入するだけでかまいません。

-例:
#code{{
ConvertYUY2ToAviUtlYC() # または、ConvertYUY2ToAviUtlYCFix()
#pre{{
ConvertYUY2ToAviUtlYC() # または、ConvertToAviUtlYCFix() など
AU_foo() # AU関数1
AU_bar() # AU関数2
# ・
# ・
# ・
ConvertAviUtlYCToYUY2() # または、ConvertAviUtlYCToYUY2Fix
ConvertAviUtlYCToYUY2() # または、ConvertAviUtlYCToYUY2Fix() など
}}

** ConvertAviUtlYCToYUY2/ConvertYUY2ToAviUtlYC と Convert AviUtlYC Fix の違い [#ve8c1c7b]

ConvertAviUtlYCToYUY2/ConvertYUY2ToAviUtlYC([[warpsharpパッケージ]]内蔵)と Convert AviUtlYC Fix の違いについて、2ちゃんねるの AviSynth スレッドにわかりやすい説明がありましたので、以下に引用させていただきます。

> [[Avisynthを絶讃ιょぅょ Part24:http://pc11.2ch.net/test/read.cgi/avi/1194513608/599]]
> 
> 599 名前:名無しさん@編集中[sage] 投稿日:2008/01/13(日) 11:03:01 ID:ClsNpV2M~
>>592 >>598~
Makki氏のFixは補間付YUV422->YUV444変換。seraphy氏のはleft origin。~
オリジナルのwarpsharpもleft origin。~
~
Fixは補間付なので、ノイズ除去系フィルタを使うならお勧め。(chromaを変更するもの)~
lumaのみの処理であったりインタレ解除などの場合はleft originがお勧め。~
~
色差の補間については過去のMakki氏とKiraru氏との対談を読めばわかる。~
synthで処理する以上、YUV422->YUV444->YUV422と変換する必要があるので、~
YUV444を何の目的で処理するのかを使い手が適切に判断すればよい。~
~
ちょっと残念なのはMakki氏の変換がCPU命令に最適化されていないこと。~
seraphy氏のはMMX、SSSE3で最適化されていて、left originはそもそも計算量が~
少ないので速度の面で結構な差が出る。

なお、Convert AviUtlYC Fix で使用されている変換式に関しては、[[AviUtlの内部形式について:http://vm104.xen.klab.org/mksoft/doc/aviutlyc.html]]に説明があります。

** 入力クリップの色空間について [#r9f7db39]

ConvertYUY2ToAviUtlYC(Fix)は、YUY2専用です。つまり、AUF(AU関数)を利用するためには、ビデオクリップがYUY2でなければなりません。クリップがYUY2で'''ない'''場合は、ConvertYUY2ToAviUtlYC(Fix)よりも前に、クリップをYUY2に変換しておく必要があります。YUY2への変換には、[[ConvertToYUY2>Convert]]フィルタを使用します。
ConvertYUY2ToAviUtlYC は、YUY2 専用です。つまり、AUF(AU 関数)を利用するためには、ビデオクリップが YUY2 でなければなりません。クリップが YUY2 で'''ない'''場合は、ConvertYUY2ToAviUtlYC よりも前に、クリップを YUY2 に変換しておく必要があります。YUY2 への変換には、[[ConvertToYUY2>Convert]] フィルタを使用します。

クリップがYUY2であるかどうかの確認には、[[Info]]フィルタを使用してください([[info_modoki]]関数でも可)。
クリップが YUY2 であるかどうかの確認には、[[Info]] フィルタを使用してください([[info_modoki]] 関数でも可)。

なお、Convert AviUtlYC Fix プラグインには、YUY2/RGB24/RGB32 から AviUtl 内部形式への変換が可能な ConvertToAviUtlYCFix() と、AviUtl 内部形式から RGB24/RGB32 への変換が可能な ConvertAviUtlYCToRGB24Fix()/ConvertAviUtlYCToRGB32Fix() も収録されています(ver 1.00 以降)。

** マルチスレッド対応プラグインを使用するには? [#z68b4b1b]

AviUtl 0.99a 以降のマルチスレッド機能に対応したプラグインを使用するためには、seraphy 氏による改造版 warpsharp プラグインを使う必要があります。searphy 版では、新たに追加された thread パラメータでスレッド数を指定することができます。searphy 版 warpsharp の入手先については、[[warpsharpパッケージ]] を参照。