配置情况
参考:http://t.csdnimg.cn/0OuUp
1.默认配置
x264的参数配置位于base.c中,默认参数的配置使用REALIGN_STACK void x264_param_default(x264_param_t* param)
1.1 CPU检测配置
参数名称 | 作用 | 默认值 |
---|---|---|
cpu | 检测CPU使用情况 | x264_cpu_detect |
i_threads | 线程数量 | X264_THREADS_AUTO (default=0) |
i_lookahead_threads | 前向预测线程 数量 | X264_THREADS_AUTO |
b_deterministic | 是否允许非确定性时线程优化 | 1 |
i_sync_lookahead | 前向参考帧数。用于配置线程预测的帧缓存大小 | X264_SYNC_LOOKAHEAD_AUTO |
1.2 视频参数配置
参数名称 | 作用 | 默认值 |
---|---|---|
i_csp | 色彩空间参数 ,X264只支持I420 | |
i_width | 图片宽 | 0 |
i_height | 图片高 | 0 |
vui.i_sar_width | 样本宽高比的宽度 | 0 |
vui.i_sar_height | 样本宽高比的高度 | 0 |
vui.i_overscan | 扫描 | 0 (default) 0=undef 1=no overscan 2=overscan 过扫描线 可选项:show(观看)/crop(去除)) |
vui.i_vidformat | 视频格式 | 0 (default) “undef” = 0 component/pal/ntsc/secam/mac/undef*/) |
vui.b_fullrange | 是否是全域格式,影响图像感官差异 | -1 |
vui.i_colorprim | 原始色度格式 | 2 (default=“undef”) 可选项:undef/bt709/bt470m/bt470bg smpte170m/smpte240m/film |
vui.i_transfer | 转换方式 | 2 (default=“undef”) 可选项:undef/bt709/bt470m/bt470bg/linear log100/log316/smpte170m/smpte240m) |
vui.i_colmatrix | 色度矩阵设置 | -1 (default=“undef”) undef/bt709/fcc/bt470bg smpte170m/smpte240m/GBR/YCgCo) |
vui.i_chroma_loc | both top & bottom色度样本指定 | 0 (范围0~5) |
i_fps_num | fps的分子 | 25 |
i_fps_den | fps的分母 | 1 |
i_level_idc | level的设置,该配置影响视频的码率、分辨率和帧率等参数的限制 | -1 |
i_slice_max_size | 每个slice最大的大小 | 0 |
i_slice_max_mbs | 每个slice最大的宏块数量 | 0 |
i_slice_count | 每帧的slice数目 | 0 |
i_bitdepth | 位深 | 8 (可配置为10) |
1.3 编码器参数
参数名称 | 作用 | 默认值 |
---|---|---|
i_frame_reference | 参考帧个数 | 3(最大为16) |
i_keyint_max | 最大IDR帧间隔 | 250 |
i_keyint_min | 最小IDR帧间隔 | X264_KEYINT_MIN_AUTO (0) |
i_bframe | 位于I帧和P帧之间的B帧数量 | 3 |
i_scenecut_threshold | 场景切换的判断阈值 | 40 |
i_bframe_adaptive | 自适应B帧策略,决定使用P帧还是B帧 | X264_B_ADAPT_FAST (default=1,快速算法) X264_B_ADAPT_NONE(0,总是使用B帧) X264_B_ADAPT_TRELLIS(2,最佳算法) |
i_bframe_bias | B帧插入倾向 | 0(不推荐修改) |
i_bframe_pyramid | 是否允许将B帧作为参考帧 | X264_B_PYRAMID_NORMAL(default=2,随意使用) X264_B_PYRAMID_STRICT(1,gop内使用一个B参考帧,蓝光编码) X264_B_PYRAMID_NONE(0,不允许使用B帧作为参考帧) |
b_interlaced | 是否进行隔行扫描 | 0 |
b_constrained_intra | 开启SVC编码的底层要求的强制帧内预测 | 0 |
b_deblocking_filter | 是否打开去块滤波器 | 1 |
i_deblocking_filter_alphac0 | alpha去块滤波器 | 0(-6~6,值越大越强) |
i_deblocking_filter_beta | beta去块滤波器 | 0(取值范围 -6 ~ 6 数字越大效果越强) |
b_cabac | 是否使用CABAC | 1 |
i_cabac_init_idc | 给出算术编码初始化时表格的选择 | 0(0~2) |
rc.i_rc_method | 码率控制策略,默认配置为CRF | X264_RC_CRF(1,恒定质量编码,即运动/纹理复杂场景,码率上升;静态/纹理简单的画面,码率下降) X264_RC_CQP(0,固定QP,码率不可控) X264_RC_ABR(2,编码出来的视频码率在一个恒定值左右波动,该模式下目标码率和峰值码率配置相等的时候,就是CBR) |
rc.i_bitrate | 目标码率 | 0 |
rc.f_rate_tolerance | ABR码控模式下,瞬时码率可以偏离的倍数 | 1.0(0.1~100) |
rc.f_vbv_max_bitrate | ABR码控模式下,瞬时峰值码率,单位kbps | 0 |
rc.i_vbv_buffer_size | 码率控制缓冲区的大小 | 0 (控制码率收敛到目标码率的时间) |
rc.f_vbv_buffer_init | 码率控制缓冲区数据满足一定百分比之后才能开始回放 | 0.9 (参数小于等于1时是百分比,大于1时是kbit) |
rc.i_qp_constant | 固定量化因子 | -1 (在CQP模式下配置有效) |
rc.f_rf_constant | 实际图像质量 | 23 (X264_RC_CRF模式下有效) |
rc.i_qp_min | qp最小值 | 0 |
rc.i_qp_max | qp最大值 | INT_MAX |
rc.i_qp_step | 量化步长 | 4 |
rc.f_ip_factor | 设置平均I帧QP相比P帧QP的差值 | 1.4 更高的值意味着更高的I帧质量 ipratio与I帧QP成反比例关系 等于1的时候,I帧QP与P帧相同 |
rc.f_pb_factor | 设置平均B帧QP相比P帧QP的差值 | 1.3 更高的值意味着更低的B帧质量 pbratio与B帧QP成正比例关系 等于1的时候,B帧QP与P帧相同 |
rc.i_aq_mode | 自适应量化参数 (adaptive qp) | X264_AQ_VARIANCE (default=1) 使用方差动态计算每个宏块的QP X264_AQ_NONE(0) 不开启AQ模式,帧内宏块全部使用同一QP或者固定的QP表。该模式下,视频PSNR值相对于其他码控模式偏高 X264_AQ_AUTOVARIANCE 方差自适应模式,先遍历全部宏块,统计出一些中间参数,利用这些参数,对每个宏块计算QP X264_AQ_AUTOVARIANCE_BIASED 偏移方差自适应模式,在该模式下BiasStrength即为原始的Strength值。最终每个宏块的 QP |
rc.f_aq_strength | 自适应量化强度 | 1.0 (强度越高,高频信息减少越多) |
rc.i_lookahead | mb_tree向前预测的帧数 | 40 |
rc.b_stat_write | 1pass时,是否将统计数据写入到文件psz_stat_out中 | 0 |
rc.psz_stat_out | 1pass统计数据写入文件名 | “x264_2pass.log” |
rc.b_stat_read | 2pass时,是否从文件psz_stat_in中读入统计数据 | 0 |
rc.psz_stat_in | 2pass读取统计数据文件名 | “x264_2pass.log” |
rc.f_qcompress | 线性量化控制 | 0.6 0.0:固定码率 1.0:固定量化值 |
rc.f_qblur | 时间上模糊量化,减少QP的波动, 对统计文件结果平滑量化值比例的最大值 | 0.5 范围0~99.9,默认0.5。只用于2-pass |
rc.f_complexity_blur | 时间上模糊复杂性,减少QP的波动, 根据相邻帧平滑量化值比例的最大值 | 20 范围0~99.0,默认20.0,只用于2-pass和质量模式 |
rc.i_zones | number of zone_t’s | 0 |
rc.b_mb_tree | 宏块级码率控制 | 1 对每个MB处理,向前预测一定数量的帧,记录该MB被参考的情况,qp的大小与被参考次数成反比 |
1.4 日志
参数名称 | 作用 | 默认值 |
---|---|---|
pf_log | 日志 | x264_log_default |
p_log_private | NULL | |
i_log_level | 日志级别 | X264_LOG_INFO 默认是INFO级别 |
1.5 分析模块
参数名称 | 作用 | 默认值 |
---|---|---|
analyse.intra | 帧内预测 | X264_ANALYSE_I4x4 or X264_ANALYSE_I8x8 |
analyse.inter | 帧间预测 | X264_ANALYSE_I4x4 or X264_ANALYSE_I8x8 or X264_ANALYSE_PSUB16x16 or X264_ANALYSE_BSUB16x16 |
analyse.i_direct_mv_pred | 时间空间队运动预测 | X264_DIRECT_PRED_SPATIAL(1) |
analyse.i_me_method | 运动估计搜索方法 | X264_ME_HEX(1) |
analyse.f_psy_rd | Psy RD强度 | 1.0 |
analyse.b_psy | 是否使用psy算法 | 1 |
analyse.f_psy_trellis | Psy Trellis强度 | 0 |
analyse.i_me_range | 运动估计搜索范围 | 16 |
analyse.i_subpel_refine | 亚像素运动估计质量 | 7 |
analyse.b_mixed_references | 允许每个宏块的分区在P帧有它自己的参考号 | 1 |
analyse.b_chroma_me | 允许chroma进行运动估计 | 1 |
analyse.i_mv_range_thread | 线程之间的最小空间 | -1 |
analyse.i_mv_range | 运动矢量最大长度 | -1 |
analyse.i_chroma_qp_offset | chroma的qp偏移量 | 0 |
analyse.b_fast_pskip | 是否快速P帧跳过检测 | 1 |
analyse.b_weighted_bipred | 允许B帧隐式加权 | 1 |
analyse.i_weighted_pred | P帧权重 | X264_WEIGHTP_SMART(2) |
analyse.b_dct_decimate | 允许P帧变换系数 | 1 |
analyse.b_transform_8x8 | 允许进行8x8变换 | 1 |
analyse.i_trellis | 允许使用trellis编码 | 1 (0=关闭,1=最后编码时使用 2=在所有模式决策上启用) |
analyse.i_luma_deadzone[0] | 帧内模式下亮度量化的盲区大小 | 21 |
analyse.i_luma_deadzone[1] | 帧间模式下亮度量化的盲区大小 | 11 |
analyse.b_psnr | 允许使用psnr | 0 |
analyse.b_ssim | 允许使用ssim | 0 |
1.6 其余配置
参数名称 | 作用 | 默认值 |
---|---|---|
b_repeat_headers | 重复SPS/PPS 放到关键帧前面 | 1 |
b_annexb | 允许输出码流格式为Annex B Byte stream | 1 |
b_aud | 生成访问单元分隔符 | 0 |
b_vfr_input | vfr输入 | 1 1:时间基和时间戳用于码控 0:仅帧率用于码率控制 |
i_nal_hrd | 允许使用HRD | X264_NAL_HRD_NONE |
b_tff | ||
b_pic_struct | 允许在Picture Timing SEI传送pic_struct | 0 |
b_fake_interlaced | 将视频流标记为交错(隔行) | 0 |
i_frame_packing | -1 | |
i_alternative_transfer | 2 | |
b_opencl | 0 | |
i_opencl_device | 0 | |
opencl_device_id | NULL | |
psz_clbin_file | NULL | |
i_avcintra_class | 0 | |
i_avcintra_flavor | X264_AVCINTRA_ FLAVOR_PANASONIC |
2.档位配置
x264当中的档位包括:“ultrafast”, “superfast”, “veryfast”, “faster”, “fast”, “medium”, “slow”, “slower”, “veryslow”, “placebo”,从左到右速度依次减慢,视频编码的质量逐渐增加。档位的调整位于base.c中的
static int param_apply_preset( x264_param_t *param, const char *preset )
2.1 ultrafast
参数名称 | 配置值 |
---|---|
i_frame_reference | 1 |
i_scenecut_threshold | 0 |
b_deblocking_filter | 0 |
b_cabac | 0 |
i_bframe | 0 |
analyse.intra | 0 |
analyse.inter | 0 |
analyse.b_transform_8x8 | 0 |
analyse.i_me_method | X264_ME_DIA |
analyse.i_subpel_refine | 0 |
rc.i_aq_mode | 0 |
analyse.b_mixed_references | 0 |
analyse.i_trellis | 0 |
i_bframe_adaptive | X264_B_ADAPT_NONE |
rc.b_mb_tree | 0 |
analyse.i_weighted_pred | X264_WEIGHTP_NONE |
analyse.b_weighted_bipred | 0 |
rc.i_lookahead | 0 |
2.2 superfast
参数名称 | 配置值 |
---|---|
analyse.inter | X264_ANALYSE_I8x8 or X264_ANALYSE_I4x4 |
analyse.i_me_method | X264_ME_DIA |
analyse.i_subpel_refine | 1 |
i_frame_reference | 1 |
analyse.b_mixed_references | 0 |
analyse.i_trellis | 0 |
rc.b_mb_tree | 0 |
analyse.i_weighted_pred | X264_WEIGHTP_SIMPLE |
rc.i_lookahead | 0 |
2.3 veryfast
参数名称 | 配置值 |
---|---|
analyse.i_subpel_refine | 2 |
i_frame_reference | 1 |
analyse.b_mixed_references | 0 |
analyse.i_trellis | 0 |
analyse.i_weighted_pred | X264_WEIGHTP_SIMPLE |
rc.i_lookahead | 10 |
2.4 faster
参数名称 | 配置值 |
---|---|
analyse.b_mixed_references | 0 |
i_frame_reference | 2 |
analyse.i_subpel_refine | 4 |
analyse.i_weighted_pred | X264_WEIGHTP_SIMPLE |
rc.i_lookahead | 20 |
2.5 fast
参数名称 | 配置值 |
---|---|
i_frame_reference | 2 |
analyse.i_subpel_refine | 6 |
analyse.i_weighted_pred | X264_WEIGHTP_SIMPLE |
rc.i_lookahead | 30 |
2.6 medium
默认配置就是 medium
2.7 slow
参数名称 | 配置值 |
---|---|
analyse.i_subpel_refine | 8 |
i_frame_reference | 5 |
analyse.i_direct_mv_pred | X264_DIRECT_PRED_AUTO |
analyse.i_trellis | 2 |
rc.i_lookahead | 50 |
2.8 slower
参数名称 | 配置值 |
---|---|
analyse.i_me_method | X264_ME_UMH |
analyse.i_subpel_refine | 9 |
i_frame_reference | 8 |
i_bframe_adaptive | X264_B_ADAPT_TRELLIS |
analyse.i_direct_mv_pred | X264_DIRECT_PRED_AUTO |
analyse.inter | analyse.inter or X264_ANALYSE_PSUB8x8 |
analyse.i_trellis | 2 |
rc.i_lookahead | 60 |
2.9 veryslow
参数名称 | 配置值 |
---|---|
analyse.i_me_method | X264_ME_UMH |
analyse.i_subpel_refine | 10 |
analyse.i_me_range | 24 |
i_frame_reference | 16 |
i_bframe_adaptive | X264_B_ADAPT_TRELLIS |
analyse.i_direct_mv_pred | X264_DIRECT_PRED_AUTO |
analyse.inter | analyse.inter or X264_ANALYSE_PSUB8x8 |
analyse.i_trellis | 2 |
analyse.i_bframe | 8 |
rc.i_lookahead | 60 |
2.10 placebo
参数名称 | 配置值 |
---|---|
analyse.i_me_method | X264_ME_TESA |
analyse.i_subpel_refine | 11 |
analyse.i_me_range | 24 |
i_frame_reference | 16 |
i_bframe_adaptive | X264_B_ADAPT_TRELLIS |
analyse.i_direct_mv_pred | X264_DIRECT_PRED_AUTO |
analyse.inter | analyse.inter or X264_ANALYSE_PSUB8x8 |
analyse.b_fast_pskip | 0 |
analyse.i_trellis | 2 |
analyse.i_bframe | 16 |
rc.i_lookahead | 60 |
3.优化配置
优化配置是针对不同的场景进行优化,主要包括去块滤波、psy和aq模式的调整
3.1 film
参数名称 | 配置值 |
---|---|
i_deblocking_filter_alphac0 | -1 |
i_deblocking_filter_beta | -1 |
analyse.f_psy_trellis | 0.15 |
3.2 animation
参数名称 | 配置值 |
---|---|
i_frame_reference | param->i_frame_reference > 1 ? param->i_frame_reference*2 : 1 |
i_deblocking_filter_alphac0 | 1 |
i_deblocking_filter_beta | 1 |
analyse.f_psy_rd | 0.4 |
rc.f_aq_strength | 0.6 |
i_bframe | i_bframe + 2 |
3.3 grain
参数名称 | 配置值 |
---|---|
i_deblocking_filter_alphac0 | -2 |
i_deblocking_filter_beta | -2 |
analyse.f_psy_trellis | 0.25 |
analyse.b_dct_decimate | 0 |
rc.f_pb_factor | 1.1 |
rc.f_ip_factor | 1.1 |
rc.f_aq_strength | 0.5 |
analyse.i_luma_deadzone[0] | 6 |
analyse.i_luma_deadzone[1] | 6 |
rc.f_qcompress | 0.8 |
3.4 stillimage
参数名称 | 配置值 |
---|---|
i_deblocking_filter_alphac0 | -3 |
i_deblocking_filter_beta | -3 |
analyse.f_psy_rd | 2.0 |
analyse.f_psy_trellis | 0.7 |
rc.f_aq_strength | 1.2 |
3.5 psnr
参数名称 | 配置值 |
---|---|
rc.i_aq_mode | X264_AQ_NONE |
analyse.b_psy | 0 |
3.6 ssim
参数名称 | 配置值 |
---|---|
rc.i_aq_mode | X264_AQ_AUTOVARIANCE |
analyse.b_psy | 0 |
3.7 fastdecode
参数名称 | 配置值 |
---|---|
b_deblocking_filter | 0 |
b_cabac | 0 |
analyse.b_weighted_bipred | 0 |
analyse.i_weighted_pred | X264_WEIGHTP_NONE |
3.8 zerolatency
参数名称 | 配置值 |
---|---|
rc.i_lookahead | 0 |
i_sync_lookahead | 0 |
i_bframe | 0 |
b_sliced_threads | 1 |
b_vfr_input | 0 |
rc.b_mb_tree | 0 |
3.9 touhu
参数名称 | 配置值 |
---|---|
i_frame_reference | param->i_frame_reference > 1 ? param->i_frame_reference*2 : 1 |
i_deblocking_filter_alphac0 | -1 |
i_deblocking_filter_beta | -1 |
analyse.f_psy_trellis | 0.2 |
rc.f_aq_strength | 1.3 |
analyse.inter | analyse.inter or X264_ANALYSE_PSUB8x8 |
4.小结
x264当中设计了丰富的编码工具,从而实现高效的视频编解码,为了灵活的使用这些工具,所以设置了不同的档位,以适应不同的应用场景。对于复杂的场景,为了保证编码速度,可以使用较快速的档位;对于简单的场景,因为编码速度很快,因此可以使用更多的编码工具,实现更高质量的编码,因而速度较慢。对于需要实时的场景(如会议场景),可以使用参数如 zerolatency 来保证其编码的效率。另外,对于RTC场景,不同档位和不同优化策略之间可以灵活切换,以适应实时且变化的场景。具体使用何种档位和策略,需要根据实际应用场景确定。