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

WritePosition - 2つのクリップの開始フレームのズレを書き出す

function WritePosition (clip clip1,clip clip2,string filename,int "radius",int "depth",int "luma",bool "slip") {
slip=default(slip,false)
clip2=(slip) ? clip2.SeparateFields().Loop(0,0,0).AssumeFieldBased().Weave() : clip2
radius=default(radius,5)
depth=default(depth,30)
luma=default(luma,50)
clip1=clip1.blur(0,1)
clip2=clip2.blur(0,1)

function until_diff (clip diff,int depth,int "n") {
n=default(n,depth)
r=diff.framecount/n*(n-depth)+rand(diff.framecount/n,seed=true)
diff_frame=diff.Trim(r,-1)
clip=(depth==1) ? diff_frame : until_diff(diff,depth-1,n)
return ConditionalFilter(diff_frame,clip,diff_frame,"AverageLuma","=","0")
}

function add_radius (clip d0,clip clip1,clip clip2,int radius,int luma,int depth,int "radius_n") {
radius_n=default(radius_n,0)
d1=until_diff(mt_lutxy(clip1.Loop(0,0,radius_n),clip2,"x y - abs").Trim(10,clip1.framecount-10).mt_binarize(luma).mt_inpand,depth)
d2=until_diff(mt_lutxy(clip1,clip2.Loop(0,0,radius_n),"x y - abs").Trim(10,clip1.framecount-10).mt_binarize(luma).mt_inpand,depth)
d0=(radius==0) ? d0 : d0++d1++d2
return (radius_n+1<radius) ? add_radius(d0,clip1,clip2,radius,luma,depth,radius_n+1) : d0
}

d0=until_diff(mt_lutxy(clip1,clip2,"x y - abs").Trim(10,clip1.framecount-10).mt_binarize(luma).mt_inpand,depth)

add_radius(d0,clip1,clip2,radius,luma,depth)
return WriteFileif(filename,"AverageLuma==0",""" "n=" ""","round(current_frame/2.0)*round(((current_frame/2.0-current_frame/2)-0.25)*2)",append=false)
}


・2つのクリップを比較して、差分を検知できない開始フレームを外部ファイルに出力する
Adjust2clipと併用して開始位置を合わせることが可能

clip1 - 基準となるクリップ
clip2 - clip1と合わせるクリップ
filename - 出力ファイル名を設定する
radius - フレームをずらす範囲。1なら前後+-1フレームの計3フレーム。
depth - 差分を検知する処理の最大試行回数。差分を検知し次第、次の処理に以降する。正しい位置では差分を検知しないので、必ず最大回数まで試行する。
luma - 差分判定の閾値
slip - clip2を1フィールドずらした状態で処理を開始する

0_20150508195014def.png
→ depth (試行回数上限)

radius (試行フレームの範囲)




#使用例
#clip1
Import("BS11\Trim.avs")
clip1_1=c1.crop(8,250,-8,-160).Trim(0,c1.framecount-330)
clip1_2=c2.crop(8,250,-8,-160)
clip1_3=c3.crop(8,250,-8,-160)
clip1_4=c4.crop(8,250,-8,-160).Trim(0,c4.framecount-330)
#clip2
Import("MX\Trim.avs")
clip2_1=c1.Spline36Resize(1920,last.height,0.12,0,1440,0).crop(8,250,-8,-160).Trim(0,c1.framecount-330)
clip2_2=c2.Spline36Resize(1920,last.height,0.12,0,1440,0).crop(8,250,-8,-160)
clip2_3=c3.Spline36Resize(1920,last.height,0.12,0,1440,0).crop(8,250,-8,-160)
clip2_4=c4.Spline36Resize(1920,last.height,0.12,0,1440,0).crop(8,250,-8,-160).Trim(0,c4.framecount-330)

#Import("slip.txt")
o1=WritePosition(clip2_1,clip1_1,"1.txt")
o2=WritePosition(clip2_2,clip1_2,"2.txt")
o3=WritePosition(clip2_3,clip1_3,"3.txt")
o4=WritePosition(clip2_4,clip1_4,"4.txt")
o1++o2++o3++o4
return last


#使用例 活用編
#BS11
Import("BS11\Trim.avs")
clip1=c1.EraseLOGO(logofile="D:\Movie\logo\BS11_1920x1080.lgd", start=0, fadein=0, fadeout=0, end=framecount(c1)-331)
#MX
Import("MX\Trim.avs")
clip2=c1.EraseLOGO(logofile="D:\Movie\logo\MX_1440x1080.lgd", start=0, fadein=0, fadeout=0, end=-1)
clip2=clip2.Spline36Resize(1920,1080,0.12,0,1440,0)

n=clip2.framecount
Import("1.txt")
clip1=Adjust2clip(clip2,clip1,n,swapaudio=true)
stacksubtract(clip2,clip1,1)

#提供
clip2=clip2.ApplyRange(framecount(clip1)-330,framecount(clip1),"OverDiff3",clip1)#1920

#ANIME+
clip1=OverDiff3(clip1,clip2,0,820,100,1360,mode=1)
#テレビから離れて
clip1=OverDiff3(clip1,clip2,930,80,320,320,mode=1)

BS111=clip1
MX1=clip2
#Merge(clip1,clip2)
return last

スポンサーサイト

コメント

コメントの投稿














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


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

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