1、碼率 、幀率以及分辨率
幀率:FPS(每秒鐘要多少幀畫面);以及Gop(表示多少秒一個I幀)
碼率:編碼器每秒變出多少數據大小,單位是kbps,好比800kbps表明編碼器每秒產生800kb(或100KB)的數據
分辨率:單位英寸所包含的像素點;VGA:Video Graphics Array (視頻圖像分辨率)
三者的對應直播的影響因素
幀率:影響畫面流暢度,與畫面流暢度成正比:幀率越大,畫面越流暢;幀率越小,畫面越有跳動感。若是碼率爲變量,則幀率也會影響體積,幀率越高,體積越大。幀率就是在1秒鐘時間裏傳輸的圖片的幀數,也能夠理解爲圖形處理每秒鐘可以刷新幾回。
分辨率:影響圖像大小,與圖像大小成正比:分辨率越高,圖像越大,分辨率越低,圖像越小。
清晰度
在碼率必定的狀況下,分辨率與清晰度成反比關係:分辨率越高,清晰度越低,圖像越清晰。
在分辨率必定的狀況下,碼率與清晰度成正比關係,碼率越高,圖像越清晰;碼率越低,圖像越不清晰。算法
二 視頻編碼
1.視頻編碼
幀間編碼技術
運動補償:運動補償是經過先前的局部圖像來預測、補償當前的局部圖像,它是減小幀序列冗餘信息的有效方法。
運動表示:不一樣區域的圖像須要使用不一樣的運動矢量來描述運動信息。
運動估計:運動估計是從視頻序列中抽取運動信息的一整套技術。
使用幀內編碼技術而已去除空間上的冗餘信息。
2.編碼概念
(1) IPB幀
視頻壓縮中,每幀都表明着一幅靜止的圖像。而在進行實際壓縮時,會採起各類算法以減小數據的容量,其中IPB幀就是最多見的一種。
I幀:幀內編碼幀(intra picture),I幀一般是每一個GOP(MPEG所使用的一種視頻壓縮技術)的第一幀,通過適度地壓縮,做爲隨機訪問的參考點能夠當成靜態圖像。I幀能夠看作一個圖像通過壓縮後以爲產物,I幀壓縮能夠得6:1的壓縮比而不會產生任何可覺察的模糊現象。I幀壓縮可去掉視頻的空間冗餘信息,下面即將介紹P幀和B幀是爲了去掉時間冗餘信息。
P幀:前向預測編碼在幀(predictive-frame),經過將圖像序列中前面已編碼幀的時間冗餘信息去充分去除壓縮傳輸數據量的編碼圖像,也成爲預測幀。
B幀:雙向預測內插編碼幀(bi-directionalinterpolated prediction frame),既考慮源圖像序列前面的已編碼幀,又估計源圖像序列後面的已編碼幀之間的時間冗餘信息,來壓縮傳輸數據量的編碼圖像,也成爲雙向預測幀。
基於上面的定義,咱們能夠從解碼的角度來理解IBP幀。
I幀自身能夠經過視頻解壓算法解壓成一行單獨的完善的完整視頻畫面,因此I幀去掉視頻幀在空間維度上的冗餘信息。
P幀須要參考其前面一個I幀或者P幀來解碼成一張完整的視頻畫面。
B幀則須要參考前一個I幀或者P幀及其後面一個P幀來生成後面一張完整的視頻畫面,因此P幀與B幀去掉是視頻在時間維度上的冗餘信息。
(2)IDR幀與I幀的理解
在H264的概念中有一個幀被稱爲IDR幀(instantaneous decoding refresh picture),那麼IDR幀與I幀的區別是什麼呢?由於H264採用多幀預測,因此在I幀以後P幀有可能會參考以前的I幀以前的幀,這就使得在隨機訪問的時候不能以找到I幀做爲參考條件,由於即便找到I幀,I幀以後的幀仍是有可能解析不出來,而IDR就是一個特殊的I幀,即這一幀以後的全部參考幀只會參考到這個IDR幀,而不會參考前面的幀。在解碼器中,一旦接收到一個IDR幀,就會當即清理參考幀緩存區,並將IDR幀做爲被參考的幀。
3.PTS與DTS
DTS(英文全稱Decoding Time Stamp)主要用於視頻的解碼,PTS(Presentation Time Stamp)主要用於視頻解碼階段進行視頻的同步和輸出。在沒有B幀的狀況下,DTS和PTS的輸出順序是同樣的。由於B幀打亂了解碼和顯示的順序,因此一旦存在B幀,PTS和DTS勢必就會不一樣。FFmpeg中使用AVPacket結構體描述解碼前或解碼後的壓縮數據,用AVFrame結構體來描述解碼後或編碼前的原始數據。對於視頻來講,AVFrame就是視頻的一幀圖像,這幀圖像何時給用戶,取決於它的PTS。DTS是AVPacket裏的一個成員,表示該壓縮包應該何時被解壓,若是視頻裏各幀裏編碼是按照輸入順序(顯示順序)依次進行的,那麼解碼和顯示的時間應該是一致的,可是事實上,在大多數編碼標準(如H264或HEVC)中,編碼順序和輸入並非一致的,纔會 須要PTS和DTS這兩種不一樣呢的時間戳。
4.GOP的概念
兩個I幀之間造成一組圖片,就是GOP(Group Of Picture)的概念。一般在爲編碼器設置爲參數的時候,必須設置爲gop_size的值,其表明的兩個I幀之間的幀數目。一個GOP中容量最大的就是I幀,因此相對來說,gop_size設置的越大,整個畫面就會越好,可是在解碼端必須從接收接收到一個I幀的第一個I幀開始I才能夠正確解碼出原始圖像,否者沒法正常解碼(這也是前面提到的I幀能夠做爲隨機訪問的幀)。在提升視頻質量的技巧中,還有個技巧是多使用B幀,通常來講,I幀的壓縮率是7(與JPG差很少),P是20,B能夠達到50,可見使用B幀能節省大量的空間,節省出來的空間能夠哦用來更多的保存I幀,這樣就能在相同的碼率下提供更好的畫質。因此咱們要根據不一樣的業務場景,適當的設置gop_size的大小,已獲得更高質量的視頻。
下面給出一個GOP爲15的例子,其解碼的參照frame及其解碼的順序都在裏面:緩存
如上圖:I frame的解碼不依賴於任何其餘的幀。而Pframe 的幾碼則依賴於前面的面的Ifarme或者Pframe.Bframe 的解碼則依賴於其前的最近一個I frame 或者P frame 及其後的最近的一個P frame .ide
做者: 岑雄峯
說明:八點鐘學院第一期VIP學員
免費學習連接:https://ke.qq.com/course/171725
精修課程連接:https://ke.qq.com/course/229709學習