お知らせ: にーやんのブログ 2 に移転しました。こちらのブログは、2009 年末までに削除します。

スポンサード リンク

myFunctions: iDust関数

# 説明

iFilterT関数のDust(DustV5プラグイン)特化型版です。

Dustプラグインに収録されているフィルタ(FaeryDustなど)は、1スクリプトに1回しか呼び出せないという制限があります。そのため、iFilterT関数は、そのままでは使用することができません。iFilterT関数は、フィールドごとに1回ずつ、計2回フィルタをかけるからです。

iFilter関数の場合は、Dustフィルタを使用することができます。


# 使用上の注意

iDust関数ではDustプラグインを2つ使用します。

DustV5.dllのコピーを、あなたのプラグインフォルダ以外の場所に用意するか、別の名前にリネームしてください。そして、myFunctions.avsの5行目のdustv5_2_dirを、コピー/リネームしたdllのパスに設定しなおしてください。
##### 初期設定 (最初に設定してください)#####
#//--- Bob(60fps化)フィルタの指定(iResize、BobDust使用時に必要) ---//
global bbb_filter = "AutoBob()" #kernelbob/dgbobは"kernelbob(order)"と指定可
#//--- DustV5.dllのコピー/リネームしたdllのパス(iDust使用時に必要) ---//
global dustv5_2_dir = "D:\AviSynth\DustV5_2.dll"


# ダウンロード

インターレース素材系関数集」から、myFunctions.avsをダウンロードしてください。


# 書式

iDust(clip clip, string "dust_filter", int "limit", string "output")
  • 引数
    • clip: ビデオクリップ。
    • dust_filter: "FaeryDust"/"SpaceDust"/"PixieDust"/"GoldDust"のいずれか。
    • limit: Dustのlimit。省略したときは、dust_filterのデフォルト値。
    • output: Dustのlimit。省略したときは、clipの色空間。

# 使用例

Import("myFunctions.avs")
iFilter("FaeryDust", 2)


# その他の注意

  • あらかじめフィールドオーダーを正しく指定しておくこと(AssumeTFF/AssumeBFFなどを使って)。
  • DustはYV12に対応していません。この関数では、YV12のクリップを内部でYUY2に変換します。そして、フィルタ適用後にYV12に戻します。
  • 追記: niiyan's blog :: iDust関数がHC Encoder v0.18で使えない件も参照。

iFilterとiFilterTの違い

iFilterTのTは、Temporal(時間軸)のTです。

以前、Doom9フォーラムで、2D(Spatial/空間軸)フィルタにはiFilterの手法を、時間軸フィルタにはiFilterT関数の手法を使うという話が出たことがあったので、こういう名前にしました。

しかし、iFilterが2Dフィルタ用、iFilterTが時間軸フィルタ用、というわけではありません。2Dフィルタに関しては、iFilter/iFilterT、いずれにおいても使用することが可能です。ただし、時間軸フィルタを使用したいときには、どちらの関数(手法)を使うべきか、注意を払う必要があります。

iFilter関数は、トップ/ボトム(偶数/奇数)の両フィールドを交互に並べたクリップを生成して、それに対してフィルタをかけます。このとき、たとえば前後合わせて3フレーム(フィールド)を参照するタイプの時間軸フィルタを使用すると・・・
[トップ] [ボトム] [トップ](または、[ボトム] [トップ] [ボトム])
このように、異なるフィールドの画像を参照します。これにより、異なるフィールドの成分がブレンドされる可能性があります。

一方、iFilterT関数では、フィールド別に処理を行うため・・・
[トップ] [トップ] [トップ](または、[ボトム] [ボトム] [ボトム])
このように、同じフィールドの画像を参照します。異なるフィールドの成分がブレンドされることはありません。

