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幀
}