X264设置-帧类型选项


封面图来自pixiv 藤原

友情提示

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

知识储备

I帧、P帧、B帧、b帧IDR帧
I帧:即帧内编码帧,指的是一种自带全部信息的独立帧,简单来说就是视频中一张完整记录该视频内容的JPG,对视频压缩影极大(大小通常为P/B帧的十倍)。
P帧:前向预测编码帧,指的是更具前一帧的信息,通过对比前一帧和下一帧之间的差距,进行预测的帧。简单来说是该帧和前一帧相同的地方进行保留,和前一帧不同的地方标注并预测出现的位置,对视频压缩影响一般。
B帧:双向预测内插编码帧,指对比前一帧和后一帧之间的差值来显示该帧,对视频压缩影响极大。
b帧:特殊的B帧,不被前后帧所参考的B帧那你设置干嘛不设置一堆P帧
IDR帧:即时解码刷新(Instantaneous Decoding Refresh),你可以理解为特殊的I帧,两个IDR帧前后P\B帧不受影响,主要用于处理P帧和B帧的图像错位。
场景变更
x264为每一帧计算一个度量值,来估计与前一帧的不同程度,通常会设定一个值,由scenecut控制
GOP
即Group of picture,指的是两个IDR帧之间的长度。对于在线视频,360~480 是不错的选择。本地视频,480~720 会比较合适。

可以修改的值

--keyint
默认值:250;蓝光应设置为帧率
设定IDR帧之间的最大长度。可以指定infinite让x264永远不要插入非场景变更的IDR帧。当设定很低的VBV时会打乱位元率控制,此时建议使用--intra-refresh。默认值对于大多数视频没啥问题。在为蓝光、广播、即时数据流(即经常需要拖动进度条的视频)或某些其他特殊情况编码时,可能需要更小的GOP(Group of picture,指的时关键帧的周期)长度。
--min-keyint
默认值:自动(0.1倍keyint或帧率取最小值,其最大值为0.5*keyint+1),建议设置不低于10或者帧率
设定IDR帧之间的最小长度。此选项限制在每个IDR帧之后,要有多少帧才可以再有另一个IDR帧的最小长度。过小的keyint范围会导致“不正确的”IDR帧位置(例如闪屏场景)
--scenecut
默认值:40,如果场景变化复杂严重建议提高此数值
设定I/IDR帧位置的阈值(场景变更侦测)。如果该值低于scenecut,则算侦测到一个“场景变更”。如果此时与最近一个IDR帧的距离低于--min-keyint,则放置一个I帧,否则放置一个IDR帧。越大的scenecut值会增加侦测到场景变更的数目。将scenecut设为0相当于设定--no-scenecut。
--bframes
默认值:3
设定x264可以使用的最大并行B帧数。当设置为0时,帧类型可能是:IPPPPP...PI。当设了--bframes 2时,帧类型可能是:IBPBBPBPPPB...PI。平均品质是由位元率中的--pbratio所控制。
--b-adapt
默认值:1(如果是个人使用建议设置为2)
设定弹性B帧位置决策演算法。此设定控制x264如何决定要放置P帧或B帧。
0:停用,总是挑选B帧。这与旧的no-b-adapt设定相同作用。
1:“快速”演算法,较快,越大的--bframes值会稍微提高速度。当使用此模式时,基本上建议搭配--bframes 16使用。
2:“最佳”演算法,较慢,越大的--bframes值会大幅降低速度。
--ref
预设值:3
控制解码图片缓冲(DPB:Decoded Picture Buffer)的大小。范围是从0到16。总之,此值是每个P帧可以使用先前多少帧作为参照帧的数目(B帧可以使用的数目要少一或两个,取决于它们是否作为参照帧)。可以被参照的最小ref数是1。H.264规格限制了每个level的DPB大小。如果遵守Level 4.1规格,720p和1080p视频的最大ref数分别是9和4。
--deblock
预设值:0:0;如果是动画或者是OP/ED可以把其设为0,-2
控制循环滤镜,以α:β的形式表达,通常情况下α和β取值为[-2,2],第一个值α去块范围(Alpha deblocking),变大会导致细节越少,视频也越模糊。第二个值β去块阈值(Beta deblocking),越小,保留越多细节;越大,去块越猛,可以越好得去除明显的块效应;把这个值弄高点有利于去除各种错误
通常建议的值:Low- 0:3;Medium- 1:-1(正常可以使用);High- 0:-3(最求极致)
--open-gop
默认值:none,基本不建议启用,建议启用,9102年了,兼容性很好
open-gop是一个提高效率的编码技术。有三种模式:
none:停用open-gop
normal:启用open-gop
bluray:启用open-gop(蓝光编码时候启用)

