天天看點

x264編碼參數設定

H264Encoder *pEn = (H264Encoder *)    AllocBuffer(sizeof(H264Encoder));
pEn->param       = (x264_param_t *)   AllocBuffer(sizeof(x264_param_t));
x264_param_default(pEn->param);			//set default param

/*設定profile屬性*/
//x264_profile_names數組定義如下:static const char * const x264_profile_names[] = 
//{ "baseline", "main", "high", "high10", "high422", "high444", 0 };
x264_param_apply_profile(pEn->param,x264_profile_names[0]);


pEn->param->i_csp                = X264_CSP_I420;// 設定幀資料格式為420
pEn->param->i_width			 = m_nPicW;		 // 設定幀寬度
pEn->param->i_height			 = m_nPicH;		 // 設定幀高度
pEn->param->rc.i_lookahead		 = 0;            

pEn->param->i_fps_num			 = m_nFps;       // 設定幀率(分子)
pEn->param->i_fps_den			 = 1;            // 設定幀率時間1s(分母)

pEn->param->rc.i_bitrate	     = m_nBitrate;   // 設定碼率
pEn->param->rc.i_vbv_max_bitrate = pCodecParam->encoder.iMaxBitrate; // 設定平均碼率模式下,最大瞬時碼率
pEn->param->i_keyint_max         = m_nFps * 2;   // 設定GOP最大長度
pEn->param->i_keyint_min         = m_nFps * 2;   // 設定GOP最小長度

pEn->param->pf_log = x264_log;	                 // 設定列印日志回調
pEn->param->p_log_private = NULL;
pEn->param->i_log_level = X264_LOG_WARNING;
pEn->param->b_vfr_input = 0;                     // 1:使用timebase和時間戳做碼率控制 0:隻使用fps做碼率控制

pEn->param->i_timebase_num = 1;                  // timebase(分子)
pEn->param->i_timebase_den = 1000;               // timebase(分母)

pEn->param->b_repeat_headers = 0;                // 1:在每個關鍵幀前面放sps和pps
pEn->param->i_threads = 1;                       // 并行編碼多個幀線程數
pEn->param->rc.i_rc_method       = X264_RC_ABR;  // 碼率控制方法,CQP(恒定品質),CRF(恒定碼率),ABR(平均碼率)
pEn->param->rc.i_vbv_buffer_size = pCodecParam->encoder.iMaxBitrate; //碼率控制緩沖區的大小,機關kbit,預設0

pEn->handle = x264_encoder_open(pEn->param);     // 建立一個新的編碼器句柄
           

繼續閱讀