Advertisement
sonkai

ivtc_txt30mc

Feb 2nd, 2013
770
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #===================================================================================================
  2. #
  3. # txt30mc.avs
  4. # 30pテロの24p化
  5. # ivtc_txt30mcの記述
  6. #
  7. # 使い方の例:
  8. # Trim(25580,26174).ivtc_txt30mc(0, draft=false)
  9. #
  10. # 利用・改変はご自由にどうぞ。
  11. #===================================================================================================
  12.  
  13. Import("TempGaussMC_beta2.avsi")
  14.  
  15. #-----------------------------------------------------------------------------------
  16. # ivtc_txt30mc
  17. # frame_ref: フレームの続き具合による(0-4)
  18. # draft:
  19. # recalc: 動き解析に重量版の解析関数(txt30mc_getVectorRecalc)を使うならtrue。うまく組めていないので使わないほうがいいです。
  20. # toggle: テロップを寄せる向きが間違っていて、滑らかに流れない場合はtrue。
  21. #-----------------------------------------------------------------------------------
  22. Function ivtc_txt30mc (clip src, int frame_ref, bool "srcbob", bool "draft", bool "recalc", bool "toggle")
  23. {
  24.   srcbob    = Default (srcbob, false)
  25.   draft     = Default (draft,  false)
  26.   recalc = draft ? false : Default(recalc, false)
  27.   toggle = Default(toggle, false)
  28.  
  29.   field_ref = (srcbob) ? frame_ref : frame_ref * 2
  30.   field_ref =      field_ref  % 5
  31.   invpos    = (5 - field_ref) % 5
  32.   pel       = (draft) ? 1 : 2
  33.  
  34.   src
  35.     (srcbob) ? last
  36. \  : (draft ) ? Bob ()
  37. \  :            QTGMC (SourceMatch=3, Lossless=2, tr0=1, tr1=1, tr2=1)
  38.  
  39.   getvector_func = (recalc) ? "txt30mc_getVectorRecalc" : "txt30mc_getVector"
  40.   offset_direction = select(frame_ref % 5, 1, -1, -1, 1, 1) # テロップを寄せる方向をframe_refから決定する
  41.   offset_direction = toggle ? -1 * offset_direction : offset_direction
  42.  
  43.   c1=SelectEvery(10, 1-invpos, 2-invpos, 7-invpos, 5-invpos) # time=25 or time=75ブレンド
  44.   c2=SelectEvery(10, 3-invpos, 4-invpos, 9-invpos, 8-invpos) # time=50ブレンド
  45.  
  46.   super = c1.MSuper(pel=pel)
  47.   vect_f = Eval(getvector_func + "(super, false, 1)")
  48.   vect_b = Eval(getvector_func + "(super, true, 1)")
  49.   fix1 = c1.MFlowInter(super, vect_b, vect_f, time=50-offset_direction*25, thSCD1=400).SelectEvery(4,0,2)
  50.  
  51.   super = c2.MSuper(pel=pel)
  52.   vect_f = Eval(getvector_func + "(super, false, 1)")
  53.   vect_b = Eval(getvector_func + "(super, true, 1)")
  54.   fix2 = c2.MFlowInter(super, vect_b, vect_f, time=50, thSCD1=400).SelectEvery(4,0,2)
  55.  
  56.   Interleave (fix1, fix2)
  57.   Trim (invpos/2, 0)
  58. }
  59.  
  60. #-----------------------------------------------------------------------------------
  61. # 動き解析関数(デフォルト)
  62. #-----------------------------------------------------------------------------------
  63. function txt30mc_getVector(super, isb, delta)
  64. {
  65.   v = super.MAnalyse (isb=isb, delta=delta, overlap=4)
  66.  
  67.   return v
  68. }
  69.  
  70. #-----------------------------------------------------------------------------------
  71. # 動き解析関数(重計算)
  72. #-----------------------------------------------------------------------------------
  73. function txt30mc_getVectorRecalc(super, isb, delta)
  74. {
  75.   v = super.MAnalyse (isb=isb, delta=delta, overlap=4, blksize=8, blksizev=8)
  76.   v = super.MRecalculate(v, blksize=8, blksizev=8)
  77.  
  78.   return v
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement