當前位置:編程學習大全網 - 源碼下載 - ffmpeg基礎知識

ffmpeg基礎知識

ffmpeg是音視頻處理的c庫, 音視頻在網絡傳輸過程中,由於數據量大,所有需要進行壓縮

壓縮目的為了去除冗余信息,冗余信息分為:

1、空間冗余:圖像相鄰像素之間有較強的相關性

2、時間冗余:視頻序列的相鄰圖像之間內容相似

3、 編碼冗余:不同像素值出現的概率不同

?4、 視覺冗余:人的視覺系統對某些細節不敏感

? 5、知識冗余:規律性的結構可由先驗知識和背景知識得到

● 無損壓縮(Winzip)

? 壓縮前解壓縮後圖像完全壹致

? 壓縮比低

● 有損壓縮(H.264)

? 壓縮前解壓縮後圖像不壹致

? 壓縮比高

? 利用人的視覺系統的特性(人眼能見的動畫頻率和圖像細節有限制)

音視頻壓縮其實就是對音視頻進行編碼,

視頻編碼格式

音頻編碼格式

封裝格式

流媒體協議

YUV ,是壹種 顏色 編碼 方法。常使用在各個視頻處理組件中。 YUV在對照片或視頻編碼時,考慮到人類的感知能力,允許降低色度的帶寬。

YUV是編譯true-color顏色空間(colorspace)的種類,Y'UV,YUV, YCbCr , YPbPr 等專有名詞都可以稱為YUV,彼此有重疊。“Y”表示 明亮度 (Luminance、Luma),“U”和“V”則是**[色度]

YUV格式有兩大類:(平面格式)planar和(打包格式)packed。

1.planar:先存儲Y,然後U,然後V

2.packed:yuv交叉存儲

還有我們常說的YUV420sp與YUV420p。

YUV420sp: 壹種two-plane模式,即Y和UV分為兩個平面,U、V交錯排列。

YUV420p: 先把U存放完後,再存放V。UV是連續的。

YUV420的數據大小為: 亮度(行×列) + V(行×列/4) + U(行×列/4)即:W H 3/2,

普遍的編碼器都以接受planar的I420數據(YUV420P)

4*4的I420數據排列如下:

y1 y2 y3 y4

y5 y6 y7 y8

y9 y10 y11 y12

y13 y14 y15 y16

u1 u2 u3 u4

v1 v2 v3 v4

Android相機的采集的視頻是NV21(YUV420sP), 也是YUV的格式 只不過U和V的交叉的。

y1 y2 y3 y4

y5 y6 y7 y8

y9 y10 y11 y12

y13 y14 y15 y16

u1 v1 u2 v2

u3 v3 u4 v4

在采集相機數據時需要把UV數據給轉換成上面的 順序。

I frame :幀內編碼幀 ,I 幀通常是每個 GOP(MPEG 所使用的壹種視頻壓縮技術)的第壹個幀,經過適度地壓縮,做為隨機訪問的參考點,可以當成圖象。I幀可以看成是壹個圖像經過壓縮後的產物。

P frame: 前向預測編碼幀,通過充分將低於圖像序列中前面已編碼幀的時間冗余信息來壓縮傳輸數據量的編碼圖像,也叫預測幀;

B frame: 雙向預測內插編碼幀 ,既考慮與源圖像序列前面已編碼幀,也顧及源圖像序列後面已編碼幀之間的時間冗余信息來壓縮傳輸數據量的編碼圖像,也叫雙向預測幀;

I frame:自身可以通過視頻解壓算法解壓成壹張單獨的完整的圖片。

P frame:需要參考其前面的壹個I frame 或者B frame來生成壹張完整的圖片。

B frame:則要參考其前壹個I或者P幀及其後面的壹個P幀來生成壹張完整的圖片。

PTS:Presentation Time Stamp。PTS主要用於度量解碼後的視頻幀什麽時候被顯示出來

DTS:Decode Time Stamp。DTS主要是標識讀入內存中的幀數據在什麽時候開始送入解碼器中進行解碼。

在沒有B幀存在的情況下DTS的順序和PTS的順序應該是壹樣的。

DTS主要用於視頻的解碼,在解碼階段使用。PTS主要用於視頻的同步和輸出.在顯示的時候使用。

如上圖:I frame 的解碼不依賴於任何的其它的幀.而p frame的解碼則依賴於其前面的I frame或者P frame.B frame的解碼則依賴於其前的最近的壹個I frame或者P frame 及其後的最近的壹個P frame.

libavformat

? 用於各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構和讀取音視頻幀等功能;音視頻的格式解析協議,為 libavcodec 分析碼流提供獨立的音頻或視頻碼流源。

libavcodec

? 用於各種類型聲音/圖像編解碼;該庫是音視頻編解碼核心,實現了市面上可見的絕大部分解碼器的功能,libavcodec 庫被其他各大解碼器 ffdshow,Mplayer 等所包含或應用。

libavfilter

? filter(FileIO、FPS、DrawText)音視頻濾波器的開發,如水印、倍速播放等。

libavutil

? 包含壹些公***的工具函數的使用庫,包括算數運算 字符操作;

libswresample

? 原始音頻格式轉碼。

libswscale

? (原始視頻格式轉換)用於視頻場景比例縮放、色彩映射轉換;圖像顏色空間或格式轉換,如 rgb565,rgb888 等與 yuv420 等之間轉換。

音視頻解5封裝流程:

ffmpeg解碼流程:

  • 上一篇:自營項目資金管理辦法?
  • 下一篇:vb6中TXT文檔編碼轉換源代碼求助
  • copyright 2024編程學習大全網