たとえば、テレシネ(3:2プルダウン)されたソース(トップファースト)の場合で考えてみます。
[0] [1] [2] [3]・・・(数字はフレーム番号)
これをテレシネされる前の画像とします。
[0T] [1T] [1T] [2T] [3T]・・・(トップフィールド)
[0B] [1B] [2B] [3B] [3B]・・・(ボトムフィールド)
------------------------
[0f] [1f] [2f] [3f] [4f]・・・(フレーム)
テレシネされた後は、こんな感じになります(例)。Tはオリジナル画像のトップが、Bはオリジナル画像のボトム、fはテレシネ後のフレームを表します。つまり、[0T]と[0B]が[0f](0フレーム)を構成しているということです。
[0T] [0B] [1T] [1B] [1T] [2B] [2T] [3B] [3T] [3B]・・・
AviSynthでフィールド分離(SeparateFields)すると、このような画像の並び順になります(数字は、オリジナルの画像の番号です)。

このビデオに対して時間軸フィルタをかける(つまりiFilterの方法を使用する)と・・・
[1T] [2B] [2T]
このような並び順で、元々別の画像の、異なるフィールドを参照することになり、マズい結果になるかもしれません。

# お願い

専門的な知識があるわけではないので、かなりいい加減な説明かもしれません。そのまま鵜呑みにしないようにしてください。あくまでも参考程度に・・・。もし間違っていたら、さりげなく教えてもらえると助かります。

myFunctions: iFilterT関数

# 説明

以下のスクリプトを関数化したものです。
SeparateFields
even = SelectEven()
odd = SelectOdd
even = フィルタ(even)
odd = フィルタ(odd)
Interleave(even, odd)
Weave


画で表すと、こんな感じです。
  • (1): フィールドベースのクリップを生成。
  • (2): (1)のクリップをフィールド別に選択して、変数evenとoddに入れる。
  • (3): even/odd、それぞれにフィルタをかける。
  • (4): even -> odd -> even -> odd・・・の順に組み合わせたクリップを生成。
  • (5): (4)のクリップを組み合わせてインターレースなクリップを作る。


# ダウンロード

インターレース素材系関数集」から、myFunctions.avsをダウンロードしてください。


# 書式

iFilterT(clip clip, string "filter")
  • 引数
    • clip: ビデオクリップ
    • filter: フィルタ

# 使用例

iFilterT("KenKunNR(256, 2, 20)")


# 注意

  • あらかじめフィールドオーダーを正しく指定しておくこと(AssumeTFF/AssumeBFFなどを使って)。
  • 引数に引用符が含まれるときは、filterを三重の引用符で囲むこと。
    # 例
    iFilterT("""Convolution3D(preset="movieHQ")""")
  • iFilterとiFilterTの違い」を参照。

myFunctionsをver.0.2に更新。

ユーザー定義関数スクリプト集のmyFunctionsを更新しました。主な変更点は、以下の通りです。

  • iFilterBのreturn文が間違っていたのを修正。
  • iFilterBの引数resize_filterをfilterに変更。
  • iF関数の追加。

iFilterBのreturn文がreturn clipになっていたために、オリジナルのクリップそのままを返していました。何て初歩的なミス・・・ orz

公開する直前に少しいじったのが仇となりました。もし使ってくれた人がいたら、すいませんでした。

ダウンロード、および詳しい解説(?)は、こちらのエントリから。

myFunctions: iFilter関数

# 説明

以下のスクリプトを関数化したものです。
SeparateFields()
フィルタ
Weave()


画で表すと、こんな感じです。

(1)でフィールドベースのクリップを生成。トップファーストのクリップは、トップ→ボトム→トップ→・・・という並び順になります。フレームレートは2倍、縦解像度は半分になります。

(2)で、(1)のクリップにフィルタをかけます。

(3)で、(2)のクリップを2フィールド単位で組み合わせて、フレームベースのクリップを生成します。元のフレームレートと大きさのインターレースなクリップです。


# ダウンロード

インターレース素材系関数集」から、myFunctions.avsをダウンロードしてください。


# 書式

iFilter(clip clip, string "filter")
  • 引数
    • clip: ビデオクリップ
    • filter: フィルタ

# 使用例

iFilter("KenKunNR(256, 2, 20)")


# 注意

  • あらかじめフィールドオーダーを正しく指定しておくこと(AssumeTFF/AssumeBFFなどを使って)。
  • 引数に引用符が含まれるときは、filterを三重の引用符で囲むこと。
    # 例
    iFilter("""Convolution3D(preset="movieHQ")""")
  • iFilterとiFilterTの違い」を参照。

Page 6 of 8: « 1 2 3 4 5 6 7 8 »