Advertisement
sonkai

ivtc_txt30mc/txt30mcHybrid

Feb 8th, 2013
1,413
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #===================================================================================================
  2. #
  3. # txt30mc.avs
  4. # 30pテロ処理関数
  5. # ivtc_txt30mc/txt30mcHybridの記述
  6. #
  7. #===================================================================================================
  8.  
  9. Import("TempGaussMC_beta2.avsi")
  10.  
  11. #-----------------------------------------------------------------------------------
  12. # txt30mcHybrid
  13. # テロップ部分を含めた24p化
  14. # ベースは5の倍数クリップ
  15. # frame_ref: フレームの続き具合による(0-4)
  16. # draft:
  17. # field:0でも1でも可
  18. # txt_area:テロップの高さ
  19. # top:上テロップならtrue
  20. # show:確認するならtrue
  21. #-----------------------------------------------------------------------------------
  22. function txt30mcHybrid(clip c,int frame_ref, bool "draft",int "field",int "txt_area",bool "top",bool "show")
  23. {
  24.   h=c.height()
  25.   draft=default(draft,false)
  26.   field=default(field,0)
  27.   show=default(show,false)
  28.   field=(field>1)?1:(field<0)?0:field
  29.   txt_area=default(txt_area,(h==1080)?280:h/4)
  30.   txt_area=(txt_area%2==0)?abs(txt_area):abs(txt_area-1)
  31.   top=default(top,false)
  32.   crop_c1=(top==false)?0:txt_area
  33.   crop_c2=(top==false)?h-txt_area:0
  34.   num=frame_ref%5
  35.   offset1=select(field,select(num,0,0,0,1,1),select(num,1,0,0,2,1))
  36.   offset2=select(field,select(num,3,2,2,4,3),select(num,3,3,2,4,4))
  37.   c1=c.crop(0,crop_c1,0,h-txt_area).DoubleWeave().Pulldown(offset1,offset2)
  38. #  c_e=c1.Trim(c1.framecount-1,-1).SeparateFields().FreezeFrame(1,1,0).weave()
  39. #  c1=(num==3)?c1.Trim(0,c1.framecount-2)++c_e:c1
  40.   c2=c.crop(0,crop_c2,0,txt_area).ivtc_txt30mc(frame_ref,draft=draft)
  41.   c2=(show==false)?c2:c2.coloryuv(gain_v=32)
  42.   return (top==false)?StackVertical(c1,c2):StackVertical(c2,c1)
  43. }
  44.  
  45. #-----------------------------------------------------------------------------------
  46. # ivtc_txt30mc
  47. # 30pテロ部を24pに変換して返す
  48. #-----------------------------------------------------------------------------------
  49. function ivtc_txt30mc(clip src, int frame_ref, bool "draft")
  50. {
  51.   draft     = Default(draft,  false)
  52.  
  53.   frame_ref = frame_ref % 5
  54.   offset    = select(frame_ref,0,0,-1,1,1)
  55.   pattern   = select(frame_ref,0,1,0,0,1)
  56.   direction = select(frame_ref,-1,-1,1,1,1)
  57.   pel       = (draft) ? 1 : 2
  58.  
  59.   src
  60.   (draft) ? Bob() : QTGMC(SourceMatch=3, Lossless=2, tr0=1, tr1=1, tr2=1)
  61.  
  62.   c1 = (pattern==0) ? SelectEvery(10, offset, 2+offset, 7+offset, 5+offset) : SelectEvery(10, 2+offset, 4+offset, 9+offset, 7+offset)
  63.   c2 = (pattern==0) ? SelectEvery(10, 3+offset, 4+offset, 9+offset, 8+offset) : SelectEvery(10, offset, 1+offset, 6+offset, 5+offset)
  64.  
  65.   super1 = c1.MSuper(pel=pel)
  66.   vect_f1 = txt30mc_getVector(super1, false, 1)
  67.   vect_b1 = txt30mc_getVector(super1, true, 1)
  68.   fix1 = c1.MFlowInter(super1, vect_b1, vect_f1, time=50+direction*25, thSCD1=400).SelectEvery(4,0,2)
  69.  
  70.  
  71.   super2 = c2.MSuper(pel=pel)
  72.   vect_f2 = txt30mc_getVector(super2, false, 1)
  73.   vect_b2 = txt30mc_getVector(super2, true, 1)
  74.   fix2 = c2.MFlowInter(super2, vect_b2, vect_f2, time=50, thSCD1=400).SelectEvery(4,0,2)
  75.  
  76.   (pattern==0) ? Interleave(fix1, fix2) : Interleave(fix2, fix1)
  77.  
  78.   return last
  79. }
  80.  
  81. #-----------------------------------------------------------------------------------
  82. # txt30mc_getVector
  83. # 動きを解析して返す
  84. #-----------------------------------------------------------------------------------
  85. function txt30mc_getVector(super, isb, delta)
  86. {
  87.   v = super.MAnalyse (isb=isb, delta=delta, overlap=4)
  88.  
  89.   return v
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement