FC2ブログ
にわとり遊び
PC関連とエンコードの覚書き
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

フィールドの選択 or Mergeを自動で (その6)
function VariableMerge (clip clip_1,clip clip_2,int "cx",int "cy",int "mode",int "thr",int "show")

clip_1とclip_2をブレンドする際、2つのクリップのノイズ(コーミング)の量に応じてMergeのweightを変化させる関数です。
ここで使用するclip_1とclip_2は同じ内容のクリップであることが前提条件です。

28338a.png

clip_1 - ベースのクリップです。
clip_2 - clip_1にブレンドするクリップです。
cx,cy - clip_2の座標を指定します。これを指定すると関数内でMergeの代わりにOverlayが適用されます。
mode - 指定なしではMergeを、1を指定するとOverlayを使用します。
thr - Anticomb内のpass1を指定します。小さいほどコーミングを検知しやすくなります。[default 16]
show - 1でclip_1,clip_2,出力クリップの比較を、2でclip_1,clip_2に番号を表示します。[default 0]

function VariableMerge (clip clip_1,clip clip_2,int "cx",int "cy",int "mode",int "thr",int "show") {
cx=default(cx,0)
cy=default(cy,0)
global cx=cx
global cy=cy
mode=default(mode,0)
thr=default(thr,16)
show=default(show,0)
global clip_1= (show==2) ? clip_1.Subtitle("1 ",size=30,align=8) : clip_1
global clip_2= (show==2) ? clip_2.Subtitle(" 2",size=30,align=8) : clip_2

global clip_1V=clip_1.ConvertToYUY2().anticomb(checkmode=true, pass1=thr).ConvertToYV12()
global clip_2V=clip_2.ConvertToYUY2().anticomb(checkmode=true, pass1=thr).ConvertToYV12()

cM=ScriptClip(clip_1,"Merge(clip_1,clip_2,Abs(min(4,max(-4,(AverageChromaV(clip_1V)-AverageChromaV(clip_2V))))/10+0.5))")
cO=ScriptClip(clip_1,"Overlay(clip_1,clip_2,x=cx,y=cy,opacity=Abs(min(4,max(-4,(AverageChromaV(clip_1V)-AverageChromaV(clip_2V))))/10+0.5))")
clip=(cx==0)&&(cy==0)&&(mode==0) ? cM : cO

global MV=clip.ConvertToYUY2().anticomb(checkmode=true, pass1=thr).ConvertToYV12()
clip=(show==1) ? StackHorizontal(clip_1V,clip_2V).ReduceBy2.StackVertical(ReduceBy2(MV).AddBorders(clip.width/4,0,clip.width/4,0)).
\ScriptClip("""subtitle(string(AverageChromaV(clip_1V)-128)+" , "+string(AverageChromaV(clip_1V)-AverageChromaV(clip_2V))+" , "+string(AverageChromaV(clip_2V)-128),align=8)
\.subtitle(string(AverageChromaV(MV)-128),align=8,y=30)
\.subtitle("Merge Weight = "+string(Abs(min(4,max(-4,(AverageChromaV(clip_1V)-AverageChromaV(clip_2V))))/10+0.5)),align=8,y=60)""")
\ : clip

return clip
}


いろいろと試行錯誤して、かなり良い感じになってきました。
global変数の使い方が不安です。2回以上呼び出す場合は、その都度変数名を変える必要があります…。

Itsを使用したクリップを掛け合わせる場合は以下のように書くのがいいかと思います。
[def]
Set [24] DW023='DW023'
Set [24] DW013='DW013'
Set [24] DW134='DW134'
Set [24] DW124='DW124'
Set [24] DW024='DW024'

[avs]
LoadPlugin("Its1.dll")
DW023=DoubleWeave().SelectEvery(5, 0, 2)
DW013=DoubleWeave().SelectEvery(5, 0, 3)
DW134=DoubleWeave().SelectEvery(5, 1, 3)
DW124=DoubleWeave().SelectEvery(5, 1, 4)
DW024=DoubleWeave().SelectEvery(5, 2, 4)
V1=Its(def = "time.def", fps=-1, output = "datafile\timecode.tmc")

LoadPlugin("Its2.dll")
DW023=DoubleWeave().SelectEvery(5, 0, 3)
DW013=DoubleWeave().SelectEvery(5, 1, 3)
DW134=DoubleWeave().SelectEvery(5, 1, 4)
DW124=DoubleWeave().SelectEvery(5, 2, 4)
DW024=DoubleWeave().SelectEvery(5, 2, 5)
V2=Its(def = "time.def", fps=-1, output = "datafile\timecode.tmc")

VariableMerge(V1,V2)
スポンサーサイト

コメント

コメントの投稿














管理者にだけ表示を許可する


トラックバック
トラックバック URL
http://sasamisi.blog24.fc2.com/tb.php/297-455974b7
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。