【技术解决方案】优化FFmpeg编码器参数设置
FFmpeg?x264編碼參數對照表
| x264 | ffmpeg | 說明 | ||
| 命令行 | 字段 | 命令行 | 字段 | |
| qp qp_constant | cqp | cqp | 固定量化因子。取值范圍0到51。 經常取值在20-40之間,越小質量 越好,要求的碼率越高。0表示無損壓縮 | |
| max-keyint | i_keyint_max | g | gop_size | 關鍵幀的最大間隔幀數 |
| min-keyint | i_keyint_min | keyint_min | 關鍵幀的最小間隔幀數 | |
| level | i_level_idc | level | 取值范圍10-51。 設置比特流的Level。默認40,即4.0。 用來告訴解碼器需要支持的什么級別的 兼容性。只有在你知道自己在做什么的 時候才設置該參數。 | |
| frameref | i_frame_reference | refs | B和P幀向前預測參考的幀數。取值范 圍1-16。 該值不影響解碼的速度,但是越大解碼 所需的內存越大。這個值在一般情況下 越大效果越好,但是超過6以后效果就 不明顯了。 | |
| bframes | i_bframe | max_b_frames | 最大B幀數. | |
| b-adapt | b_bframe_adaptive | b_frame_strategy | 如果為true,則自動決定什么時候需要 插入B幀,最高達到設置的最大B幀數。 如果設置為false,那么最大的B幀數被 使用。 | |
| b-pyramid | b_bframe_pyramid | FLAGS2(CODEC_FLAG2_BPYRAMID) | 當設置B幀>=2時候,通過開啟這個選 項可以獲得質量的略微提高,但是沒有 任何的速度損失。 | |
| b_deblocking_filter | FLAGS(CODEC_FLAG_LOOP_FILTER) | |||
| deblock | i_deblocking_filter_alphac0 | deblockalpha | ||
| cabac | b_cabac | coder_type(FF_CODER_TYPE_AC) | 使用CABAC熵編碼技術,為引起輕微的 編碼和解碼的速度損失,但是可以提高 10%-15%的編碼質量。 | |
| qmin | i_qp_min | qmin | 最小的量化因子。取值范圍1-51。建 議在10-30之間。 | |
| qmax | i_qp_max? | qmax | 最大的量化因子。取值范圍1-51。建 議在10-30之間。 | |
| qpstep qp-step | i_qp_step | max_qdiff | 最大的在幀與幀之間進行切變的量化 因子的變化量。 | |
| qcomp | f_qcompress | |||
| vbv-maxrate | i_vbv_max_bitrate | b | rc_max_rate | 允許的最大碼流,x264里面以kbps為 單位,ffmpeg以bps為單位 |
| vbv-bufsize | i_vbv_buffer_size | bufsize | rc_buffer_size? | 在指定vbv-maxrate的時候必須設置 該字段。 |
| vbv-init | f_vbv_buffer_init | rc_initial_buffer_occupancy | 初始的緩存占用量 | |
| qcomp | f_qcompress | qcompress | 量化器壓縮比率0-1.越小則比特率 越區域固定,但是越高越使量化器 參數越固定。 | |
| direct-pred direct | i_direct_mv_pred | directpred | B幀里面采用的運動偵測的方式。 時間和空間方式大致PSNR和速度 是一致的。設置為auto質量會好一 些,但是速度會下降一些,設置為0 ,質量和速度都會下降.可以選擇 none, auto, temporal, spatial. | |
| weightb weight-b | b_weighted_bipred | FLAGS2(CODEC_FLAG2_WPRED) | 當B幀設置>1時使用 | |
| partitions analyse | inter | X264_ANALYSE_I4x4 X264_ANALYSE_I8x8 X264_ANALYSE_PSUB16x16 X264_ANALYSE_PSUB8x8 X264_ANALYSE_BSUB16x16 | ||
| 8x8dct | b_transform_8x8 | FLAGS(CODEC_FLAG2_8X8DCT) | ||
| me | i_me_method | me_method | 運動偵測的方式 ME_EPZS ME_HEX ME_UMH ME_FULL ME_ESA | |
| me-range merange | i_me_range | me_range | 運動偵測的半徑 | |
| subq subme | i_subpel_refine | me_subpel_quality | 這個參數控制在運動估算過程中質 量和速度的權衡。Subq=5可以壓 縮>10%于subq=1。1-7 | |
| mixed-refs | b_mixed_references | FLAGS2(CODEC_FLAG2_MIXED_REFS) | 允許8*8,16*8運動塊獨立地選擇 參考幀,如果disable,則所有的宏 塊必須參考同一幀。 需要frameref > 1 | |
| brdo | b_bframe_rdo | FLAGS2(CODEC_FLAG2_BRDO) | 需要subq>6 | |
| bime | b_bidir_me | bidir_refine | 取值范圍:true,false.這個值在沒 有B幀的時候失效。在雙向預測宏塊中 雙向運動矢量使用。 | |
| trellis | i_trellis | trellis | ||
| deadzone-intra | i_luma_deadzone | 沒有對應值 | ||
| deadzone-inter | i_luma_deadzone | 沒有對應值 | ||
| fast-pskip | b_fast_pskip | FLAGS(CODEC_FLAG2_FASTPSKIP) | 在P幀內執行早期快速跳躍探測。 這個經常在沒有任何損失的前提 下提高了速度。 | |
| dct-decimate | b_dct_decimate | 沒有對應值 | ||
| nr | i_noise_reduction | noise_reduction | 0意味著關閉,對于噪聲很大的 內容你需要打開。 范圍:0-100000 | |
| interlaced | b_interlaced | 沒有對應值 | ||
| global-header | b_repeat_headers | FLAGS(CODEC_FLAG_GLOBAL_HEADER) | 使得SPS和PPS只在流的開始處 產生一次。有些播放器,如SONY 的PSP需要開啟此參數。默認的設 置使得SPS和PPS在每一個IDR幀 開始出都進行重復。 | |
| aud | b_aud | FLAGS2(CODEC_FLAG2_AUD) | ||
| threads | i_threads | thread_count | 將幀切分成塊,由不同的線程進行 分別編碼。0-4。 0 for auto | |
| rc-eq | psz_rc_eq | rc_eq | ||
| --no-psnr | b_psnr | FLAGS(CODEC_FLAG_PSNR) | 是否開啟PSNR. | |
| --no-ssim | b_ssim | 沒有對應值 | ||
| --progress | b_progress | 沒有對應值 | ||
| --bitrate | i_bitrate | b | bit_rate | 編碼輸出的比特率,并啟用 ABR(Average Birtate?模式(i_rc_method), |
| qblur | f_qblur | qblur | ||
| f_complexity_blur | complexityblur |
?參數詳細解釋
?bit_rate = 200000, //?目標碼率,采樣碼率越大,目標文件越大
?bit_rate_tolerance= 8000000 //?碼率誤差,允許的誤差越大,視頻越小
gop_size = 300 //多少幀內出現1個I幀
qmin =? 30 //?最小量化系數
qmax = 50 //最大量化系數
max_b_frames = 300 //兩個非B幀之間允許出現的最多b幀數。
i_quant_factor = 0.1 //? i?幀相對p幀的量化系數比,?值越小?,?p幀的量化系數越大,視頻越小
b_quant_factor = 4.9 // b?幀相對p幀的量化系數比,值越大,b幀的量化系數越大,視頻越小
Ps.B幀量化系數=b_quant_factor* p幀量化系數+b_quant_offset
?--preset的參數主要調節編碼速度和質量的平衡,有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo這10個選項,從快到慢。?
?--tune的參數主要配合視頻類型和視覺優化的參數,或特別的情況。如果視頻的內容符合其中一個可用的調整值又或者有其中需要,則可以使用此選項,否則建議不使用(如tune grain是為高比特率的編碼而設計的)。
tune的值有:?
film:? ? ? ? ? ? ? 電影、真人類型;?
animation:? ? 動畫;?
grain:? ? ? ? ? ? 需要保留大量的grain時用;?
stillimage:? ? ?靜態圖像編碼時使用;?
psnr:? ? ? ? ? ? 為提高psnr做了優化的參數;?
ssim:? ? ? ? ? ?為提高ssim做了優化的參數;?
fastdecode: 可以快速解碼的參數;?
zerolatency:零延遲,用在需要非常低的延遲的情況下,比如電視電話會議的編碼。
一般發送網絡流都需要增加這兩個參數,否則播放圖像的延時很大。
?如果用代碼,可以這樣設置:
?/**?
?*?ultrafast,superfast,?veryfast,?faster,?fast,?medium?
?*?slow,?slower,?veryslow,?placebo.?
?*/??
AVDictionary?*param?=?0;??av_dict_set(¶m,?"preset",?"fast",?0);?//?av_opt_set(pCodecCtx->priv_data,"preset","fast",0);??av_dict_set(¶m,?"tune",?"zerolatency",?0); ?畫質,分別是baseline, extended, main, high
????????????????? 1、BaselineProfile:基本畫質。支持I/P?幀,只支持無交錯(Progressive)和CAVLC;
????????????????? 2、Extendedprofile:進階畫質。支持I/P/B/SP/SI?幀,只支持無交錯(Progressive)和CAVLC;(用的少)
????????????????? 3、Main profile:主流畫質。提供I/P/B幀,支持無交錯(Progressive)和交錯(Interlaced),也支持CAVLC?和CABAC?的支持;
????????????????? 4、High profile:高級畫質。在mainProfile?的基礎上增加了8x8內部預測、自定義量化、無損視頻編碼和更多的YUV?格式;
???????? H.264 Baseline profile、Extended profile和Main profile都是針對8位樣本數據、4:2:0格式(YUV)的視頻序列。在相同配置情況下,
????????????????? Highprofile(HP)可以比Main profile(MP)降低10%的碼率。根據應用領域的不同,Baseline profile多應用于實時通信領域,
????????????????? Mainprofile多應用于流媒體領域,High profile則多應用于廣電和存儲領域。
? ? ? ? ? ? ? ? ?//av_dict_set(¶m, "profile","main", 0); ?
?如何設置固定碼率編碼 ?
?bit_rate是平均碼率,不一定能控制住
?AVCodecContext* pCodecCtx;
?//...
?pCodecCtx->bit_rate = 400000;
?pCodecCtx->rc_max_rate = 400000;
?pCodecCtx->rc_min_rate = 400000;
?提示? [libx264 @ 00c70be0] VBV maxrate specified, but no bufsize, ignored
?再設置? pCodecCtx->rc_buffer_size = 200000;? 即可。如此控制后編碼質量明顯差了。
總結
以上是生活随笔為你收集整理的【技术解决方案】优化FFmpeg编码器参数设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓桌面主题下载安装(安卓桌面主题下载)
- 下一篇: 【技术解决方案】RTP_UDP传输过程中