蓝光编码需要修改的值

--b-pyramid
默认值:normal
允许B帧作为其他帧的参照帧。没有此设定时,帧只能参照I/P帧。启用时参照帧的B帧会得到一个介于P帧和普通B帧之间的量化值。--b-pyramid需要至少两个以上的--bframes才会运作。蓝光编码须使用none或strict
none:不允许B帧作为参照帧;strict:每个GOP中允许一个B帧作为参照帧,这是蓝光标准强制执行的限制。
normal:每minigop允许多个B帧作为参照帧。
--slices
预设值:无(蓝光改为4
设定每帧的切片数,而且强制为矩形切片(会被--slice-max-size或--slice-max-mbs覆写)。如果是在为蓝光编码,将值设为4。否则,不要使用此选项,除非你知道真的有必要。

不建议修改的值

说明

下面全部都是不建议修改或者是我根本没看懂是什么,但是也是一些非主要参数
详细内容
--no-scenecut
默认值:无
完全停用弹性I帧决策(adaptive I-frame decision)。即完全停用scenecut
--intra-refresh
默认值:无(只在设定很低的VBV时开启)
完全停用IDR帧,作为替代x264会为每隔--keyint的帧的每个巨集区块(macroblock)使用内部编码(intra coding)。区块是以一个水平捲动的行刷新,称为刷新波(refresh wave)。增强了视频数据流对封包遗失的恢复能力。此选项会极大降低压缩效率。
--b-bias
默认值:0
控制使用B帧而不使用P帧的可能性。大于0的值增加偏向B帧的加权,而小于0的值则相反。范围是从-100到100。100并不保证全是B帧(要全是B帧该使用--b-adapt 0),而-100也不保证全是P帧。仅在你认为能比x264做出更好的位元率控制决策时没事和编码器过不去干嘛才使用此选项。
--no-deblock
预设值:无
完全停用循环滤镜(loop filter)。不建议。修改这个你是要和官方做斗争嘛? :huaji23:
--no-cabac
预设值:无
停用弹性内容的二进制算数编码(CABAC:Context Adaptive Binary Arithmetic Coder)资料流压缩,切换回效率较低的弹性内容的可变长度编码(CAVLC:Context Adaptive Variable Length Coder)系统。大幅降低压缩效率(通常10~20%)和解码的硬件需求都9102年了还有人不会达标?
--slice-max-size
预设值:无
设定最大的切片大小(单位是字节),包括估计的NAL额外负荷(overhead)。(目前与--interlaced不相容)
--slice-max-mbs
预设值:无
设定最大的切片大小(单位是宏区块)。(目前与--interlaced不相容)
--tff
预设值:无
启用交错式编码并指定顶场优先(top field first)。x264的交错式编码使用MBAFF,本身效率比渐进式编码差。出于此原因,仅在打算于交错式显示器9102年还有这种显示器? :huaji3: 上播放视频时,才应该编码为交错式(或者视频在送给x264之前无法进行去交错)。此选项会自动启用--pic-struct。
--bff
预设值:无
启用交错式编码并指定底场优先(bottom field first)。详细资讯可以参阅--tff。
--constrained-intra
预设值:无
启用限制的内部预测(constrained intra prediction),这是SVC编码的基础层(base layer)所需要的。既然EveryoneTM忽略SVC,你同样可以忽略此选项。修改这个你是要和官方做斗争嘛? *2:huaji23:
--pulldown
预设值:none
使用其中一个预设模式将渐进式、固定帧率的输入资料流标志上软胶卷过带(soft telecine)。软胶卷过带在http://trac.handbrake.fr/wiki/Telecine(打不开)有更详细的解释。可用的预设:none, 22, 32, 64, double, triple, euro指定除了none以外的任一模式会自动启用--pic-struct。(我就没看懂说什么*1)
--fake-interlaced
预设值:无
将资料流标记为交错式,即使它并未以交错式来编码。用于编码25p和30p为符合蓝光标准的视频。(我就没看懂说什么*2)
--frame-packing
预设值:无
如果在编码3D视讯,此参数设定一个位元资料流(bitstream)旗标,用来告诉解码器此3D视讯是如何封装的。相关的值和它们的意义可以从x264 --fullhelp的说明里得知。(我就没看懂说什么*3)
点赞

发表评论

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