差分関連の関数を統合。
function OverDiff3 (clip clip1,clip clip2,int "top",int "bottom",int "left",int "right",clip "c1",clip "c2",int "mode",int "margin",bool "clamp",bool "show") { show=default(show,false) top=default(top,0) bottom=default(bottom,0) left=default(left,2) right=default(right,6) margin=default(margin,0) clamp=default(clamp,false) c1=default(c1,clip1.crop(left,top,-right,-bottom).blur(0,1)) c2=default(c2,clip2.crop(left,top,-right,-bottom).blur(0,1)) mode=default(mode,2)
check_diff=mt_lutxy(c1,c2,"x y - abs",chroma="process").mt_binarize(5).mt_inpand.mt_inpand.mt_inpand
over_mask=BlankClip(clip1,color=$ffffff).Letterbox(top,bottom,left,right).mt_binarize() masked_1=mt_merge(clip1,clip2,over_mask,luma=true) show_mask=Overlay(BlankClip(clip1),check_diff).Grayscale()
clip_0=masked_1 clip_0=(show) ? merge(clip1,over_mask) : clip_0
clip_1=ConditionalFilter(check_diff,clip1,masked_1,"AverageLuma","<","1",show=show) clip_1=(show) ? StackVertical(merge(clip_1,over_mask),show_mask) : clip_1
c1_2=clip1.blur(0,1).Letterbox(top,bottom,left,right) c2_2=clip2.blur(0,1).Letterbox(top,bottom,left,right) small_0=mt_lutxy(c1_2,c2_2,"x y - abs",chroma="process").mt_binarize(40) small=(margin==0) ? small_0 : mt_logic(small_0.Loop(0,0,margin-1),small_0.Loop(margin+1,0,0),mode="or") small=(clamp) ? mt_logic(small_0,small,mode="or") : small small=small.mt_inpand big=mt_lutxy(c1_2,c2_2,"x y - abs 1.5 ^",chroma="process").mt_binarize(20) diff_mask=mt_hysteresis(small,big).mt_expand.mt_expand.mt_expand.mt_expand.mt_expand.mt_expand.mt_expand masked_2=mt_merge(clip1,clip2,diff_mask,luma=true) clip_2=ConditionalFilter(check_diff,clip1,masked_2,"averageluma","=","0",show=show) clip_2=(show) ? StackVertical(merge(clip_2,diff_mask.Grayscale()),show_mask) : clip_2
return select(mode,clip_0,clip_1,clip_2) }
clip1 - 差分を上書きしたいクリップ clip2 - 上書きに用いるクリップ top,bottom,left,right - 指定した外周を除外し、部分的なマスクを作成する c1,c2 - 比較に用いるクリップ。指定した場合、c1とc2の差分から判定を行う。クリップの一部分だけを比較する場合に使う。 mode - [default:2] 0:差分の有無に関わらず、指定した部分マスクで上書きをする。 1:差分が認められた場合のみ、指定した部分マスクで上書きをする。 2:差分が認められた箇所に自動的にマスクを作成し、上書きをする。 margin - [default:0] 入力数値の前後フレームを参照してマスクをかける (フェードイン・アウトに有効) clamp - [default:false] margin利用時に前後フレームだけでなく現在のフレームを反映させる (流れるテロップ以外では不要) show - [default:false] 適用するマスクを透過表示し、差分判定を合わせて表示する
スポンサーサイト
|