OpenH264性能与编码数据大小(SEncParamExt)

时间:2016-04-22 22:41:05

标签: c++ h.264 vp8 openh264

我试图使用OpenH264 C ++库为960x540视频获得大约每秒24帧的速度。我为SEncParamExt尝试了不同的参数,我无法获得更好的编解码器性能,而不是更小的编码数据。我的计算机上的速度大约为16-20 fps。

这是我目前的配置。

SEncParamExt param;
m_pEncoder->GetDefaultParams(&param);

param.fMaxFrameRate = 30;

param.bEnableFrameSkip = false;
param.iMinQp = 20;
param.iMaxQp = 30;
param.iPicWidth = m_frameFormat.GetWidth();
param.iPicHeight = m_frameFormat.GetHeight();
param.iTargetBitrate = 5000000;
param.bEnableDenoise = false;
param.iSpatialLayerNum = 1;
param.iTemporalLayerNum = 1;
param.bIsLosslessLink = false;
param.bEnableLongTermReference = true;
param.iEntropyCodingModeFlag = 0;
param.iMultipleThreadIdc = 2;
param.bUseLoadBalancing = true;

for (int i = 0; i < param.iSpatialLayerNum; i++)
{
    param.sSpatialLayers[i].iVideoWidth = m_frameFormat.GetWidth()  >> (param.iSpatialLayerNum - 1 - i);
    param.sSpatialLayers[i].iVideoHeight = m_frameFormat.GetHeight() >> (param.iSpatialLayerNum - 1 - i);
    param.sSpatialLayers[i].fFrameRate = 30;
    param.sSpatialLayers[i].iSpatialBitrate = param.iTargetBitrate;
    param.sSpatialLayers[i].sSliceArgument.uiSliceMode = SM_FIXEDSLCNUM_SLICE;
    param.sSpatialLayers[i].sSliceArgument.uiSliceNum = 2;
}

param.iTargetBitrate *= param.iSpatialLayerNum;

我为 param.iComplexityMode param.iRCMode 尝试了不同的值,我得到了必要的帧速率,但图片质量非常糟糕。我也玩过量化等级而且没有帮助。

我也使用 VP8编解码器。它可以轻松地为同一视频生成每秒24帧。编码数据的大小更大(在OpenH264的情况下,大约每秒500Kb,而在每秒200Kb),但对我来说非常方便。

我做错了什么?我该怎么做才能提高OpenH264的性能?

0 个答案:

没有答案