为何X264编码视频时无法改变输入流的帧率?
我在用x264库对一路视频实时流做编码,输入流的分辨率为1280*720,码率为2048,帧率为30帧/秒。现在我要用x264库将视频编码为分辨率为1280*720,码率为1024,帧率为25帧/秒。可测试发现编码后的视频码率倒是变为1024左右了,可帧率总是30帧/秒左右,并不是25帧/秒。请各位给指点一下,为什么帧率不变呢?
x264编码参数设置如下:
x264_param_default(&m_stX264Param);
int nRet = x264_param_default_preset(&m_stX264Param,“ultrafast”, "zerolatency");
nRet = x264_param_apply_profile(&m_stX264Param, "baseline");
m_stX264Param.i_threads = 1;
m_stX264Param.i_width = m_nVideoWidth;
m_stX264Param.i_height = m_nVideoHeight;
m_stX264Param.i_csp = X264_CSP_I420;
m_stX264Param.i_level_idc = 31;
m_stX264Param.i_frame_reference = 4;
m_stX264Param.i_keyint_max = m_nMaxKeyFrame;
m_stX264Param.i_keyint_min = X264_KEYINT_MIN_AUTO;
m_stX264Param.i_scenecut_threshold = 40;
m_stX264Param.i_bframe = 0;
m_stX264Param.i_bframe_adaptive = X264_B_ADAPT_FAST;
m_stX264Param.i_bframe_bias = 0;
m_stX264Param.i_bframe_pyramid = 0;
m_stX264Param.b_cabac = 1;
m_stX264Param.i_log_level = X264_LOG_NONE;
m_stX264Param.rc.i_rc_method = X264_RC_ABR;
m_stX264Param.rc.b_mb_tree = 0;
char szBitrate[16] = { 0 };
sprintf_s(szBitrate, "%d\0", 1024);
x264_param_parse(&m_stX264Param, "bitrate", szBitrate);
char szVbvMaxBitrate[16] = { 0 };
sprintf_s(szVbvMaxBitrate, "%d\0", 1024*1.5);
x264_param_parse(&m_stX264Param, "vbv-maxrate", szVbvMaxBitrate);
char szVbvBufSize[16] = { 0 };
sprintf_s(szVbvBufSize, "%d\0", 1024);
x264_param_parse(&m_stX264Param, "vbv-bufsize", szVbvBufSize);
m_stX264Param.b_vfr_input = 0;
m_stX264Param.i_fps_num = m_nFrameRate;
m_stX264Param.i_fps_den = 1;
m_stX264Param.b_annexb = 1;
m_stX264Param.b_repeat_headers = 1;
m_stX264Param.b_deblocking_filter = 1;
m_stX264Param.i_deblocking_filter_alphac0 = 6;
m_stX264Param.i_deblocking_filter_beta = 6;