概述
1. 概述
x264 编码的控制参数非常多,本文记录项目中实际用到的参数,并根据网上查找到的参考资料对这些参数给出进一步解释。
2. 参数解释
2.1 profile
profile 翻译成中文是“配置文件”的意思,可以理解为通过这个参数对 x264 编码的一些基本参数进行了限制。
可以取的值包括:
/* x264_param_apply_profile:
*
Applies the restrictions of the given profile.
*
Currently available profiles are, from most to least restrictive: */
static const char * const x264_profile_names[] = { "baseline", "main", "high", "high10", "high422", "high444", 0 };
baseline
这个级别是设置最严格的配置文件,支持 I/p 帧不支持 B 帧,只支持无交错和 CAVLC 编码,一般用于低阶和需要额外容错的应用,例如视频通话和会议电视等实时视频通信。
main
支持 I/P/B 帧,支持无交错(progressive)和交错(interlaced),同样提供对 CAVLC 和 CABAC 的支持,用于主流的消费电子类产品,如低规格的 mp4、便携的视频播放器等。
high
在 main 级别的基础上增加了 8*8 内部预测、自定义量化、无损视频编码和更多的 YUV 格式,用于广播及视频碟片存储、高清电视应用等。
三种 profile 应用的领域不同,baseline 多应用于实时通信领域,main 多应用于流媒体领域,high 多应用于广电和存储领域。
参数优先级
这个参数会覆盖 preset 和 tune 中,以及其他相关的设定值,保证输出 profile 兼容的视频流。如果使用这个选项,将不能进行无损压缩。
2.2 preset
这个值是 x264 的预设,用于设置 x264 的编码速度。可以取的值有:
/*
The presets can also be indexed numerically, as in:
*
x264_param_default_preset( ¶m, "3", ... )
*
with ultrafast mapping to "0" and placebo mapping to "9".
This mapping may
*
of course change if new presets are added in between, but will always be
*
ordered from fastest to slowest.
*
*
Warning: the speed of these presets scales dramatically.
Ultrafast is a full
*
100 times faster than placebo! */
/*
Currently available presets are, ordered from fastest to slowest: */
static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 };
参数优先级
该参数设置了压缩效率和运算时间平衡的预设值,如果设定了,它会在其他选项生效前生效。
2.3 tune
tune 是 x264 中重要性仅次于 preset 的选项,是视觉优化参数,tune 可以理解为视频偏好(或者视频类型),设置 tune 实际上设置了一套参数集。
可以取的值有:
tatic const char * const x264_tune_names[] = { "film", "animation", "grain", "stillimage", "psnr", "ssim", "fastdecode", "zerolatency", 0 };
/*
Multiple tunings can be used if separated by a delimiter in ",./-+",
*
however multiple psy tunings cannot be used.
*
film, animation, grain, stillimage, psnr, and ssim are psy tunings. */
film
电影类型,对视频质量要求非常严格时使用该选项。
animation
动画片,压缩的视频是动画片时使用该选项。
grain
该选项适用于颗粒感很重的视频。
stillimage
静态图像,该选项适用于静止画面比较多的视频。
psnr
提高 psnr,该选项编码出来的视频的 psnr 比较高。
ssim
提高 ssim,该选项编码出来的视频 ssim 比较高。
fastdecode
快速解码,该选项有利于快速解码。
zerolatency
零延迟,该选项主要用于视频直播。
参数优先级
在 preset 选项的基础上进一步优化输出,如果设定了 tune 值,它将在 preset 后,其他选项前生效。
2.4 帧率相关
帧率设置
帧率设置与两个参数有关,分别是:i_fps_num
和 i_fps_den
, i_fps_num
默认值为 25,ip_fps_den
默认值为 1,我们通常只需要设置 i_fps_num
值即可。
例如,如果我们设置 i_fps_num = 20
,那么意味着设置的帧率就是 i_fps_num / i_fps_den = 20
。
其中:num 是 numerator 的简写,den 是 denominator 的简写。
关键帧间隔设置
int
i_keyint_max;
/* Force an IDR keyframe at this interval */
int
i_keyint_min;
/* Scenecuts closer together than this are coded as I, not IDR. */
IDR 帧时视频流的“分隔符”,所有的帧都不可以使用越过关键帧的帧作为参考帧。这意味着 IDR 帧可以作为视频搜索的起点。
i_keyint_max
表示最大的 IDR 帧间隔,每当收到 IDR 帧,解码器就会清空参考队列,并且更新 SPS 和 PPS 参数。这个值设置的比较小有利于流畅的播放视频,但是会降低压缩效率,建议设置为帧率的 10 倍。这个值设置较大会减少搜索一个随机帧所需的平均时间。默认值为 250,是默认帧率的 10 倍。如果为蓝光、直播流或者其他什么专业流编码,可能需要更小的图像组长(一般等于 fps)。
i_keyint_min
表示最小的关键帧间隔,默认值为 X264_KEYINT_MIN_AUTO
。建议取默认值,或者与帧率相等。
Scenecuts 是两个单词的合并,scene cut,表示场景切换。
插入 I 帧最低值
int
i_scenecut_threshold; /* how aggressively to insert extra I frames */
用于场景变换检测的值,也是决策使用 I 帧、IDR 帧的阈值,x264 会计算每一帧与前一帧的不同程度得出一个值,如果这个值大于 i_scenecut_threshold,那么视为检测到场景变换。正常来说,如果两帧图像的不同程度很低,应该插入 P 帧。但是不同程度低于阈值,如果此时距离上一 IDR 帧的距离小于 i_keyint_min
,则插入一个 I 帧,反之则插入一个 IDR 帧。
2.5 码率相关
i_rc_method
设置码率控制方法,可取值有:
#define X264_RC_CQP
0
#define X264_RC_CRF
1
#define X264_RC_ABR
2
具体参考转载的博客:
i_bitrate
表示平均码率,参数的量纲是 kilobits/sec,编码器最终输出文件或者视频流的大小将尽量与这个值相符。
i_vbv_max_bitrate
设置 VBV 可用的最大码率。量纲为 kilobits/sec,注意 VBV 选项在任何一项 VBV 参数开启时启用,VBV = Video Buffering Verifier。值得注意的是,使用 VBV 参数可能会降低视频的质量,只有在确定要使用时再开启。
这里强调一下动态更新码率的问题,在实际测试过程中,遇到可以动态降低码率,但是无法动态增加码率的情况。
这个问题的原因是设置的 i_vbv_max_bitrate
大于 i_bitrate
导致的,这可能是 x264 的一个 bug。如果将 i_vbv_max_bitrate
改为小于或者等于 i_bitrate
,就可以动态降低和升高码率了。参考:x264码率控制测试
3.小结
x264 编码参数非常多,在一次项目实践过程中很难对这么多参数有比较深刻全面的理解,只能根据实际需求不断加深对这些参数的理解。
这篇文档以后还会继续扩充完善的。
参考
[1] 中文版MeGUI的x264编码配置详细解读
[2] X264设置
最后
以上就是淡定小丸子为你收集整理的x264 参数解释1. 概述2. 参数解释3.小结参考的全部内容,希望文章能够帮你解决x264 参数解释1. 概述2. 参数解释3.小结参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复