【視頻編碼】ffmpeg壓縮視頻文件

一、引言

首先,瞭解下播放視頻的基本流程,如下圖所示:

解封裝:就是將輸入的封裝格式的數據,分離成爲音頻流壓縮編碼數據和視頻流壓縮編碼數據。如上圖,將MP4和FLV格式解封裝成視頻數據H264、MPEG2和音頻數據AAC、MP3格式。

解碼:就是將視頻/音頻壓縮編碼數據,解碼成爲非壓縮的視頻/音頻原始數據。如上圖,將視頻數據解碼成YUV格式和音頻數據解碼成PCM格式。

視音頻同步:就是根據解封裝模塊處理過程中獲取到的參數信息,同步解碼出來的視頻和音頻數據,並將視頻音頻數據送至系統的顯卡和聲卡播放出來。

所謂的軟解、硬解也就是在解碼方式上的區別。

我們最最常見的視頻軟解碼開源庫就是ffmpeg。

二、Linux使用ffmpeg修改和壓縮視頻文件格式

這裏的操作系統是 ubuntu 18.04

1.安裝 ffmpeg

 安裝命令:

sudo apt-get install ffmpeg

下面查詢版本的命令可以確認是否安裝成功:

ffmpeg -version

 這樣就已經安裝成功了

2. 使用ffmpeg修改和壓縮視頻文件格式

可以通過下面命令更改和壓縮視頻文件格式

  • 更改視頻文件格式:
ffmpeg -y -i vtest.avi out.mp4 
  • 壓縮視頻文件
ffmpeg -y -i vtest.avi -s 768x576 -vcodec libx264 -preset fast -b 10000 -r 10 out.mp4

命令參數:
-y: 當已存在out.mp4是,不提示是否覆蓋。
-i : “test.avi” 輸入文件名,可以自己修改路徑和名字
-s: 768x576 輸出的分辨率,注意片源一定要是4:3的不然會變形
-vcodec -libx264: 輸出文件使用的編解碼器。
-preset fast: 使用libx264做爲編解碼器時,需要帶上這個參數。
-b: 10000 視頻數據流量,用-b xxx表示使用固定碼率,數字可更改;還可以用動態碼率如:-qscale 4和-qscale 6,4的質量比6高

-b 10000 對於768*576來說,碼率不夠,最後輸出的畫質會很差,如下圖:

-b 80000 則還可以


-acodec: aac 音頻編碼用AAC
-ac 2 聲道數1或2
-ar: 48000 聲音的採樣頻率
-ab: 128 音頻數據流量,一般選擇32、64、96、128#-vol 200 200%的音量,可更改(如果源文件聲音很小,可以提升10到20倍1000%~2000%)
-r: 10 幀數 (一般用25,以實際應用的幀數爲準,例如10、15)
out.mp4: 輸出文件名。
以上參數的使用細節,ffmpeg的help裏有更詳細的描述。
 

參考資料:

[1] Linux 使用ffmpeg修改和壓縮視頻文件格式

[2] 【乾貨】關於軟解(ffmpeg)和硬解(MediaCodec、MediaPlayer)以及底層(OpenMax)的那點事

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章