2010年4月27日星期二

Mencoder的常用h264优化参数和建议

x264在着非常好的压缩比,在同等码流上比别的视频清楚多了,如下是最常常用参数优化.使用的2次pass

1st pass

mencoder -sws 9 -oac faac -faacopts mpeg=4:br=160:object=2 -srate 48000 -channels 2 -vf crop=708:480:12:0,harddup,scale=480:272,unsharp=l3×3:0.5,dsize=-1 -ovc x264 -ffourcc H264 -x264encopts bitrate=900:turbo=2:keyint=300:keyint_min=6:scenecut=40:frameref=4:bframes=3:b_adapt=2:nob_pyramid:deblock:deblock=-1,0:cabac:qp_step=6:qcomp=0.8:direct_pred=auto:weight_b:partitions=all:8×8dct:me=umh:me_range=24:subq=6:chroma_me:mixed_refs:trellis=2:psy-rd=0,0:nofast_pskip:nodct_decimate:aq_mode=2:aq_strength=1:level_idc=22:nointerlaced:nopsnr:nossim:threads=auto:pass=1 "INPUT.mpg" -o "OUTPUT.avi"

2ed pass

mencoder -sws 9 -oac faac -faacopts mpeg=4:br=160:object=2 -srate 48000 -channels 2 -vf crop=708:480:12:0,harddup,scale=480:272,unsharp=l3×3:0.5,dsize=-1 -ovc x264 -ffourcc H264 -x264encopts bitrate=900:turbo=1:keyint=300:keyint_min=6:scenecut=40:frameref=4:bframes=3:b_adapt=2:nob_pyramid:deblock:deblock=-1,0:cabac:qp_step=6:qcomp=0.8:direct_pred=auto:weight_b:partitions=all:8×8dct:
me=umh:me_range=24:subq=6:chroma_me:mixed_refs:trellis=2:psy-rd=0,0:nofast_pskip:nodct_decimate:aq_mode=2:aq_strength=1:level_idc=22:nointerlaced:nopsnr:nossim:threads=auto:pass=2 "INPUT.mpg" -o "OUTPUT.avi"



