[直播一攬子]x264參數的解釋

 

x264_param_default(&param);//設置默認參數具體見common/common.c
    int yuvsize=m_height*m_width*3/2;
    param.i_width=m_width;
    param.i_height=m_height;
    param.i_keyint_min=5;//關鍵幀最小間隔
    param.i_keyint_max=250;//關鍵幀最大間隔
    param.b_annexb=1;//1前面爲0x00000001,0爲nal長度
    param.b_repeat_headers=0;//關鍵幀前面是否放sps跟pps幀,0 否 1,放    
//    param.analyse.i_subpel_refine=7;//壓縮級別1~7
//    param.i_log_level=X264_LOG_NONE;//設置顯示信息級別緩存

    //==============================================================
    ////pX264Param = &param;
    ////int yuvsize=m_height*m_width*3/2;
    //* 使用默認參數,在這裏由於個人是實時網絡傳輸,因此我使用了zerolatency的選項,使用這個選項以後就不會有delayed_frames,若是你使用的不是這樣的話,還須要在編碼完成以後獲得緩存的編碼幀   
    ////x264_param_default_preset(pX264Param, "ultrafast"/*"veryfast"*/, "zerolatency");  網絡

    //* cpuFlags   
    ////pX264Param->i_threads  = X264_THREADS_AUTO/*X264_SYNC_LOOKAHEAD_AUTO*/;//* 取空緩衝區繼續使用不死鎖的保證.  
    ////pX264Param->i_log_level = X264_LOG_NONE; 
    //* 視頻選項      
    ////pX264Param->i_width   = Width; //* 要編碼的圖像寬度.   
    ////pX264Param->i_height  = Height; //* 要編碼的圖像高度   
    //pX264Param->i_frame_total = 0; //* 編碼總幀數.不知道用0.   
    //pX264Param->i_keyint_max = 10;   app

    //* 流參數   
    ////pX264Param->i_bframe  = 0;  
//     pX264Param->b_open_gop  = 0;  
//     pX264Param->i_bframe_pyramid = 0;  
//     pX264Param->i_bframe_adaptive = 0; 測試

    //* Log參數,不須要打印編碼信息時直接註釋掉就行   
    //pX264Param->i_log_level  = X264_LOG_DEBUG;  大數據

    //* 速率控制參數   
    //pX264Param->rc.i_bitrate = 1024 * 10;//* 碼率(比特率,單位Kbps)  優化

    //* muxing parameters   
    ////pX264Param->i_fps_den  = 1; //* 幀率分母   
    ////pX264Param->i_fps_num  = 25;//* 幀率分子   
//     pX264Param->i_timebase_den = pX264Param->i_fps_num;  
//     pX264Param->i_timebase_num = pX264Param->i_fps_den;  
    /*
    //設置x264輸出中最大、最小的IDR幀(亦稱關鍵幀)間距。
    //最大間距默認值(fps的10倍)對大多數視頻都很好;最小間距與fps相等
    pX264Param->i_keyint_max = 150;
    pX264Param->i_keyint_min = 50;
    //* 設置Profile.使用Baseline profile   
    x264_param_apply_profile(pX264Param, x264_profile_names[0]);  
    
    //徹底關閉自適應I幀決策。
    pX264Param->i_scenecut_threshold = 0;
    //設置亞像素估計的複雜度。值越高越好。級別1-5簡單控制亞像素的細化力度。級別6給模式決策開啓RDO(碼率失真優化模式),
    //級別8給運動矢量和幀內預測模式開啓RDO。開啓RDO會顯著增長耗時。
    //使用小於2的值會開啓一個快速的、低質量的預測模式,效果如同設置了一個很小的 –scenecut值。不推薦這樣設置。
    //pX264Param->analyse.i_subpel_refine = 1;
    //爲mb-tree ratecontrol(Macroblock Tree Ratecontrol)和vbv-lookahead設置可用的幀的數量。最大可設置爲250。
    //對於mb-tree而言,調大這個值會獲得更準確地結果,但也會更慢。
    //mb-tree能使用的最大值是–rc-lookahead和–keyint中較小的那一個。
    pX264Param->rc.i_lookahead = 0; 
    //i_luma_deadzone[0]和i_luma_deadzone[1]分別對應inter和intra,取值範圍1~32
    //測試能夠得知,這連個參數的調整能夠對數據量有很大影響,值越大數據量相應越少,佔用帶寬越低.
    pX264Param->analyse.i_luma_deadzone[0] = 32;
    pX264Param->analyse.i_luma_deadzone[1] = 32;
    //碼率控制模式有ABR(平均碼率)、CQP(恆定質量)、CRF(恆定碼率).
    //ABR模式下調整i_bitrate,CQP下調整i_qp_constant調整QP值,範圍0~51,值越大圖像越模糊,默認23.
    //太細緻了人眼也分辨不出來,爲了增長編碼速度下降數據量仍是設大些好,CRF下調整f_rf_constant和f_rf_constant_max影響編碼速度和圖像質量(數據量);
    pX264Param->rc.i_rc_method = X264_RC_CQP;
    pX264Param->rc.i_qp_constant = 30;
    //自適應量化器模式。不使用自適應量化的話,x264趨向於使用較少的bit在缺少細節的場景裏。自適應量化能夠在整個視頻的宏塊裏更好地分配比特。它有如下選項:
    //0-徹底關閉自適應量化器;1-容許自適應量化器在全部視頻幀內部分配比特;2-根據前一幀強度決策的自變量化器(實驗性的)。默認值=1
    pX264Param->rc.i_aq_mode = 0;
    //爲’direct’類型的運動矢量設定預測模式。有兩種可選的模式:spatial(空間預測)和temporal(時間預測)。默認:’spatial’
    //能夠設置爲’none’關閉預測,也能夠設置爲’auto’讓x264去選擇它認爲更好的模式,x264會在編碼結束時告訴你它的選擇。
    pX264Param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_NONE;
    //開啓明確的權重預測以增進P幀壓縮。越高級的模式越耗時,有如下模式:
    //0 : 關閉; 1 : 靜態補償(永遠爲-1); 2 : 智能統計靜態幀,特別爲增進淡入淡出效果的壓縮率而設計
    //pX264Param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
    //設置全局的運動預測方法,有如下5種選擇:dia(四邊形搜索), hex(六邊形搜索), umh(不均勻的多六邊形搜索)
    //esa(全局搜索),tesa(變換全局搜索),默認:’hex’
    pX264Param->analyse.i_me_method = X264_ME_DIA;
    //merange控制運動搜索的最大像素範圍。對於hex和dia,範圍被控制在4-16像素,默認就是16。
    //對於umh和esa,能夠超過默認的 16像素進行大範圍的運行搜索,這對高分辨率視頻和快速運動視頻而言頗有用。
    //注意,對於umh、esa、tesa,增大merange會顯著地增長編碼耗時。默認:16
    pX264Param->analyse.i_me_range = 4;
    //關閉或啓動爲了心理視覺而下降psnr或ssim的優化。此選項同時也會關閉一些不能經過x264命令行設置的內部的心理視覺優化方法。
    //pX264Param->analyse.b_psy = 0;
    //Mixed refs(混合參照)會以8×8的切塊爲參照取代以整個宏塊爲參照。會增進多幀參照的幀的質量,會有一些時間耗用.
    //pX264Param->analyse.b_mixed_references = 0;
    //一般運動估計都會同時考慮亮度和色度因素。開啓此選項將會忽略色度因素換取一些速度的提高。
    pX264Param->analyse.b_chroma_me = 1;
    //使用網格編碼量化以增進編碼效率:0-關閉, 1-僅在宏塊最終編碼時啓用, 2-全部模式下均啓用.
    //選項1提供了速度和效率間較好的均衡,選項2大幅下降速度.
    //注意:須要開啓 –cabac選項生效.
    //pX264Param->b_cabac = 1;
    //pX264Param->analyse.i_trellis = 1;
    //停用彈性內容的二進制算數編碼(CABAC:Context Adaptive Binary Arithmetic Coder)資料流壓縮,
    //切換回效率較低的彈性內容的可變長度編碼(CAVLC:Context Adaptive Variable Length Coder)系統。
    //大幅下降壓縮效率(一般10~20%)和解碼的硬件需求。
    //pX264Param->b_cabac = 1;
    //pX264Param->i_cabac_init_idc = 0;
    //關閉P幀的早期跳過決策。大量的時耗換回很是小的質量提高。
    pX264Param->analyse.b_fast_pskip = 0;
    //DCT抽樣會丟棄看上去「多餘」的DCT塊。會增長編碼效率,一般質量損失能夠忽略。
    pX264Param->analyse.b_dct_decimate = 1;
    //open-gop是一個提升效率的編碼技術。有三種模式:none-停用open-gop;normal-啓用open-gop;
    //bluray-啓用open-gop。一個效率較低的open-gop版本,由於normal模式沒法用於藍光編碼.
    //某些解碼器不徹底支援open-gop資料流,這就是爲何此選項並未默認爲啓用。若是想啓用open-gop,應該先測試全部可能用來撥放的解碼器。
    pX264Param->b_open_gop = 1;
    //徹底關閉內置去塊濾鏡,不推薦使用。
    //調節H.264標準中的內置去塊濾鏡。這是個性價比很高的選則, 關閉.
    //pX264Param->b_deblocking_filter = 1;
    //pX264Param->i_deblocking_filter_alphac0 = 0;
    //pX264Param->i_deblocking_filter_beta = 0;
    //去掉信噪比的計算,由於在解碼端也可用到.
    pX264Param->analyse.b_psnr = 0; //是否使用信噪比.
    */
    //限制輸出文件的profile。這個參數將覆蓋其它全部值,此選項能保證輸出profile兼容的視頻流。
    //若是使用了這個選項,將不能進行無損壓縮。可選:baseline,main,high
    ////x264_param_apply_profile(pX264Param, "baseline");編碼

相關文章
相關標籤/搜索