X264设置-分析选项


封面图来自pixiv Dangmyo

友情提示

1、此文章内容为个人学习笔记,大部分的内容对小白来说稍显困难,请大家抱着看不下去右上角X的心态阅读,亦或者是你想入X264的坑 :huaji22:
2、感谢前辈做的贡献,原始文档在参考文献中有附上链接,如果想要原始文档请查看参考文献中的原文档。
3、X264中如果专门为蓝光做优化的设置,在文章中会用蓝字体标注出
4、X264中相关设置的前缀均为红色,方便阅读和查阅
5、参考文献
VCB-Studio 教程 09 x264 参数设置
原创 x264 x265 QAAC 压制教程【2020.3 版】
X264設定 NMM doc

知识储备

动态分析(Motion Estimation)
Motion Estimation,原则上是将每一帧分成blocks(比如8x8 的块),分析每一个block 在时间变化中,运动的方向和距离,和运动前后的区别。通过ME分析,从而实现P、B帧对于动态场景的良好适应。。

可以修改的值

--direct
预设值:spatial(如果是二次编码可以使用auto)
设定"direct"动态向量(motion vectors)的预测模式。有两种模式可用:spatial和temporal,不建议使用none来停用direct动态向量。应该保持默认或者选择auto来允许x264在两者之间切换为适合的模式。auto最适合用于二次编码,但也可用于一此编码。在第一此编码时如果启用auto模式,x264持续记录每个方法执行到目前为止的好坏,并从该记录挑选下一个预测模式。注意,仅在第一次编码时指定auto时,第二次编码才可以使用auto,否则,第二次编码将会预设为temporal。
--weightp
预设值:2(如果对画质要求不太高可以选择1,但是不太建议修改)
使x264能够使用明确加权预测(explicit weighted prediction)来改善P帧的压缩率。默认设置可以改善淡入/淡出的品质。模式越高越慢。
模式:
0:停用。
1:简单:分析淡入/淡出,不分析重复参照帧。
2:智能:分析淡入/淡出和重复参照帧。
--me
预设值:hex(推荐你就当默认修改成umh)
设定动态分析(motion estimation)的方法。有五个选项:
dia(diamond):菱形搜索法,最简单的搜寻方法,完全不建议使用。原理:检查上、左、下、右方一个像素并挑选其中最好的一个,并重复此过程直到它不再找到任何更好的为止。
hex(hexagon):六边形搜索法,使用周围6点,搜索半径为2的搜索方法。除非时间紧急否则也不使用。
umh(uneven multi-hex):多重六边形搜索法,允许X264自由的增加或减少搜索半径。非常均衡的算法,效果非常好,速度适中。推荐一般情况下使用。
esa(exhaustive):全面搜索法,就是字面意思,不要想太多.jpg,而且很花时间,比umh好10%-15%,但是花费时间是原来的1.5-2倍。
tesa(transformed exhaustive):转换性全面搜索法,在全面搜索法上执行Hadamard转换法,速度慢一点,效果比esa提升一点,所以有时间都是直接使用tesa
--merange
预设值:16
设定动态搜索的范围, 也是开的越大速度越慢且效果的提升范围越来越小。对于hex和dia,范围限制在4~16。0202年了还搁着用这两个憨憨啊,对于umh,在720p时设24, 1080p在设42即可。动态大的建议再加上10
--subme
预设值:7
设定子像素(subpixel)估算复杂度。值越高越好。层级1~5只是控制子像素细分(refinement)强度所以基本不用。层级6为模式决策启用RDO,而层级8为动态向量和内部预测模式启用RDO。RDO层级明显慢于先前的层级。具体参数如下已经折叠
对于日常压制来说,追求压缩率,推荐使用subme10或者是默认;追求画质,推荐使用subme9。下面是几种常用的推荐(由快到慢)
--me umh --subme 7 --me_range 16
--me umh --subme 10 --me_range 24
--me tesa --sumbe 9 --me_range 24

subme 1-11
0:Fullpel only
1:QPel SAD 1 iteration
2:QPel SATD 2 iterations
3:HPel on MB then QPel
4:Always QPel
5:Multi QPel + bi-directional motion estimation
6:RD on I/P frames
7:RD on all frames
8:RD refinement on I/P frames
9:RD refinement on all frames
10:QP-RD (requires --trellis=2, --aq-mode>0)
11:Full RD: disable all early terminations

