轉自:http://blog.csdn.net/table/article/details/8085115
灑家對編碼也是一知半解,很多參數意義也不太清楚,基本都是
實際調整參數後,觀看效果。如果描述錯誤,勿噴。
灑家也沒打算深入研究,灑家隻是想用用該編碼器。
本人使用x264主要想調整的參數,
第一,profile,也就是使用baseline還是main,還是high編碼。
可以通過該接口設定
x264_param_apply_profile();
第二, 編碼複雜度
param.i_level_idc=30;
第三,圖像品質控制
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 45;
rc.f_rf_constant是實際品質,越大圖像越花,越小越清晰。
param.rc.f_rf_constant_max ,圖像品質的最大值。
第四, 碼率控制
一開始我使用恒定碼流設定,無論我怎麼設定,都無法控制實際碼流,後來換成平均碼流後,就行了。
param.rc.i_rc_method = X264_RC_ABR;//參數i_rc_method表示碼率控制,CQP(恒定品質),CRF(恒定碼率),ABR(平均碼率)
param.rc.i_vbv_max_bitrate=(int)((m_bitRate*1.2)/1000) ; // 平均碼率模式下,最大瞬時碼率,預設0(與-B設定相同)
param.rc.i_bitrate = (int)m_bitRate/1000;
x264使用的bitrate需要/1000。
第五,使用實時視訊傳輸時,需要實時發送sps,pps資料
param.b_repeat_headers = 1; // 重複SPS/PPS 放到關鍵幀前面
該參數設定是讓每個I幀都附帶sps/pps。
第六. I幀間隔
我是将I幀間隔與幀率挂鈎的,以控制I幀始終在指定時間内重新整理。
以下是2秒重新整理一個I幀
param.i_fps_num = (int)m_frameRate;
param.i_fps_den = 1;
param.i_keyint_max = m_frameRate * 2;
第七,編碼延遲
在使用中,開始總是會有編碼延遲,導緻我本地編碼立即解碼回放後也存在巨大的視訊延遲,
後來發現設定x264_param_default_preset(¶m, "fast" , "zerolatency" );後就能即時編碼了。
主要是zerolatency該參數。
基本的就這樣了,完整的設定代碼
x264_param_t param;
x264_param_default_preset(¶m, "fast" , "zerolatency" );
param.i_width = m_width;
param.i_height = m_height;
param.b_repeat_headers = 1; // 重複SPS/PPS 放到關鍵幀前面
param.b_cabac = 1;
param.i_threads = 1;
param.i_fps_num = (int)m_frameRate;
param.i_fps_den = 1;
param.i_keyint_max = m_frameRate * 2;
// rc
//param.rc.b_mb_tree=0;//找個不為0,将導緻編碼延時幀...在實時編碼時,必須為0
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 45;
param.rc.i_rc_method = X264_RC_ABR;//參數i_rc_method表示碼率控制,CQP(恒定品質),CRF(恒定碼率),ABR(平均碼率)
//param.rc.f_rate_tolerance=0.1;
param.rc.i_vbv_max_bitrate=(int)((m_bitRate*1.2)/1000) ; // 平均碼率模式下,最大瞬時碼率,預設0(與-B設定相同)
param.rc.i_bitrate = (int)m_bitRate/1000;
x264_param_apply_profile(¶m, "baseline");
param.i_level_idc=30;
param.i_log_level = X264_LOG_NONE;
if(( m_p264Handle = x264_encoder_open(¶m)) == NULL)
看看别人寫的對x264結構體的說明
typedef struct x264_param_t
{
unsigned int cpu;
int i_threads;
int b_deterministic;
int i_sync_lookahead;
int i_width;
int i_height;
int i_csp;
int i_level_idc;
int i_frame_total;
struct
{
int i_sar_height;
int i_sar_width;
int i_overscan;
Int i_vidformat;
int b_fullrange;
int i_colorprim;
int i_transfer;
int i_colmatrix;
int i_chroma_loc;
} vui;
int i_fps_num;
int i_fps_den;
int i_frame_reference;
int i_keyint_max;
int i_keyint_min;
int i_scenecut_threshold;
int i_bframe;
int i_bframe_adaptive;
int i_bframe_bias;
int b_bframe_pyramid;
int b_deblocking_filter;
int i_deblocking_filter_alphac0;
int i_deblocking_filter_beta;
int b_cabac;
int i_cabac_init_idc;
int b_interlaced;
int i_cqm_preset;
char *psz_cqm_file;
uint8_t cqm_4iy[16];
uint8_t cqm_4ic[16];
uint8_t cqm_4py[16];
uint8_t cqm_4pc[16];
uint8_t cqm_8iy[64];
uint8_t cqm_8py[64];
void (*pf_log)( void *, int i_level, const char *psz, va_list );
void *p_log_private;
int i_log_level;
int b_visualize;
char *psz_dump_yuv;
struct
{
unsigned int intra;
unsigned int inter;
int b_transform_8x8;
int b_weighted_bipred;
int i_direct_mv_pred;
int i_chroma_qp_offset;
int i_me_method;
int i_me_range;
int i_mv_range;
int i_mv_range_thread;
int i_subpel_refine;
int b_chroma_me;
int b_mixed_references;
int i_trellis;
int b_fast_pskip;
int b_dct_decimate;
int i_noise_reduction;
float f_psy_rd;
float f_psy_trellis;
int b_psy;
int i_luma_deadzone[2];
int b_psnr;
int b_ssim;
} analyse;
struct
{
int i_rc_method;
int i_qp_constant;
int i_qp_min;
int i_qp_max;
int i_qp_step;
int i_bitrate;
float f_rf_constant;
float f_rate_tolerance;
int i_vbv_max_bitrate;
int i_vbv_buffer_size;
float f_vbv_buffer_init;
float f_ip_factor;
float f_pb_factor;
int i_aq_mode;
float f_aq_strength;
int b_mb_tree;
int i_lookahead;
int b_stat_write;
char *psz_stat_out;
int b_stat_read;
char *psz_stat_in;
float f_qcompress;
float f_qblur;
float f_complexity_blur;
x264_zone_t *zones;
int i_zones;
char *psz_zones;
} rc;
int b_aud;
int b_repeat_headers;
int i_sps_id;
int i_slice_max_size;
int i_slice_max_mbs;
int i_slice_count;
void (*param_free)( void* );
} x264_param_t;
這個是老版本的,新的x264好像新增了一些參數。