Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function f3kpf(clip src, int "range", int "y", int "c", float "thr", float "elast", bool "lsb_in", bool "tv_range"){
- lsb_in=default(lsb_in, true)
- w = src.Width
- h = lsb_in ? src.Height/2 : src.Height
- range = default(range, min(30, max((w-1280)/160 + 12, (h-720)/ 90 + 12, 8)))
- y = default(y, 40)
- c = default(c, 40)
- thr = default(thr, 0.3)
- elast = default(elast, 2.5)
- tv_range = default(tv_range, true)
- yp = y > 0
- cp = c > 0
- rgy1 = yp ? 11 : -1
- rgc1 = cp ? 11 : -1
- rgy2 = yp ? 20 : -1
- rgc2 = cp ? 0 : -1
- y31 = yp ? 3 : 1
- c31 = cp ? 3 : 1
- src16 = lsb_in ? src : tv_range ? src.Dither_convert_8_to_16() : StackVertical(src, src)
- rg16 = src16.Dither_removegrain16(rgy1, rgc1).Dither_removegrain16(rgy2, rgc2)
- noise = src16.Dither_sub16(rg16, y=y31, u=c31, v=c31, dif=True)
- rg16 = src16.Dither_sub16(noise, y=y31, u=c31, v=c31, dif=True)
- smooth = rg16.f3kdb(range, y, c, c, 0, 0, keep_tv_range=tv_range, input_mode=1, output_mode=1)
- smooth = thr > 0 ? smooth.Dither_limit_dif16(rg16, thr=thr, elast=elast, y=y31, u=c31, v=c31) : smooth
- output = smooth.Dither_add16(noise, y=y31, u=c31, v=c31, dif=True)
- return !yp ? mergeluma(output, src16) : !cp ? mergechroma(output, src16) : output
- }
- function lfdeband(clip clp, int "y", int "uv"){
- y = Default(y, 3)
- c = clp.IsY ? 1 : Default(uv, 3)
- fy = y==3 ? 80 : 0
- fc = c==3 ? 80 : 0
- y31 = y==3 ? 3 : 1
- c31 = c==3 ? 3 : 1
- w = clp.Width
- h = clp.Height
- hss = clp.IsY || clp.IsYV24 || clp.Dither_isYV411 ? 1 : 2
- vss = clp.IsY || clp.IsYV24 || clp.IsYV16 ? 1 : clp.IsYV411 ? 4 : 2
- dw = (Float(w) / 2.0)
- dw = Round(dw / Float(hss)) * hss
- dh = (Float(h) / 2.0)
- dh = Round(dh / Float(vss)) * vss
- lo = clp.dither_resize16(dw,dh,kernel="spline64",y=y31,u=c31,v=c31)
- lo = clp.IsY ? lo.converttoyv12() : lo
- lof = lo.f3kdb(range=30,y=fy,cb=fc,cr=fc,grainy=0,grainc=0,sample_mode=2,input_depth=16,output_depth=16)
- lof = clp.IsY ? lof.converttoy8() : lof
- f = dither_sub16(lof,lo,dif=true,y=y31,u=c31,v=c31).dither_resize16(w,h,kernel="spline64",y=y31,u=c31,v=c31)
- return dither_add16(clp, f, dif=true,y=y,u=c,v=c)
- ###############################################################################################################################
- # Internally, Gradfun3's default detail/linemask threshold is defined as follows, relative to the GradFun3 ''thr'' parameter. #
- ###############################################################################################################################
- # thr = 0.05 ~ 0.45 --> thr_det=2 # BASIC USAGE #
- # thr = 0.50 ~ 0.75 --> thr_det=3 # ----------- #
- # thr = 0.80 ~ 1.05 --> thr_det=4 # deband = f3kdb (16, 64, 64, 64, 0, 0, keep_tv_range=true, input_mode=1, output_mode=1) #
- # thr = 1.10 ~ 1.30 --> thr_det=5 # mask = gf3mask (mask=2, thr_det=2, lsb_in=true) #
- # thr = 1.30 ~ 1.65 --> thr_det=6 # Dither_merge16_8 (deband, last, mask, luma=true) #
- # thr = 1.70 ~ 1.95 --> thr_det=7 # #
- ###############################################################################################################################
- function gf3mask(clip c, int "mask", int "thr_det", bool "lsb_in"){
- lsb_in = default(lsb_in, true)
- thr_det = default(thr_det, 2)
- mask = default(mask, 2)
- yv411_flag = c.Dither_isyv411 ()
- td_lo = Dither_max (thr_det * 0.75, 1)
- td_hi = Dither_max (thr_det, 1)
- mexpr = Dither_make_expr_gate (td_lo, td_hi)
- src_8 = (lsb_in ) ? c.ditherpost(mode=-1,u=1,v=1) : c
- src_8 = (yv411_flag) ? src_8.ConvertToY8 () : src_8
- dmask = src_8.Dither_build_gf3_range_mask(mask)
- dmask = thr_det < 5 ? dmask.mt_binarize(thr_det-1) : dmask.mt_lut (expr=mexpr)
- dmask = dmask.removegrain (22, -1)
- dmask = (mask > 1) ? dmask.removegrain (11, -1) : dmask
- dmask = (mask > 2) ? dmask.removegrain (20, -1) : dmask
- return (yv411_flag) ? dmask.ConvertToYV411 () : dmask
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement