㈠ 圖像縮放 ffmpeg opencv resize 哪個速度快
OpenCV的話:YUV->IplImage->縮放->轉換回YUV可參考:YUV轉IPLImage(RGB)或者使用ffmpeg的swscale可以直接實現可參考:FFMPEG 實現 YUV,RGB各種圖像原始數據之間的轉換(swscale)
㈡ 音視頻編碼格式認知
編碼格式對應的就是音頻編碼和視頻編碼,
音頻編碼標准和視頻編碼標准,每種編碼標准都對應的編碼演算法,其目的是通過一定編碼演算法實現數據的壓縮、減少數據的冗餘。
視頻編碼指的是通過特定的壓縮技術,將某個視頻文件格式轉換為另一種視頻格式文件的方式
可變碼率指的是輸出碼流的碼率是可變的,因為視頻信源本身的高峰信息量是變化的,從確保視頻傳輸質量和充分利用信息的角度來說,可變碼率視頻編碼才是最合理的。
相關資料免費分享,領取方式見下方騰訊文檔
C++音視頻開發學習資料 :點擊領取 音視頻開發(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
是指視頻成像產品所形成的圖像大小或尺寸,常見的 1080P、4K 等又代表什麼呢,P 本身的含義是逐行掃描,表示視頻像素的總行數,
1080P 表示總共有 1080 行的像素數,而 K 表示視頻像素的總列數,4K 表示有 4000 列的像素數,
通常來說,1080P 就是指 1080 x 1920 的解析度,4 k 指 3840 x 2160 的解析度。
視頻編碼:
Xvid(舊稱為XviD)
是一個開放源代碼的MPEG-4影像編解碼器,是由一群原OpenDivX開發者在OpenDivX於2001年7月停止開發後自行開發的。
Xvid支持量化(Quantization)、范圍控制的運動偵測(Motion Search)、碼率曲線分配(Curve)、動態關鍵幀距(I-frame interval)、心理視覺亮度修正、演職員表選項、外部自定義控制、運動向量加速(Hinted ME)編碼、畫面優化解碼等眾多編碼技術,對用戶來說功能十分強大。
DivX是由MPEG-4衍生出的一種視頻編碼(壓縮)標准,也即我們通常所說的DVDrip格式,
它採用了MPEG4的壓縮演算法,同時又綜合了MPEG-4與MP3各方面的技術,說白了就是使用DivX壓縮技術對DVD碟片的視頻圖像進行高質量壓縮,
同時用MP3或AC3對音頻進行壓縮,然後再將視頻與音頻合成,並加上相應的外掛字幕文件而形成的視頻格式。其畫質直逼DVD,而體積只有DVD的數分之 一。
XviD與DivX幾乎相同,是開源的DivX,不收費,而使用DivX要收費。
H.264是一種高性能的視頻編解碼技術。
目前國際上制定視頻編解碼技術的組織有兩個,一個是「國際電聯(ITU-T)」,它制定的標准有H.261、H.263、H.263+等,
另一個是「國際標准化組織(ISO)」它制定的標准有MPEG-1、MPEG-2、MPEG-4等。
而H.264則是由兩個組織聯合組建的聯合視頻組(JVT)共同制定的新數字視頻編碼標准,
所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高級視頻編碼(Advanced Video Coding,AVC),而且它將成為MPEG-4標準的第10部分。
因此,不論是MPEG-4 AVC、MPEG-4 Part 10,還是ISO/IEC 14496-10,都是指H.264。
H.264最具價值的部分是更高的數據壓縮比,在同等的圖像質量,H.264的數據壓縮比能比DVD系統中使用的 MPEG-2高2 3倍,比MPEG-4高1.5 2倍。
舉個例子,原始文件的大小如果為100GB,採用MPEG-2壓縮標准壓縮後變成4GB,壓縮比為25 1,而採用H.264壓縮標准壓縮後變為1GB,從100GB到1GB,H.264的壓縮比達到驚人的100 1。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像。
微軟是在2003年9月遞交VC-1編碼格式的,目前已經得到了MovieBeam、Modeo等不少公司的採納,同時也包含在HD DVD和藍光中,包括華納和環球等影業公司也有採用這種格式的意向。
VC-1基於微軟Windows Media Video9(WMV9)格式,而WMV9格式現在已經成為VC-1標準的實際執行部分。WMV (Windows Media
Video)是微軟公司的視頻編解碼器家族,包括WMV7、WMV8、WMV9、WPV10。這一族的編解碼器可以應用在從撥號上網的窄帶視頻到高清晰度電視HDTV)的寬頻視頻。使用Windows Media Video用戶還可以將視頻文件刻錄到CD、DVD或者其它一些設備上。它也
適用於用作媒體伺服器。
WMV可以被看作是MPEG-4的一個增強版本。最新的由SMPTE(電視電影工程師協會)承認的WMV-9,也就是我們說的上面的VC-1。
同一個 AVCodecID 可能對應多個不同的編解碼器 (AVCodec) MPEG-4 AVC、MPEG-4 Part 10,還是ISO/IEC 14496-10,都是指H.264。
在編碼方式相同相同的情況下,.avi, .mkv, .mp4隻是封裝格式的區別(文件後綴格式),而封裝格式是不影響畫質的。
就相當於你的100塊錢折一下,或者兩下,或者兩下後不管是放在你的口袋裡,錢包里還是存錢罐里都是100塊錢。
這里的100塊錢就是就是視頻數據,你把100塊折一下,或者兩下,或者兩下就是編碼格式,錢包,口袋,存錢罐就是封裝格式。
㈢ 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解碼流程: