H264视频编码原理基础分析
引言
- 本文章旨在記錄本人學習有關音視頻時對H264碼流視頻編解碼原理部分的內容,如有不對請留言指出
1、音視頻封裝格式
? 我們一般下載或者播放的視頻文件常見都是以 xxx.mp4、xxx.flv、xxx.mkv等標識結尾,其實這都是對視頻+音頻的進一步封裝,詳見如下視頻文件的經典圖:
通過上圖我們知道一個視頻需要播放起來能看,經過的步驟
①解封裝格式→ ②視頻解碼 → ③音視頻同步,
H264視頻壓縮數據就在視頻解封裝格式后這步。所以單純的想要播放有畫面的視頻只需要拿到xxx.h264文件即可。
通過FFmpeg工具即可直接得到一個視頻的h264視頻壓縮文件。
FFmpeg 工具抽取視頻的H264文件命令:
(1)mp4視頻文件抽取H264視頻文件命令: ffmpeg.exe -i 源視頻名.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 輸出視頻文件名.h264 (2)播放H264文件 ffplay.exe (h264文件名).h264
2、H264介紹
? 關于H264的由來介紹可參考以下幾篇文章,就不過多記錄了
? 1)H264百度百科:https://baike.baidu.com/item/H.264/1022230?fromtitle=H264&fromid=7338504&fr=aladdin
? 2)H264由來介紹:
3、H264文件分析
? 首先我們還是用FFmpeg工具將之前抽取到的視頻壓縮H264文件進一步抽取出原始視頻數據 yuv文件:
(1)H264文件抽取yuv視頻文件命令: ffmpeg.exe -i out.h264 -s 544x960 -pix_fmt yuv420p out.yuv 解釋: out.h264:(h264源文件名) 544x960:(視頻分辨率) yuv420p:(編碼格式) out.yuv: (輸出的yuv文件名) (2)播放yuv文件命令: ffplay.exe -video_size 544x960 -i out.yuv 解釋: 544x960:(視頻分辨率) out.yuv:(yuv文件名)? 然后看個文件大小數據對比:
? 源視頻 【2.79MB】←pk→ H264文件【2.65MB】 ←pk→ yuv【454MB】文件
? 裸數據從454MB直接壓縮到2.65MB,直接壓縮了差不多200倍,逆天了。真的是極大的節約了存儲空間
?
? H264說到底就是對視頻數據進行壓縮的技術,主要采用了以下幾種方法對視頻數據進行壓縮
- 幀內預測壓縮,解決的是空域數據冗余問題
- 幀間預測壓縮(運動估計與補償),解決的是時域數據冗徐問題
- 整數離散余弦變換(DCT),將空間上的相關性變為頻域上無關的數據然后進行量化
- CABAC壓縮
? 經過壓縮后的幀分為:I幀,P幀、B幀
- I幀:關鍵幀,采用幀內壓縮技術
- P幀:向前參考幀,在壓縮時,只參考前面已經處理的幀。采用幀音壓縮技術
- B幀:雙向參考幀,在壓縮時,它即參考前而的幀,又參考它后面的幀。采用幀間壓縮技術
? 除了I/P/B幀外,還有圖像序列GOP
? GOP:兩個I幀之間是一個圖像序列,在一個圖像序列中只有一個I幀。如下圖所示:
4、H264壓縮技術過程
…由于此壓縮技術過程篇幅過長,可看此篇記錄文章
總結
以上是生活随笔為你收集整理的H264视频编码原理基础分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [html] 如何在不同的端口间共享c
- 下一篇: 需求分析报告和需求规格说明书有什么区别?