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 帧,只支持无交错(逐行Progressive、隔行interlaced)和 CAVLC 编码,一般用于低阶和需要额外容错的应用,例如视频通话和会议电视等实时视频通信。
main
支持 I/P/B 帧,支持无交错(progressive)和交错(interlaced),同样提供对 CAVLC 和 CABAC 的支持,用于主流的消费电子类产品,如低规格的 mp4、便携的视频播放器等。
high
在 main 级别的基础上增加了 8*8 内部预测、自定义量化、无损视频编码和更多的 YUV 格式,用于广播及视频碟片存储、高清电视应用等。
三种 profile 应用的领域不同,baseline 多应用于实时通信领域,main 多应用于流媒体领域,high 多应用于广电和存储领域。
参数优先级
这个参数会覆盖 preset 和 tune 中,以及其他相关的设定值,保证输出 profile 兼容的视频流。如果使用这个选项,将不能进行无损压缩。
这个值是 x264 的预设,用于设置 x264 的编码速度。可以取的值有:
static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 };
参数优先级
该参数设置了压缩效率和运算时间平衡的预设值,如果设定了,它会在其他选项生效前生效。
tune 是 x264 中重要性仅次于 preset 的选项,是视觉优化参数,tune 可以理解为视频偏好(或者视频类型),设置 tune 实际上设置了一套参数集。
可以取的值有:
film
电影类型,对视频质量要求非常严格时使用该选项。
animation
动画片,压缩的视频是动画片时使用该选项。
grain
该选项适用于颗粒感很重的视频。
stillimage
静态图像,该选项适用于静止画面比较多的视频。
psnr
提高 psnr,该选项编码出来的视频的 psnr 比较高。
ssim
提高 ssim,该选项编码出来的视频 ssim 比较高。
fastdecode
快速解码,该选项有利于快速解码。
zerolatency
零延迟,该选项主要用于视频直播。
参数优先级
在 preset 选项的基础上进一步优化输出,如果设定了 tune 值,它将在 preset 后,其他选项前生效。
帧率设置
帧率设置与两个参数有关,分别是: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 的简写。
关键帧间隔设置
Gop,idr,
Group of picture, Instantaneous Decoding Refresh
Ibbpbbpbbpbbp Ibbpbbpbbpbbp
IbPPbppbpp
Fps 25,
Gop 250
Gop 125
IDR,
I,
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. */
1
2
IDR 帧时视频流的“分隔符”,所有的帧都不可以使用越过关键帧的帧作为参考帧。这意味着 IDR 帧可以作为视频搜索的起点。
i_keyint_max 表示最大的 IDR 帧间隔,每当收到 IDR 帧,解码器就会清空参考队列,并且更新 SPS 和 PPS 参数。这个值设置的比较小有利于流畅的播放视频,但是会降低压缩效率,建议设置为帧率的 10 倍。这个值设置较大会减少搜索一个随机帧所需的平均时间。默认值为 250,是默认帧率的 10 倍。如果为蓝光、直播流或者其他什么专业流编码,可能需要更小的图像组长(一般等于 fps)。
i_keyint_min 表示最小的关键帧间隔,默认值为 X264_KEYINT_MIN_AUTO。建议取默认值,或者与帧率相等。
Scenecuts 是两个单词的合并,scene cut,表示场景切换。
x264_param_default():设置参数集结构体x264_param_t的缺省值。
x264_picture_alloc():为图像结构体x264_picture_t分配内存。
x264_encoder_open():打开编码器。
x264_encoder_encode():编码一帧图像。
x264_encoder_close():关闭编码器。
x264_picture_clean():释放x264_picture_alloc()申请的资源。
x264_param_t
x264_picture_t
x264_t