deblock=<−6−6>,<−6−6>(这样的码率deblock用-2,-1不好,建议-1,0)
第一个参数是AlphaC0(默认值:0)。该参数调整的是H.264内循环反块效应滤镜所用的阈值。第一,该参数调整的是滤镜对于任何一个像素所允许产生的变动的最大数量。第二,该参数影响的是将被滤除的边界两侧差别的阈值。正数值使更多的块效应损伤得到削减,但同时也会损伤画面细节。
第二个参数是Beta(默认值:0)。该参数影响的是画面细节的阈值。细节很多的块将不被过滤,因为滤镜产生的平滑效果会比原来的块效应效果更加明显。
滤镜的默认行为几乎总是带来最优的质量,所以最好要么不调这个选项,要么只对其作少量调整。然而,如果你的源视频素材已经有一些块效应或噪声效果你想要去除,那么可能将这个选项调高一点是个不错的办法。
AVC格式内置了一个极其实用的特性,它可以消除马赛克和其他人为编码的瑕疵,而这些问题曾经使得AVC之前的那些格式饱受困扰。它在AVC的编码中相当实用,由于AVC是构筑在这个滤镜之上的事实以及你可能经历到的在视频中存在过多的马赛克以及人为编码的瑕疵(糟糕的片源),一般来说在正常情况下不要禁止这个去块插件。然而,因为它会占用大量的解码时间,如果解码器又不支持在播放时手动关闭它,你可能会考虑(在编码时)禁止掉它以获得尽可能快的解码速度(Xbox、掌上电脑等等)。
应该有这样的认识:即由于人类的视觉系统(human visual system (HVS))在空间上比较复杂的场景中往往会把瑕疵和马赛克当作该场景的固有细节,因此去块插件的使用在原则上常常会存在争议。因为x264会默认地除去这些人为编码的痕迹,人类的视觉系统便会以为这是“损失了细节”,即使从技术角度来讲,x264的细节处理其实相当精确——甚至在相近的比特率之下的表现有过之而无不及。事实上,已经有共识认为(Doom9论坛的编解码器性能对比也很好地支持这一观点)x264确实是在致力于比ASP(未去马赛克的)编解码器在相近的比特率之下更精确地保持更多的细节。然而,去块插件对人为编码瑕疵的去除仍然为人类的视觉系统所干涉并认为它移除了本该存在的画面细节,而存在这些虚假的“细节”的画面正是人们在不使用去块插件的情况下所习惯了的。对于那些认为在编码视频中的噪点可以得到一个更为柔和和舒服的画面的人们来说,去块插件对这些噪点的去除也并不讨巧。这些偏好依据各人的情况是有所不同的,所以请努力地发现什么样的设定对你的眼睛和需求来说是最合适的。
Alpha去块阈值“strength”(P)帮助决定需要多强的去块效果来除去马赛克。Beta去块阈值“threshold”(见上图的Q)确定有多少马赛克需要去除。这个值设定得越高,x264就会将越多的视频部分理解为马赛克(如果设定得过高,会将过多的视频部分判断为马赛克),因而会进行更多的去块操作。当然,如果你对原材料“清洗”(比喻去块)得不够,在那些没有被清洗到的地方就会有污渍(比喻马赛克)残留下来——就这样按照清洗衬衫的方法来考虑它——而如果你清洗的强度不够,有些污渍便不会完全消失。然而,如果你洗得过多,力量过强,你就会毁掉这件衬衫而不是清洗污渍了——会有很难看的褪色,并且纹理和细节都被抹掉了。
==========================================
turbo(仅用于二阶段编码)(建议pass1里加入turbo=2)
使用更快的算法并禁用大量占用CPU的选项以使第一阶段编码的运行大幅加快。该选项可能稍稍降低全局峰值信噪比(大约为0.01dB)并且改变单个帧的类型以及稍稍改变该帧的峰值信噪比(最多至0.03dB)。
==========================================
(no)b_pyramid(建议关掉)
允许B帧作用预测其它帧的参照帧。例如,考虑3个连续的B帧:IO B1 B2 B3 P4。不用这个选项的话,B帧的样式与MPEG-[124]中的一样。这样这些帧将以IO P4 B1 B2 B3的次序编码,而所有的B帧都是从IO和P4中预测出来的。使用了这个选项后,这些帧将编码为IO 04 B2 B1 B3。 B2与前面所述的一样,但B1是从IO和B2预测出来的,而B3是从B2和P4预测出来的。这种方式通常产生稍许好一些的压缩效果,而几乎没有运行速度上的开销。然而,这是一个实验性的选项:没有完全调整好并且可能不能总是起作用。要求bframes >= 2。缺点:将解码延迟量增加至2帧。
==========================================
(no)b_adapt(建议设置成b_adapt=2)
自动决定何时使用B帧以及使用多少,数量上限为以上所指定的最大值(默认值:开启)。如果禁用了这个该项,那么将使用的B帧数为最大值。
==========================================
me=<name>(建议umh和hex)

选择全像素运动估计算法。dia
菱形搜索,半径为1(运行快)hex
六边形搜索,半径为2(默认值)umh
非均匀的多六边形搜索(运行慢)esa
彻底性搜索(运行非常慢,而且不比umh好多少)
==========================================
subq=<0−9>(建议6-7)

调整亚像素优化质量。该参数控制的是运动估计决策过程中质量与速度的权衡。 subq=5能比subq=1多压缩掉10%。 0
对于所有候选宏块类型运行全像素精度的运动估计操作。然后选择 SAD 指标最佳的类型(比 subq=1 快,不推荐,除非你需要极其快速的编码)。 1
执行值为 0 时的操作,然后优化这种类型的运动值,使其达到快速四分之一像素模式的精度(运行快)。2
对于所有候选宏块类型运行半像素精度的运动估计操作。然后选择 SATD 指标最佳的类型。然后优化这种类型的运动值,使其达到快速四分之一像素模式的精度 3
与2相似,但采用较慢的四分之一像素优化模式。4
对于所有候选宏块类型运行快速四分之一像素精度的运动估计操作。然后选择 SATD 指标最佳的类型。然后完成对于此种类型的四分之像素模式的优化操作。5
在选择最佳类型之前,对于所有候选宏块类型运行最佳质量的四分之一像素精度的运动估计操作。同时也使用 SATD 指标优化双向宏块中使用的两个运动矢量,而不是重用向前和向后搜索中找到的矢量。6
启用I帧和P帧中宏块类型的码率失真优化模式。(默认值)7
在所有帧中启用宏块类型的码率失真优化模式。8
启用运动矢量的码率失真优化模式,以及I帧和P帧中的内部预测模式。9
启用运动矢量的码率失真优化模式,以及所有帧中的内部预测模式。(最佳)
以上内容中,“所有的候选宏块类型”并不恰恰意味着所有已启用的类型: 4×4、4×8、8×4只有当8×8比16×16好时才尝试采用
==========================================
(no)mixed_refs
允许每个8×8或16×8的运动部分独立地选取一个参照帧。不用这个选项的话,整个宏块必须采用同一个参照帧。要求frameref>1。
==========================================
frameref=<1−16>建议(4-6)
B帧和P帧中的预测器里所使用的之前出现的帧的数量(默认值:1)。该选项在动画是有效果的,但在实况视频素材中,大约6个参照帧之后参照帧的优化效果急剧下降。该选项对于解码速度没有影响,但确实增加了解码所需的内存量。某些解码器最多只能处理15个参照帧。=<1−16>(建议4-6)
==========================================
bframes=<0−16> (建议3)
I帧和P帧之间连续出现的B帧的最大数量(默认值:0)
==========================================
partitions=<list>
启用一些可选的宏块类型(默认值:p8×8,b8×8,i8×8,i4×4)。 p8×8
启用p16×8、p8×16、p8×8类型。p4×4
启用p8×4、p4×8、p4×4类型。 p4×4只在subq >= 5,并且分辨率低时才推荐使用。b8×8
启用b16×8、b8×16、b8×8类型 i8×8
启用i8×8类型。除非启用了8×8dct,否则i8×8没有任何效果。i4×4
启用i4×4类型。all
启用以上所有类型。
none禁用以上所有类型。
不管这个选项设为何值,p16×16、b16×16和i16×16三种宏块类型总是启用的。
其思想是找到最适合描绘画面某一区域的宏块类型和尺寸。例如,全局摇摄镜头较好以16×16的块来表示,而小型移动物体较好以小一点的块来表示。
===========================================
scale[=w:h[:ilaced[:chr_drop[:par[:par2[:presize[:noup[:arnd]]]]]]]]

