ffmpeg碼率控制

一.VBR與CBR的含義和區別

VBR是動態碼率。CBR是靜態碼率。
VBR(Variable Bitrate)動態比特率。也就是沒有固定的比特率,壓縮軟件在壓縮時根據音頻數據即時肯定使用什麼比特率,這是以質量爲前提兼顧文件大小的方式。 VBR也稱爲動態比特率編碼,使用這個方式時,你能夠選擇從最差音質/最大壓縮比到最好音質/最低壓縮比之間的種種過渡級數,在MP3文件編碼之時,程序 會嘗試保持所選定的整個文件的品質,將選擇適合音樂文件的不一樣部分的比特率來編碼。主要優勢是可讓整首歌都能大體達到咱們的品質要求,缺點是編碼時沒法 估計壓縮出來的文件大小。
CBR(Constants Bit Rate)即固定碼率,就是靜態(恆定)比特率的意思,CBR是一種固定採樣率的壓縮方式。優勢是壓縮快,能被大多數軟件和設備支持,缺點是佔用空間相對大,效果不十分理想,現已逐步被VBR的方式取代。
固定碼率是一個用來形容通訊服務質量(QoS,Quality of Service)的術語。和該詞相對應的詞是可變碼率或可變比特率(英文variable bit rate,縮寫VBR)。
當形容編解碼器的時候,CBR編碼指的是編碼器的輸出碼率(或者解碼器的輸 入碼率)應該是固定制(常數)。當在一個帶寬受限的信道中進行多媒體通信的時候CBR是很是有用的,由於這時候受限的是最高碼率,CBR能夠更好的易用這 樣的信道。可是CBR不適合進行存儲,由於CBR將致使沒有足夠的碼率對複雜的內容部分進行編碼(從而致使質量降低),同時在簡單的內容部分會浪費一些碼 率。

二.ffmpeg設置方法

ffmpeg中CBR(固定碼率控制)的設置:
c->bit_rate = br;
c->rc_min_rate =br;
c->rc_max_rate = br; 
c->bit_rate_tolerance = br;
c->rc_buffer_size=br;
c->rc_initial_buffer_occupancy = c->rc_buffer_size*3/4;
c->rc_buffer_aggressivity= (float)1.0;
c->rc_initial_cplx= 0.5; 

ffmpeg中VBR(可變率控制)的設置:網絡

c->flags |= CODEC_FLAG_QSCALE;
c->rc_min_rate =min;
c->rc_max_rate = max; 
c->bit_rate = br;

三.試用場景

VBR 適合的應用場景是媒體存儲,而不是網絡傳輸。
其實實際網絡傳輸中所謂的 CBR 通常都是 ABR(平均比特率),即只要是單位時間內把碼率控制在額定碼率就能夠了,由於編碼輸出原本就有緩衝能夠起到平滑波動的做用。
嚴格意義上的 CBR 是 每一幀都分配一樣的碼字,試想一下,若是某一幀所須要的碼字原本就不多,而你卻必定要給它分配不少碼字,那不是浪費麼?另外一方面,若是某一幀所須要的碼字 原本就多,而你卻給得不多,那這幀的效果會不好。這樣編下來,總體序列質量會忽好忽壞地不停發生跳變,反而對視覺衝擊很大;所以 ABR 纔是最適合網絡傳輸的方案。
本文出處:http://blog.csdn.net/austinblog/article/details/28426587
相關文章
相關標籤/搜索