FPDustV2
この関数は、iDust関数に名称変更されました。iDust関数を含むユーザー定義関数のダウンロードはこちらから行ってください。また、iDust関数に関する説明はこちらを見てください。
個人的理由により、FPDust関数を手直ししました。
かなり変更点があるため、FPDustV2と名称変更しています。
一応、簡単な動作確認はしていますが、テスト版と考えてください。
この関数を使用したことにより、思わぬ不具合が発生したとしても、私は一切責任を負えません。
以上のことに同意された方のみ、お試しください。
FPDustV2.avs のダウンロード(ZIP 形式で圧縮)
ダウンロード後、拡張子を*.avsに変更してください。
個人的理由により、FPDust関数を手直ししました。
かなり変更点があるため、FPDustV2と名称変更しています。
一応、簡単な動作確認はしていますが、テスト版と考えてください。
この関数を使用したことにより、思わぬ不具合が発生したとしても、私は一切責任を負えません。
以上のことに同意された方のみ、お試しください。
FPDustV2.avs のダウンロード(ZIP 形式で圧縮)
ダウンロード後、拡張子を*.avsに変更してください。
# 使用上の注意
- AviSynth 2.5.4以降、推奨(apply有効時にOverlayフィルタを使用するため)。
- 59行目: LoadPluginフィルタをパスが通るように変更してください。
###### DustV5.dllのコピー(またはリネームしたDLL)をパス指定。※必須 #####
LoadPlugin("D:\AviSynth\DustV5_2.dll") - 93行目: Bobフィルタを利用する場合で、お好みのBobフィルタ(関数)を使いたい時は「AutoBob()」の部分を、そのフィルタに変更してください。
###### Bob(60fps化) #####
bbb_clip = clip.AutoBob() #お好みのBob関数に変更可能。
# 書式
FPDustV2(clip clip, string "dust_filter", int "limit", string "output",
\ float "apply", bool "dust2mode", bool "bob_mode")
- 引数
- dust_filter: "FaeryDust", "SpaceDust", "GoldDust", "PixieDust"
- limit: limit
- output: output
- apply: フィルタ適用前と後のクリップのブレンド率。0~1までの小数で指定。1でフィルタ後のクリップが100%。(Overlayフィルタ使用)。
- dust2mode: Didee氏作PixieDust2関数を利用。
- bob_mode: SeparateFieldsではなく、Bobを利用して処理する。
# 使用例
Import("FPDustV2.avs")
FPDustV2("FaeryDust", apply=0.9, bob_mode=true)
# 更新履歴
- ver. 0.1
- 削除:fcacheパラメータ。FrameCacheを使っていた部分を削除。
- 追加:デフォルト値を埋め込んだ。
- 追加:interlacedパラメータ。true/フィールド別に処理、false/フレーム単位で処理。デフォルトはtrue。
- 追加:applyパラメータ(後述)。
- 追加:dust2modeパラメータ。Didee氏作PixieDust2関数の汎用版DeDustを使うかどうかの選択。デフォルトはfalse(使用しない)。
- ver. 0.2
- 削除:interlacedパラメータ。
- 修正:DeDust -> DideeDust2に名称変更
- 修正:_1FieldDust -> _1MoreDustに名称変更。
- ver. 0.3
- 追加:bob_modeパラメータ。trueで、Bobを利用したインターレース・フィルタリング(FPResizeの応用)。
- 修正: パラメータの名前をstrength -> limit, mode -> outputに変更。
- この関数は、iDust関数に名称変更されました。
- (2007-10-23 追記)ZIP 形式で圧縮したものに差し替えました。内容に変更はありません。
FilterRangePlus
2ちゃんねるのAvisynthスレッドで、「FilterRangeを複数指定したいときに、簡単に記述する方法がないか」という話題が出ていたので、ちょっと考えてみました。
本当は2ちゃんねるの方に書き込もうと思ったのですが、説明がかなり長くなってしまったので、ここに書くことにしました。
それに、この話題自体はすでに終わってしまったようですからね(乗り遅れた 笑)。
この関数のメリットとしては、指定する範囲の数を簡単に増やせることでしょうか(デフォルトでは3つだけ)。
逆にデメリットというか、イマイチなところは、設定の仕方がややこしかったり、ちゃんと動作するか自信がないということでしょうか(ぉぃぉぃ)。
個人的にループさせる関数を使ってみたくて作ったという感じなので、テスト版と考えてください。
○説明
minamina氏作FilterRange関数を改造して、フィルタを適用できる範囲の数を増やした。
フィルタの適用範囲の数を調節することも可能。
メインのFilterRangePlus関数とサブのRecursiveA, RecursiveB, RecursiveCの3つの関数を
セットで使用します。
○書式
○パラメータ
○使用例
適用範囲を複数指定する場合、フレーム番号が大きい範囲から順番に指定してください。
たとえば、3-6, 12-17, 21-28の3つの範囲を指定する時は、21-28, 12-17, 3-6の順になります。
×3,6, 12,17, 21,28
○21,28, 12,17, 3,6
○やってはいけない
○応用(フィルタ適用範囲の数をふやす)
関数の()内に「,int "s*", int "e*"」を追加することで、フィルタ適用範囲の数を
増やすことができます。(*は数字)
(例)5箇所指定できるようにする
○メイン関数
○サブ関数
本当は2ちゃんねるの方に書き込もうと思ったのですが、説明がかなり長くなってしまったので、ここに書くことにしました。
それに、この話題自体はすでに終わってしまったようですからね(乗り遅れた 笑)。
この関数のメリットとしては、指定する範囲の数を簡単に増やせることでしょうか(デフォルトでは3つだけ)。
逆にデメリットというか、イマイチなところは、設定の仕方がややこしかったり、ちゃんと動作するか自信がないということでしょうか(ぉぃぉぃ)。
個人的にループさせる関数を使ってみたくて作ったという感じなので、テスト版と考えてください。
○説明
minamina氏作FilterRange関数を改造して、フィルタを適用できる範囲の数を増やした。
フィルタの適用範囲の数を調節することも可能。
メインのFilterRangePlus関数とサブのRecursiveA, RecursiveB, RecursiveCの3つの関数を
セットで使用します。
○書式
FilterRangePlus(clip clip, string "filter", int "times",
\ int "s1", int "e1", int "s2", int "e2", int "s3", int "e3", ...)
○パラメータ
- filter:使用したいフィルタ
- times:フィルタを適用する範囲の数
- s*:適用開始点(*は数字)
- e*:適用終了点(*は数字)
○使用例
FilterRangePlus("GreyScale()", 3, 21,28, 12,17, 3,6)[重要]
適用範囲を複数指定する場合、フレーム番号が大きい範囲から順番に指定してください。
たとえば、3-6, 12-17, 21-28の3つの範囲を指定する時は、21-28, 12-17, 3-6の順になります。
×3,6, 12,17, 21,28
○21,28, 12,17, 3,6
○やってはいけない
- フィルタ適用範囲の数(times)が間違っている。多すぎる場合はエラーが出るようにしています。
- フィルタ適用範囲の順番が小さい番号からになっている(例)6,9, 13,17
- フィルタ適用範囲がかぶっている(例)12,16, 8,14
- フィルタ適用範囲が連続している(例)5,9, 3,5→3,9と1つにまとめる
○応用(フィルタ適用範囲の数をふやす)
関数の()内に「,int "s*", int "e*"」を追加することで、フィルタ適用範囲の数を
増やすことができます。(*は数字)
(例)5箇所指定できるようにする
function FilterRangePlus(~ int "e3", int "s4", int "e4", int "s5", int "e5")
○メイン関数
function FilterRangePlus(clip clip, string "filter", int "times",
\ int "s1", int "e1", int "s2", int "e2", int "s3", int "e3")
{
Assert(IsInt(Eval("s" + String(times))), "timesが正しくない")
Assert(s1 > s2 && e2 < s1, "範囲指定が正しくない")
d = (Eval("s" + String(times)) < 2) ? clip.Trim(0, -1) :
\ clip.Trim(0, Eval("s" + String(times)) - 1)
Eval(RecursiveA("", times, filter))
Eval(RecursiveB("", times-1))
c0 = (e1 > clip.FrameCount()-2) ? BlankClip(clip,1) : clip.Trim(e1 + 1, 0)
c = (Eval("s" + String(times)) == 0) ? Eval(RecursiveC("", (times*2)-1) + "c0") :
\ d + Eval(RecursiveC("", (times*2)-1) + "c0")
c = (e1 > clip.FrameCount()-2) ? c.Trim(0, clip.FrameCount()-1) : c
return c
}
○サブ関数
function RecursiveA(string s, int times, string filter)
{
return (times == 0) ? s :
\ "c" + String(times*2-1) + " = clip.trim(s" + String(times) + ", e" +
\ String(times) + ")." + filter + " " + RecursiveA(s, times-1, filter)
}
function RecursiveB(string s, int times)
{
return (times == 0) ? s :
\ "c" + String(times*2) + " = clip.trim(e" + String(times+1) + "+1, s" +
\ String(times) + "-1)" + " " + RecursiveB(s, times-1)
}
function RecursiveC(string s, int times)
{
return (times == 0) ? s : "c" + String(times) + " + " + RecursiveC(s, times-1)
}
あやや
Yeah!めっちゃ、にーやんです。
↑こういう入り方どうでしょう?パクリなんですが。
なるほどフィールド分離してからカラーノイズ除去って感じなのかな?他のカラーノイズ除去プラグインでも試してみる価値はあるかも。
でも名前が名前だけに紹介するかどうか悩むところ(笑)
クロスカラー除去なら、こういうのもありますよ。
使ったことはないので効果のほどは不明です。
MSharpen,MipSmooth,MaskToolsを利用。
基本的にYV12。
他にはmfRainbowとかもクロスカラー除去なのかな?
http://mf.creations.nl/avs/ ※Function includesから。
↑こういう入り方どうでしょう?パクリなんですが。
■AYaYa
なるほどフィールド分離してからカラーノイズ除去って感じなのかな?他のカラーノイズ除去プラグインでも試してみる価値はあるかも。
でも名前が名前だけに紹介するかどうか悩むところ(笑)
■DeRainbow(by sh0dan)
クロスカラー除去なら、こういうのもありますよ。
function DeRainbow(clip org, int "thresh")↓はYUY2版(といっても内部でYV12に変換している模様)。
{
assert(org.isYV12(),"DeRainbow() requires YV12 input!")
thresh = default(thresh, 10)
org_u = utoy(org)
org_v = vtoy(org)
msharpen(org, threshold = thresh, mask=true)
reduceby2()
greyscale()
uv = blur(1.5).levels(0,2.0,255,0,255, coring=false).blur(1.5).blur(1.5).levels(50,2.0,255,0,255, coring=false)
filtered_u = org_u.mipsmooth(spatial=255, temporal=255, scenechange=3, show=false, method="strong", scalefactor=0.5)
filtered_v = org_v.mipsmooth(spatial=255, temporal=255, scenechange=3, show=false, method="strong", scalefactor=0.5)
u_final = MaskedMerge(org_u, filtered_u, uv)
v_final = MaskedMerge(org_v, filtered_v, uv)
return ytouv(u_final, v_final, org)
}
# YUY2 function DeRainbowYUY2(clip org, int "thresh")使い方は、
{
assert(org.isyuy2(),"DeRainbowYUY2() requires YUY2 input!")
thresh = default(thresh, 10)
org_yv12 = org.converttoyv12()
org_u = utoy(org).converttoyv12()
org_v = vtoy(org).converttoyv12()
msharpen(org_yv12, threshold = thresh, mask=true)
bilinearresize(last.width/2, last.height)
greyscale()
uv = blur(1.5).levels(0,2.0,255,0,255, coring=false).blur(1.5).blur(1.5).levels(50,2.0,255,0,255, coring=false)
filtered_u = org_u.mipsmooth(spatial=255, temporal=255, scenechange=3, show=false, method="superstrong", scalefactor=0.5)
filtered_v = org_v.mipsmooth(spatial=255, temporal=255, scenechange=3, show=false, method="superstrong", scalefactor=0.5)
u_final = MaskedMerge(org_u, filtered_u, uv).converttoyuy2()
v_final = MaskedMerge(org_v, filtered_v, uv).converttoyuy2()
return ytouv(u_final, v_final, org)
}
DeRainbow(10) #MSharpenのしきい値みたいな感じらしいです。
使ったことはないので効果のほどは不明です。
MSharpen,MipSmooth,MaskToolsを利用。
基本的にYV12。
他にはmfRainbowとかもクロスカラー除去なのかな?
http://mf.creations.nl/avs/ ※Function includesから。



