Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #===================================================================================================
- #
- # txt30mc.avs
- # 30pテロ処理関数
- # ivtc_txt30mc/txt30mcHybridの記述
- #
- #===================================================================================================
- Import("TempGaussMC_beta2.avsi")
- #-----------------------------------------------------------------------------------
- # txt30mcHybrid
- # テロップ部分を含めた24p化
- # ベースは5の倍数クリップ
- # frame_ref: フレームの続き具合による(0-4)
- # draft:
- # field:0でも1でも可
- # txt_area:テロップの高さ
- # top:上テロップならtrue
- # show:確認するならtrue
- #-----------------------------------------------------------------------------------
- function txt30mcHybrid(clip c,int frame_ref, bool "draft",int "field",int "txt_area",bool "top",bool "show")
- {
- h=c.height()
- draft=default(draft,false)
- field=default(field,0)
- show=default(show,false)
- field=(field>1)?1:(field<0)?0:field
- txt_area=default(txt_area,(h==1080)?280:h/4)
- txt_area=(txt_area%2==0)?abs(txt_area):abs(txt_area-1)
- top=default(top,false)
- crop_c1=(top==false)?0:txt_area
- crop_c2=(top==false)?h-txt_area:0
- num=frame_ref%5
- offset1=select(field,select(num,0,0,0,1,1),select(num,1,0,0,2,1))
- offset2=select(field,select(num,3,2,2,4,3),select(num,3,3,2,4,4))
- c1=c.crop(0,crop_c1,0,h-txt_area).DoubleWeave().Pulldown(offset1,offset2)
- # c_e=c1.Trim(c1.framecount-1,-1).SeparateFields().FreezeFrame(1,1,0).weave()
- # c1=(num==3)?c1.Trim(0,c1.framecount-2)++c_e:c1
- c2=c.crop(0,crop_c2,0,txt_area).ivtc_txt30mc(frame_ref,draft=draft)
- c2=(show==false)?c2:c2.coloryuv(gain_v=32)
- return (top==false)?StackVertical(c1,c2):StackVertical(c2,c1)
- }
- #-----------------------------------------------------------------------------------
- # ivtc_txt30mc
- # 30pテロ部を24pに変換して返す
- #-----------------------------------------------------------------------------------
- function ivtc_txt30mc(clip src, int frame_ref, bool "draft")
- {
- draft = Default(draft, false)
- frame_ref = frame_ref % 5
- offset = select(frame_ref,0,0,-1,1,1)
- pattern = select(frame_ref,0,1,0,0,1)
- direction = select(frame_ref,-1,-1,1,1,1)
- pel = (draft) ? 1 : 2
- src
- (draft) ? Bob() : QTGMC(SourceMatch=3, Lossless=2, tr0=1, tr1=1, tr2=1)
- c1 = (pattern==0) ? SelectEvery(10, offset, 2+offset, 7+offset, 5+offset) : SelectEvery(10, 2+offset, 4+offset, 9+offset, 7+offset)
- c2 = (pattern==0) ? SelectEvery(10, 3+offset, 4+offset, 9+offset, 8+offset) : SelectEvery(10, offset, 1+offset, 6+offset, 5+offset)
- super1 = c1.MSuper(pel=pel)
- vect_f1 = txt30mc_getVector(super1, false, 1)
- vect_b1 = txt30mc_getVector(super1, true, 1)
- fix1 = c1.MFlowInter(super1, vect_b1, vect_f1, time=50+direction*25, thSCD1=400).SelectEvery(4,0,2)
- super2 = c2.MSuper(pel=pel)
- vect_f2 = txt30mc_getVector(super2, false, 1)
- vect_b2 = txt30mc_getVector(super2, true, 1)
- fix2 = c2.MFlowInter(super2, vect_b2, vect_f2, time=50, thSCD1=400).SelectEvery(4,0,2)
- (pattern==0) ? Interleave(fix1, fix2) : Interleave(fix2, fix1)
- return last
- }
- #-----------------------------------------------------------------------------------
- # txt30mc_getVector
- # 動きを解析して返す
- #-----------------------------------------------------------------------------------
- function txt30mc_getVector(super, isb, delta)
- {
- v = super.MAnalyse (isb=isb, delta=delta, overlap=4)
- return v
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement