<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<div style="background-color:inherit">
h264编码原理复杂,参数众多。为了方便使用无论x264还是其他编码的实现框架,都封装了几种现有的编码模型,只需要根据编码速度的要求和视频质量的要求选择模型,并修改部分视频参数即可编码。
</div>
<div style="background-color:inherit">
模型的选择就是通过x264_param_default_preset()实现。
</div>
<div style="background-color:inherit">
<br style="background-color:inherit">
</div>
<div style="background-color:inherit">
<pre class="blockcode"><code class="language-cpp">int x264_param_default_preset( x264_param_t *param, const char *preset, const char *tune )
{
x264_param_default( param );
if( preset && x264_param_apply_preset( param, preset ) < 0 )
return -1;
if( tune && x264_param_apply_tune( param, tune ) < 0 )
return -1;
return 0;
}</code></pre>
<br>
<br>
</div>
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<br style="background-color:inherit">
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
分为三步处理
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<span style="background-color:inherit">第一步为调用x264_param_default()param设置默认值</span>。
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<br style="background-color:inherit">
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<span style="background-color:inherit">第二部步根据preset值通过x264_param_apply_preset(x264_param_t *param, const char *preset )函数设置设置编码参数。</span>
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<span style="background-color:inherit">preset 接受取值为:<span style="background-color:inherit; line-height:1.5">x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 };</span></span>
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<span style="background-color:inherit; line-height:1.5"><span style="background-color:inherit">此步骤通过速度设定某些参数。</span></span>
</div>
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">
<div style="background-color:inherit">
<pre class="blockcode"><code class="language-cpp">static int x264_param_apply_preset( x264_param_t *param, const char *preset )
{
char *end;
int i = strtol( preset, &end, 10 );
if( *end == 0 && i >= 0 && i < sizeof(x264_preset_names)/sizeof(*x264_preset_names)-1 )
preset = x264_preset_names[i];
if( !strcasecmp( preset, "ultrafast" ) )
{
param->i_frame_reference = 1;//参考帧的最大帧数设为1
param->i_scenecut_threshold = 0;
param->b_deblocking_filter = 0;//不使用去块滤波
param->b_cabac = 0;//关闭cabac
param->i_bframe = 0;//关闭b帧
param->analyse.intra = 0;
param->analyse.inter = 0;
param->analyse.b_transform_8x8 = 0;
param->analyse.i_me_method = X264_ME_DIA;;运动估算法的选择
param->analyse.i_subpel_refine = 0;
param->rc.i_aq_mode = 0;
param->analyse.b_mixed_references = 0;
param->analyse.i_trellis = 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;
}
else if( !strcasecmp( preset, "superfast" ) )
{
param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
param->analyse.i_me_method = X264_ME_DIA;;//钻石模板
param->analyse.i_subpel_refine = 1;/亚像素运动估计质量为1
param->i_frame_reference = 1;//参考帧的最大帧数设为1
param->analyse.b_mixed_references = 0;
param->analyse.i_trellis = 0;
param->rc.b_mb_tree = 0;
param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
param->rc.i_lookahead = 0;
}
else if( !strcasecmp( preset, "veryfast" ) )
{
param->analyse.i_me_method = X264_ME_HEX;
param->analyse.i_subpel_refine = 2;
param->i_frame_reference = 1;//参考帧的最大帧数设为1
param->analyse.b_mixed_references = 0;
param->analyse.i_trellis = 0;
param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
param->rc.i_lookahead = 10;
}
else if( !strcasecmp( preset, "faster" ) )
{
param->analyse.b_mixed_references = 0;
param->i_frame_reference = 2;//参考帧的最大帧数设为2 |
|