x264中preset等级有10个,表示编码速度的快慢。
相比tune,preset主要调节lookahead长度、参考帧列表帧数量、可用宏块划分模式、运动搜索方法、运动搜索窗口、下采样质量、是否使用B帧、是否自适应B帧、连续B帧数量、权重预测方法、direct方法、trellis量化、是否子块独立参考帧等
static const char * const x264_preset_names[] = {
"ultrafast", "superfast", "veryfast",
"faster", "fast", "medium", "slow",
"slower", "veryslow", "placebo", 0 };
ultrafast
if( !strcasecmp( preset, "ultrafast" ) ) //特快
{
param->i_frame_reference = 1; //参考帧数量1
param->i_scenecut_threshold = 0; //不使用场景切换判断
param->b_deblocking_filter = 0; //关闭环路滤波
param->b_cabac = 0; //使用cavlc
param->i_bframe = 0; //不适用B帧
param->analyse.intra = 0; //不允许intra子块划分,只能能有16x16
param->analyse.inter = 0; //不允许inter子块划分,只能有16x16和skip
param->analyse.b_transform_8x8 = 0; //不使用8x8dct
param->analyse.i_me_method = X264_ME_DIA; //菱形搜索运动估计
param->analyse.i_subpel_refine = 0; //不允许下采样运动搜索
param->rc.i_aq_mode = 0; //不使用adaptive qp
param->analyse.b_mixed_references = 0; //不允许宏块各划分子块独立参考
param->i_bframe_adaptive = X264_B_ADAPT_NONE;//不使用B帧自适应
param->rc.b_mb_tree = 0; //不使用宏块树
param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;//
param->analyse.b_weighted_bipred = 0;
param->rc.i_lookahead = 0; //码控lookahead队列大小0
}
superfast
else if( !strcasecmp( preset, "superfast" ) ) //超快
{
//这间参考只允许intra8x8和intra4x4
param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
param->analyse.i_me_method = X264_ME_DIA; //钻石搜索
param->analyse.i_subpel_refine = 1; //允许下采样运动搜索
param->i_frame_reference = 1; //参考帧列表1帧
param->analyse.b_mixed_references = 0; //不允许宏块各划分子块独立参考
param->analyse.i_trellis = 0; //不适用trellis量化
param->rc.b_mb_tree = 0; //不允许宏块树
param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;//P帧权重预测
param->rc.i_lookahead = 0; //lookahead队列长度0
}
veryfast
else if( !strcasecmp( preset, "veryfast" ) )
{
param->analyse.i_subpel_refine = 2; //下采样进度2
param->i_frame_reference = 1; //参考帧列表1帧
param->analyse.b_mixed_references = 0; //不允许宏块各划分子块独立参考帧
param->analyse.i_trellis = 0; //不适用trellis量化
param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;//P帧权重预测
param->rc.i_lookahead = 10; //lookahead队列长度10
}
faster
else if( !strcasecmp( preset, "faster" ) )
{
param->analyse.b_mixed_references = 0; //不允许宏块各划分子块独立参考帧
param->i_frame_reference = 2; //参考帧列表2帧
param->analyse.i_subpel_refine = 4; //下采样精度4
param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;//P帧权重预测simple
param->rc.i_lookahead = 20; //lookahead队列长度20
}
fast
else if( !strcasecmp( preset, "fast" ) )
{
param->i_frame_reference = 2; //参考帧列表2帧
param->analyse.i_subpel_refine = 6; //下采样质量6
param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;//P帧权重预测simple
param->rc.i_lookahead = 30; //lookahead队列30帧
}
medium
else if( !strcasecmp( preset, "medium" ) )
{
/* Default is medium
默认即medium */
}
slow
else if( !strcasecmp( preset, "slow" ) )
{
param->analyse.i_subpel_refine = 8;//下采样质量8
param->i_frame_reference = 5; //参考帧列表最多5帧
param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;//direct预测模式自动
param->analyse.i_trellis = 2; //trellis量化 2
param->rc.i_lookahead = 50; //lookhead队列50帧
}
slower
else if( !strcasecmp( preset, "slower" ) )
{
param->analyse.i_me_method = X264_ME_UMH; //运动搜索方法为非对称十字六边形网络搜索
param->analyse.i_subpel_refine = 9; //下采样质量9
param->i_frame_reference = 8; //参考帧列表8帧
param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;//使用viterbi最优路径自适应决定B帧
param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
param->analyse.inter |= X264_ANALYSE_PSUB8x8; //允许低于8x8的inter,即8x4,4x8,4x4
param->analyse.i_trellis = 2; //trellis量化 2
param->rc.i_lookahead = 60; //lookahead队列60帧
}
veryslow
else if( !strcasecmp( preset, "veryslow" ) )
{
param->analyse.i_me_method = X264_ME_UMH;//运动搜索方法为非对称十字六边形网络搜索
param->analyse.i_subpel_refine = 10; //下采样质量10
param->analyse.i_me_range = 24; //运动搜索范围24像素
param->i_frame_reference = 16; //参考帧列表16帧
param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS; //使用viterbi最优路径自适应决定B帧
param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;//direct预测模式自动
param->analyse.inter |= X264_ANALYSE_PSUB8x8; //允许低于8x8的inter,即8x4,4x8,4x4
param->analyse.i_trellis = 2; //trellis量化 2
param->i_bframe = 8; //允许最多个连续B帧
param->rc.i_lookahead = 60; //lookahead队列60帧
}
placebo
else if( !strcasecmp( preset, "placebo" ) )
{
param->analyse.i_me_method = X264_ME_TESA; //运动估计方法为TESA
param->analyse.i_subpel_refine = 11; //下采样运动估计质量11
param->analyse.i_me_range = 24; //整像素运动搜索范围
param->i_frame_reference = 16; //参考帧数量16
param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS; //自适应B帧TRELLIS方法
param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;//direct预测模式自动
param->analyse.inter |= X264_ANALYSE_PSUB8x8; //允许低于8x8的inter,即8x4,4x8,4x4
param->analyse.b_fast_pskip = 0; //关闭快速pskip决定
param->analyse.i_trellis = 2; //trellis量化 2
param->i_bframe = 16; //允许最多16个连续B帧
param->rc.i_lookahead = 60; //lookahead队列60帧
}