使用软件缩放器(速度慢)缩放图像并执行YUV<−>RGB色彩空间转换(另参见−sws)。
<w>,<h>
缩放后的宽/ 高值(默认值:原始的宽/ 高值)
注意: 若使用了−zoom,并且底层的滤镜(包括libvo)无法执行缩放,则其默认设置为 d_宽/ d_高!
0:缩放后的d_宽/ d_高
−1:原始的宽/ 高
−2:使用另一个尺寸的值和缩放前的宽高比计算w/h。
−3:使用另一个尺寸的值和原始的宽高比计算w/h。
−(n+8):与以上的−n相似,但舍入尺寸值至最接近的16的倍数
<ilaced>触发隔行扫描视频的缩放方式。
0:关闭(默认)
1: 打开
<chr_drop>色度信息的跳过方式 chroma skipping
0:使用所有可用输入扫描行上的色度信息。
1: 只使用每隔2个输入扫描行上的色度信息。
2: 只使用每隔4个输入扫描行上的色度信息。
3: 只使用每隔8个输入扫描行上的色度信息。
<par>[:<par2>](另参见−sws)根据−sws中所选的缩放器类型设置缩放参数。
−sws 2 (双立方插值):B(雾化)和C(色斑)
0.00:0.60 默认值
0.00:0.75 VirtualDub中的“精确双立方插值”
0.00:0.50 Catmull-Rom插值
0.33:0.33 Mitchell-Netravali插值
1.00:0.00 立方式B-插值
−sws 7 (高斯模糊):锐化度(0(柔和) − 100 (锐利))
−sws 9 (LANCZOS迭代):过滤长度(1−10)
<presize>

缩放至预设尺寸。
qntsc: 352×240 (NTSC四分之一大小屏幕)
qpal: 352×288 (PAL四分之一大小屏幕)
ntsc: 720×480 (标准NTSC)
pal: 720×576 (标准PAL)
sntsc: 640×480 (正方形像素NTSC)
spal: 768×576 (正方形像素PAL)

<noup>不允许放大时超出原始尺寸。
0:允许放大时超出(默认)。
1: 若有一个尺寸超出其原始值时则不允许。
2: 若有两个尺寸均超出其原始值时则不允许。

<arnd>垂直缩放器使用精确数值舍入,这可能比默认的舍入方式快速或缓慢。
0:禁止精确数值舍入(默认)
1:允许精确数值舍入(默认)

-vf scale=512:-3:-vf表示视频格式,scale是缩放,512:-3表示强制将宽度设置为512,高度写为-3表示保持高宽比,也可以设置为 -1或-2,具体表示什么,有兴趣的可以尝试一下。如果要强制转化为统一大小,可以直接写-vf scale=640:480,但笔者个人建议用-3来保持高宽比。-vf里还有expand和crop参数,例如:-vf scale=512:384,expand=512:384:::1,crop=512:384:0:0,expand表示膨胀,crop表示裁剪

没有评论:

发表评论