--psy-rd
预设值:1.0:0.0[a:b](动漫中a取0.7~1.3,真人中a取0.7~1.3;b均取为0.12~0.2)
心理学优化设置。psy 相关是一种x264 引入的主观优化:在欠码的时候,人眼宁愿看到失真,也不愿看到大范围的模糊。虽然这种失真对客观的还原度来说不利,但是它有利于保留画面纹理,编码前后的图像看上去违和感较低,细节锐度较好。其中a保留画面纹理的程度,b在a的基础上保留噪点细节的程度。高压缩时,在不改变压缩强度(使码率略难降低)的情况下,通常采用保留复杂度来保证画质的方案。
当压制动漫时建议选择0.4~0.6:0.1~0.15, --no-mbtree时可直接将b设为0;
压制真人选择0.7~1.3:0.12~0.2影片的复杂度越高, 相应的ab值就越高
--trellis
预设值:1
执行Trellis quantization来提高效率。
0:停用。
1:只在一个宏区块的最终编码上启用。
2:在所有模式决策上启用。
在宏区块时提供了速度和效率之间的良好平衡。在所有决策时则更加降低速度。
建议:预设值(也行8)
--deadzone-inter
预设值:21,取值范围0~32
一种简单省算力的帧间量化算法, 细节面积小于死区就丢掉, 大就保留。trellis=2时停用。在真人视频中建议保持默认(不输入参数), 画面平滑的动漫视频中可以拉高6, 画面特别平滑的可以尝试比默认更大的值
--deadzone-intra
预设值:11,取值范围0~32
相比上面的顾及帧间, 这个顾及帧内,使用方法如上

不建议修改的值

--no-weightb
预设值:无
不允许使用明确加权预测,不允许变更每个参照影响预测图片的程度。没事别和官方作对.jpg
建议:预设值
--mvrange-thread
预设值:-1 (自动)
设定执行绪之间的最小动态向量缓冲。不要碰它。
建议:预设值
--no-psy
预设值:无
停用所有会降低PSNR或SSIM的视觉最佳化。这也会停用一些无法透过x264的命令列引数设定的内部psy最佳化。
建议:预设值
--no-mixed-refs
预设值:无
混合参照会以每个8x8分割为基础来选取参照,而不是以每个宏区块为基础。当使用多个参照帧时这会改善品质,虽然要损失一些速度。设定此选项会停用该功能。
建议:预设值
--no-chroma-me
预设值:无
通常,亮度和色度两个平面都会做动态估算。此选项停用色度动态估算来提高些微速度。
建议:预设值
--no-8x8dct
预设值:无
弹性8x8离散余弦转换(DCT)使x264能够弹性使用I帧的8x8转换。此选项停用该功能。
建议:预设值
--no-fast-pskip
预设值:无
停用P帧的早期略过侦测(early skip detection)。在低位元率时,适中地提高品质但要损失很多速度。在高比特率时,对速度和品质的影响都微不足道。
建议:预设值
--no-dct-decimate
预设值:无
DCT Decimation会舍弃它认为“不必要的”DCT区块。这会改善编码效率,而降低的品质通常微不足道。设定此选项会停用该功能。
--nr
预设值:0
执行快速的噪声削减(Noise Reduction)。根据此值估算影片的噪声,并借由在量化之前舍弃小细节来尝试移除噪声。这可能比不上优良的外部噪声削减滤镜的品质,但它执行得非常快。
建议:使用vs/avs,不香嘛?

没弄懂的值

--partitions
预设值:p8x8,b8x8,i8x8,i4x4
H.264视频在压缩过程中划分为16x16的宏区块。这些区块可以进一步划分为更小的分割,这就是此选项要控制的部分。此选项可以启用个别分割。分割依不同帧类型(I、P、B)启用。可用的分割:p8x8, p4x4, b8x8, i8x8, i4x4, none, all
I:i8x8、i4x4。
P:p8x8(亦会启用p16x8/p8x16)、p4x4(亦会启用p8x4/p4x8)。
B:b8x8(亦会启用b16x8/b8x16)。
p4x4通常不怎么有用,而且性价比极低。
--mvrange
预设值:-1 (自动)
设定动态向量的最大(垂直)范围(单位是像素)。预设值依level不同:
Level 1/1b:64。
Level 1.1~2.0:128。
Level 2.1~3.0:256。
Level 3.1+:512。
注意:如果想要手动覆写mvrange,在设定时从上述值减去0.25(例如--mvrange 127.75)。
--cqm
预设值:flat
设定所有自订量化矩阵(custom quantization matrices)为内建的预设之一。内建预设有flat和JVT。
建议:预设值
参阅:--cqmfile
--cqmfile
预设值:无
从一个指定的JM相容档案来设定自订量化矩阵。覆写所有其他--cqm开头的选项。
建议:预设值
参阅:--cqm
--cqm4* / cqm8*
预设值:无
--cqm4:设定所有4x4量化矩阵。需要16个以逗号分隔的整数清单。
--cqm8:设定所有8x8量化矩阵。需要64个以逗号分隔的整数清单。
--cqm4i、--cqm4p、--cqm8i、--cqm8p:设定亮度和色度量化矩阵。
--cqm4iy、--cqm4ic、--cqm4py、--cqm4pc:设定个别量化矩阵。
建议:预设值

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注