一、引言
首先,瞭解下播放視頻的基本流程,如下圖所示:
解封裝:就是將輸入的封裝格式的數據,分離成爲音頻流壓縮編碼數據和視頻流壓縮編碼數據。如上圖,將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裏有更詳細的描述。
參考資料:
[2] 【乾貨】關於軟解(ffmpeg)和硬解(MediaCodec、MediaPlayer)以及底層(OpenMax)的那點事