分页: 2 / 2

Re: 最新的ffdshow能解码10bit源了?

发表于 : 2011-07-15 20:28
-o-o-304-o-o-
SAPikachu 写了:高bitdepth源造起来比较麻烦,我知道的方法是通过GradFun3(http://forum.doom9.org/showthread.php?p ... ost1386559),添加两个函数:

代码: 全选

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

}

然后如果不需要deband的话,Dither_convert_8_to_16().output_16bit_interleaved(),需要deband的话,GradFun3_nodither().output_16bit_interleaved(),弄出来的数据就是16bit精度了,然后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
x264就能吃下去了。

(声明下我个人没测试过。。。是看 http://forum.doom9.org/showthread.php?p ... ost1507639 学回来的。
皮神v5

Re: 最新的ffdshow能解码10bit源了?

发表于 : 2011-08-08 10:23
SquallATF
话说ffdshow-tryout的话svn 3954才开始支持10bit解码的,之前的版本解码会有马赛克
svn 3954 changelog
Added support for decoding H.264 10-bit 4:2:0 and 4:4:4.
Patch made by Lord.
顺便问个问题 把8bit提升到16bit在编码成10bit中间不会出现损失么?不可以直接把8bit编码成10bit么?

Re: 最新的ffdshow能解码10bit源了?

发表于 : 2011-08-08 10:53
SAPikachu
SquallATF 写了:话说ffdshow-tryout的话svn 3954才开始支持10bit解码的,之前的版本解码会有马赛克

顺便问个问题 把8bit提升到16bit在编码成10bit中间不会出现损失么?不可以直接把8bit编码成10bit么?
撇除最近的x264 dither算法问题的话,8->16->10不会出现损失,只是简单的左移右移而已。当然意义确实也不大就是。

Re: 最新的ffdshow能解码10bit源了?

发表于 : 2011-08-18 10:21
cpu100
不知道制作好比8bit高的图片如何输出。
自己做好的图片不知道如何贴出来,以下转个别的地方图片:
图片

bpc
簡單說:
8bpc = 2的8次方 2x2x2x2x2x2x2x2=256
16bpc = 2的16次方 2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2=65536
32bpc = 2的32次方 2x2x............................................x2=4294967296
8bpc 就是RGB每一個Channel有256個色階,而16bpc 就是RGB每一個Channel有65536個色階。

有个问题:技术上如何通过制作——输出到10bit的视频存储?

Re: 最新的ffdshow能解码10bit源了?

发表于 : 2011-08-19 0:58
4h4h270
试了下ffdshow解码10bit依然有问题,我自己压的发现很多码,不过madvr就没有任何问题...
不知道是否是因为用了aq3的缘故

Re: 最新的ffdshow能解码10bit源了?

发表于 : 2011-10-10 20:20
second
4h4h270 写了:试了下ffdshow解码10bit依然有问题,我自己压的发现很多码,不过madvr就没有任何问题...
不知道是否是因为用了aq3的缘故
madvr+lav最给力了

Re: 最新的ffdshow能解码10bit源了?

发表于 : 2011-10-10 22:03
06_taro
aq-mode=3 only affects in rate-control when encoding, and has nothing to do with decoding performance.