皮神v5SAPikachu 写了:高bitdepth源造起来比较麻烦,我知道的方法是通过GradFun3(http://forum.doom9.org/showthread.php?p ... ost1386559),添加两个函数:
然后如果不需要deband的话,Dither_convert_8_to_16().output_16bit_interleaved(),需要deband的话,GradFun3_nodither().output_16bit_interleaved(),弄出来的数据就是16bit精度了,然后x264的命令行这样写:代码: 全选
funtion output_16bit_interleaved(clip c) { Interleave (Dither_get_lsb (), Dither_get_msb ()) TurnRight () AssumeFieldBased ().AssumeTFF () Weave () TurnLeft () } Function GradFun3_nodither (clip src, float "thr", int "radius", float "elast", \ int "mask", int "mode", float "ampo", float "ampn", int "pat", \ bool "dyn", float "dthr", int "smode", float "wmin", float "thr_det", \ float "thr_edg", int "debug", int "subspl") { thr = Default (thr, 0.35) radius = Default (radius, 12) elast = Default (elast, 3.0) mask = Default (mask, radius/4) smode = Default (smode, 0) wmin = Default (wmin, 1.0) thr_det = Default (thr_det, 2) thr_edg = Default (thr_edg, 32) debug = Default (debug, 0) subspl = Default (subspl, 0) Assert (thr > 0, "GradFun3: "+chr(34)+"thr"+chr(34)+" must be strictly positive.") elast = Dither_max (elast, 1) w = src.Width () h = src.Height () src.Dither_convert_8_to_16 () inp = last # Main debanding (smode == 1) ? Dither_gf3_dfttest (src, radius, thr, elast) \ : (smode == 2) ? Dither_gf3_bilateral_multistage (radius, thr, elast, wmin, subspl) \ : Dither_gf3_smoothgrad_multistage (radius, thr, elast) flt = last # Edge mask edge_mask = src.mt_edge (mode="prewitt", thY1=0, thY2=255) detl_mask = src.mt_edge (mode="min/max", thY1=0, thY2=255) # Edges e_edg = Dither_make_expr_gate (thr_edg * 0.75, thr_edg) m_edg = edge_mask.mt_lut (expr=e_edg) m_edg = m_edg.RemoveGrain (21, -1) m_edg = m_edg.mt_expand_multi (sw=mask-1, sh=mask-1, mode="ellipse") # Details m_det_rad = Round (sqrt (mask)) thr_det_lo = Dither_max (thr_det * 0.75, 1) thr_det_hi = Dither_max (thr_det, 1) e_det = Dither_make_expr_gate (thr_det_lo, thr_det_hi) m_det = detl_mask.mt_lut (expr=e_det) m_det = m_det.RemoveGrain (21, -1) m_det = m_det.mt_expand_multi (sw=m_det_rad-1, sh=m_det_rad-1, mode="ellipse") # Final mask edge_mask = mt_logic (m_edg, m_det, mode="max") edge_mask = edge_mask.RemoveGrain (19, -1) edge_mask = edge_mask.RemoveGrain (19, -1) masked = Dither_merge16_8 (flt, inp, edge_mask, luma=true) (mask > 0) ? masked : flt }
x264就能吃下去了。代码: 全选
avs2yuv -raw XXXX-16bit.avs -o - | x264-1995-10.exe - --demuxer raw --input-depth 16 --input-res 704x480 --fps 23.976 --preset ultrafast --qp 0 -o XXXX_10.mkv
(声明下我个人没测试过。。。是看 http://forum.doom9.org/showthread.php?p ... ost1507639 学回来的。