『壹』 【FFmpeg實戰】視頻壓縮標准之 H.261/H.262/H.263/H.264/H.265
H.261,1990年由國際電信聯盟電信標准化部門(ITU-T)制定的視頻編碼標准,是首個實用的數字視頻編碼標准。H.261的成功設計成為後續視頻編碼國際標準的基礎,包括MPEG-1、MPEG-2/H.262、H.263,乃至H.264。
H.262,1994年完成,與ISO/IEC的MPEG-2視頻標准一致。H.262與ISO/IEC組織聯合制定,分別成為兩個組織的標准。H.262廣泛應用於DVD技術。
H.263,1995年ITU-T制定,用於低比特率壓縮格式,性能顯著提高。H.263有三個版本:第一版1995年完成,第二版1998年增加了新功能,第三版2000年完成。H.263主要應用於互聯網應用、多媒體消息和視頻會議。
H.264,2001年ITU-T和ISO聯合制定,實現高壓縮比、高圖像質量和良好網路適應性。成為高精度視頻錄制、壓縮和發布的最常用格式之一。廣泛應用於網路流媒體、高清電視等領域,相較於H.263,H.264的壓縮效率更高。
H.265,被視為H.264/MPEG-4 AVC的繼任者。2004年開始制定,2013年成為國際電信聯盟正式標准。H.265能提供H.264兩倍的壓縮率,支持4K甚至8K清晰度,但使用成本較高。
總結,H.261至H.265的效率依次提升,H.261和H.263被認為過時,H.264是當前最廣泛使用的格式,而H.265使用成本相對較高。
原文鏈接:juejin.cn/post/69960958...
音視頻開發視頻教程:ke.qq.com/course/320213...
音視頻開發學習資料、教學視頻,免費分享有需要的可以自行添加學習交流群:739729163 領取
『貳』 ffmpeg壓縮視頻教程-視頻如何壓縮不會損壞畫質
如何在linux環境下使用ffmpeg壓縮視屏格式轉換(將轉換成)C代碼
#ffmpeg-i
-i表示輸入文件
:現在有個,有個音頻3,將其合並成
兩個命令(是中間文件,用完可刪)
C代碼
#ffmpeg-i-vcodec-an
#ffmpeg-i-i3-vcodec-acodec
-i表示輸入文件
-vcodec表示forcevideocodec(『』tostream)這個不知怎麼譯,估計是直接
-acodec這個說的應該是音頻了跟上面一樣
-an:表示disableaudio估計是audiono之類的縮寫,表示去掉原有的音頻
怎麼壓縮視頻且不破壞解析度?可以使用
愛剪輯
軟體來將視頻文件壓縮且不破壞解析度,步驟如下:
需要工具:電腦、愛剪輯軟體
一、首先找到需要壓縮的視頻,並將其拖到桌面上方便查找,此時視頻大小為66.6M。
二、然後打開「愛剪輯」視頻編輯軟體(沒有可搜索下載),安裝完成滑鼠左鍵雙擊軟體。
三、雙擊滑鼠左鍵進入軟體界面,這個時候點擊「添加視頻」,將要壓縮的視頻添加進來。
四、由於之前已經將文件放於桌面上,這時候直接從桌面添加視頻即可(滑鼠左鍵雙擊打開)。
五、添加視頻進入後,會彈出窗口有視頻的大致參數:視頻時間、格式等,這里直接確定。
六、確定後,在界面右方可以看到有「導出視頻」按鈕,直接左鍵單擊。
七、彈出窗口,可以設置需要導出的
視頻格式
、大小、名稱等,即選擇合適的參數來導出視頻。
八、可以看到,視頻由原來的66.6M縮減為23.8M了。
視頻如何壓縮不會損壞畫質?不能完全無損,完全無損的說法不是打廣告就是騙人的,我們都知道壓縮視頻獲取壓縮文件,是對代碼優化縮小,或多或少會影響視頻的清晰度(畫質)。減少對視頻畫質的影響,在壓縮時我們將解析度相應的在原視頻解析度上上調一點就相當於告訴壓縮工具,要保存設置的解析度來壓縮視頻,視頻壓縮之後的畫質與原視頻文件相差不大。
1、打開工具時雙擊工具,點擊打開在頁面上會出現三個功能選項。
2、點擊選擇「視頻壓縮」我們點擊到視頻壓縮界面在這里添加我們要壓縮的文件,添加一個短視頻到頁面中。
3、由於視頻的添加頁面山多個會出現辨識度的值,點擊這個方框我們自由調整解析度。
4、壓縮點擊頁面右邊的按鈕「開始壓縮」,這個鍵點擊之後就會壓縮,視頻上回出現壓縮流程條。
5、壓縮流程條顯示完成代表視頻文件已經壓縮,視頻壓縮的越小對視頻的影響相對較大,在視頻壓縮上我們通常都是普通壓縮即可,
這樣保存視頻的狀態是原格式不用解壓可以打開使用;
對視頻的壓縮在添加是我們也可以選擇多個視頻同時執行這樣的操作,當然,在設置解析度是可以分開設置
『叄』 ffmpeg視頻壓縮踩坑總結
在進行ffmpeg視頻壓縮時,可能面臨一些挑戰。使用ffmpeg將視頻上傳至阿里雲OSS,並嘗試將其壓縮為壓縮包格式,然而,伺服器需要對上傳的壓縮包進行解壓,這一過程會耗費資源,影響用戶體驗。因此,直接使用壓縮包上傳的方案不可行。
移動設備常用的視頻格式包括mp4和mov。為了減小視頻體積,通常會考慮轉換成其他格式。ffmpeg是一個強大的C/C++語言編寫的視頻處理庫,可以實現這一目的。雖然它不是JavaScript語言的實現,但其功能在瀏覽器環境中通過WebAssembly技術得以運行。
ffmpeg壓縮視頻的代碼實現相對簡單,僅需幾行代碼即可完成。然而,在實際應用中,可能會遇到運行錯誤,例如在chrome92版本中,SharedArrayBuffer的使用受到限制。解決這一問題的方法包括降級使用ArrayBuffer或調整服務端響應的COOP和COEP狀況。這些方法可能會對功能產生影響或影響跨域資源的載入。
總結來說,雖然ffmpeg提供了強大的視頻處理功能,但在某些場景下,如用戶上傳視頻時,其壓縮時間較長且可能影響到跨域資源的載入,因此可能不適合直接用於此場景。對於ffmpeg轉碼壓縮視頻的具體實現細節和代碼,可以參考其GitHub倉庫或相關教程。
『肆』 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解碼流程: