Advertisement
mawen1250

Hyouka BDrip test1

Jul 2nd, 2012
700
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. XXXSource("xxx.xxx")
  2.  
  3. src   = last
  4. src16 = src.U16
  5. #生成edge mask
  6. emask = src.tcanny(sigma=1.2, mode=1).mt_lut("x 3 <= 0 x 3 - 5 << ?", U=1, V=1).RemoveGrain(20, -1)
  7.  
  8. #对噪点做non-linear sharpen的参数与lut公式
  9. s_str     = 1.2
  10. s_reverse = s_str + 0.25
  11. s_divisor = 1.5
  12. s_indexR  = 1.281
  13. sstring   = "x 128 - abs "+String(s_divisor)+" / 1 "+String(s_indexR)+" / ^ "+String(s_str)+" * x 128 - x 128 - abs 0.001 + / * x 128 - 2 ^ x 128 - 2 ^ "+String(s_reverse)+" + / * 128 +"
  14.  
  15. pre_nr  = src.RemoveGrain(11, 0).RemoveGrain(4, 0)    #对src做2种blur得到pre_nr(2重blur得到的差值锐化后有缩小噪点的功能)
  16. pre_nr16= pre_nr.U16
  17. dif_nr  = mt_makediff(src, pre_nr, Y=3, U=1, V=1)   #src与pre_nr做差后得到blur过程(噪点)
  18.  
  19. #NRDB
  20. nr16    = pre_nr16.Dither_resize16(src.width, src.height, kernel="Gauss", fh=-1, fv=-1, a1=20, U=2, V=2)    #对pre_nr继续做第3次16bit下的blur
  21. noise16 = makediff16(src16, nr16, U=1, V=1)    #做差得16bit下的3次blur过程差值(噪点+细节)noise16
  22. deband  = nr16.GradFun3(thr=0.25, radius=12, smode=2, mask=0, ampn=0, lsb=true, lsb_in=true)    #对3重blur后的16bit的视频做deband(也就是NRDB,避免noise对deband造成干扰)
  23. db16    = Dither_add16(deband, noise16, U=2, V=2, dif=true)     #将noise16加回deband的视频得到只有deband处理的视频
  24.  
  25. #Contra-Sharpening
  26. db8     = db16.DitherPost(mode=0)
  27. sharp8  = dif_nr.mt_lut(sstring, U=1, V=1)    #blur过程差值(噪点)的锐化及弱化处理
  28. dif_db  = mt_makediff(pre_nr, db8, U=1, V=1).mt_lut(sstring, U=1, V=1)  #deband过程差值(banding、细节)进行8bit下的锐化及弱化处理
  29. shfx8   = sharp8.Repair(dif_db, 1, -1)  #用deband过程差值的锐化修复噪点的锐化(限制锐化强度不超过deband去除的)
  30. shfx8   = mt_lutxy(sharp8, shfx8, "x 128 - abs y 128 - abs < x y ?", U=1, V=1)    #使Repair后的差值不超过Repair前
  31. shfx16  = shfx8.U16
  32. sharp16 = sharp8.U16.Dither_limit_dif16(shfx16, thr=2.5, U=1, V=1)  #16bit下用Repair后的锐化diff限制Repair前的锐化diff
  33.  
  34. d_lm8   = mt_lutxy(sharp8, shfx8, "x y != 255 0 ?", U=1, V=1)     #用Repair前后不同之处生成mask
  35. shpFin  = Dither_merge16_8(shfx16, sharp16, d_lm8, U=1, V=1)    #用mask merge 16bit的2个clip,Repair有作用的地方取限制后的16bit diff,无作用的地方取8bit升成的16bit diff(达到16bit下Repair的作用)
  36.  
  37. dark    = db16.Dither_add16(shpFin, Y=3, U=2, V=2, dif=true)    #将处理过后的用于锐化的噪点16bit diff加回deband的16bit clip,用于画面暗部
  38. bright  = src.GrainStabilize1(temp=70, radius=3, adapt=-1, p=pre_nr, diff_nr=dif_nr).STPresso(tthr=0)    #对src的噪点做stabilize以降低所需码率,用于画面亮部
  39.  
  40. flat    = ALMerge(dark, bright, pre_nr, U=3, V=3)   #用ALMerge取dark和bright进行明暗的加权后得到所处理过的画面平面区域
  41.  
  42. Dither_merge16_8(flat, src16, emask, luma=true, U=3, V=3)    #用edge mask merge以保护画面边缘部分,只取平面部分的处理
  43.  
  44. #Down10(stack=false)  #降为10bit Interleave输出给x264
  45. #DitherPost()   #降为8bit输出
  46.  
  47. FUNCTION makediff16(clip a, clip b, int "Y", int "U", int "V"){
  48.   Y = Default(Y, 3)
  49.   U = Default(U, 3)
  50.   V = Default(V, 3)
  51.  
  52.   addend = b.Dither_lut16("65536 x -", Y=Y==3?3:1, U=U==3?3:1, V=V==3?3:1)
  53.   wrap   = b.Dither_lut16("x 0 == 1 0 ?", Y=Y==3?3:1, U=U==3?3:1, V=V==3?3:1)
  54.  
  55.   diff = Dither_add16(a, addend, Y=Y==3?3:1, U=U==3?3:1, V=V==3?3:1, dif=true)
  56.   \     .Dither_add16(wrap, Y=Y==3?3:1, U=U==3?3:1, V=V==3?3:1, dif=false)
  57.  
  58.   diff = ( Y==2 || U==2 || V==2 ) ? mt_lutxy( diff, a, Y=(Y==2?4:2), U=(U==2?4:2), V=(V==2?4:2) ) : diff
  59.   diff = ( Y==4 || U==4 || V==4 ) ? mt_lutxy( diff, b, Y=(Y==4?4:2), U=(U==4?4:2), V=(V==4?4:2) ) : diff
  60.  
  61.   return ( Y<=0 || U<=0 || V<=0 ) ? diff.Dither_lut16( Y=(Y<=0?Y:2), U=(U<=0?U:2), V=(V<=0?V:2) )
  62.   \                               : diff
  63. }
  64.  
  65. Function GrainStabilize1(clip input, int "temp", int "radius", int "adapt", int "rep", bool "luma", bool "chroma", clip "p", clip "diff_nr"){
  66.  
  67.   temp   = Default(temp,     50)
  68.   radius = Default(radius,    1)
  69.   adapt  = Default(adapt,    64)
  70.   rep    = Default(rep,       3)
  71.   luma   = Default(luma,   true)
  72.   chroma = Default(chroma, true)
  73.  
  74.   Assert( input.IsYV12,            "GrainStabilize: only support YV12 colorspace!"    )
  75.   Assert( temp>=0 && temp<=100,    "GrainStabilize: invalid value for temp(0~100)!"   )
  76.   Assert( adapt>=-1 && adapt<=255, "GrainStabilize: invalid value for adapt(-1~255)!" )
  77.  
  78.   Y = luma   ? 3 : 2
  79.   U = chroma ? 3 : 2
  80.   V = chroma ? 3 : 2
  81.  
  82.   pre_nr  = Defined(p) ? p : input.RemoveGrain(luma?20:0, chroma?20:0)
  83.  
  84.   diff_nr = Defined(diff_nr) ? diff_nr : mt_makediff(input, pre_nr, Y=Y, U=U, V=V)
  85.  
  86.   diff_sb = (luma&&chroma) ? diff_nr.TemporalSoften(radius, 255, 255, scenechange=255, mode=2)
  87.   \       :  luma          ? diff_nr.TemporalSoften(radius, 255,   0, scenechange=255, mode=2)
  88.   \       :  chroma        ? diff_nr.TemporalSoften(radius,   0, 255, scenechange=255, mode=2)
  89.   \       :                  diff_nr
  90.  
  91.   diff_mg = (temp ==   0) ? diff_nr
  92.   \       : (temp == 100) ? diff_sb
  93.   \       : (luma&&chroma) ? Merge(diff_nr, diff_sb, temp/100.)
  94.   \       :  luma          ? MergeLuma(diff_nr, diff_sb, temp/100.)
  95.   \       :  chroma        ? MergeChroma(diff_nr, diff_sb, temp/100.)
  96.   \       :                  diff_nr
  97.  
  98.   stabled = rep==0 ? mt_adddiff(pre_nr, diff_mg, Y=Y, U=U, V=V)
  99.   \                : mt_adddiff(pre_nr, diff_mg, Y=Y, U=U, V=V).Repair(input, mode=rep)
  100.  
  101.   Lmask = adapt==0   ? input.RemoveGrain(19, -1)
  102.   \     : adapt==255 ? input.mt_invert(U=1, V=1).RemoveGrain(19, -1)
  103.   \     :              input.mt_lut("x "+string(adapt)+" - abs 255 * "+string(adapt)+" 128 - abs 128 + /", U=1, V=1).RemoveGrain(19, -1)
  104.  
  105.   return adapt==-1 ? stabled
  106.   \                 : mt_merge(input, stabled, Lmask, luma=chroma, Y=Y, U=U, V=V)
  107.  
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement