1. 程式人生 > >iOS音視訊—FFmepg基礎知識:命令列工具使用&封裝格式&視訊編碼音訊編碼資料瞭解&視訊畫素音訊取樣資料格式

iOS音視訊—FFmepg基礎知識:命令列工具使用&封裝格式&視訊編碼音訊編碼資料瞭解&視訊畫素音訊取樣資料格式

iOS音視訊相關目錄


FFmepg基礎知識

封裝格式

1、封裝格式:mp4、mov、flv、wmv等等…
2、作用:視訊流+音訊流按照格式進行儲存在一個檔案中
3、MPEG2-TS格式:傳輸流,又稱TS、TP、MPEG-TS或M2T,用於音效、影象與資料的通訊協議。屬於視訊壓縮資料格式,特點:資料排版,不包含標頭檔案,資料大小固定(188byte)的TS-Packet.

在這裡插入圖片描述

4、FLV格式:FLASH VIDEO簡稱

  • 特點是:檔案極小,載入速度極快,使得網路觀看視訊檔案成為可能,有效解決了視訊檔案匯入Flash後,使匯出的SWF檔案體積龐大不能在網路上很好的使用等問題。
  • 檔案結構:FLV是一個二進位制檔案,由檔案頭和很多tag組成,tag又可以分為三類:audio,video,script,分別代表音訊流,視訊流,指令碼流。
    FLV檔案=FLV標頭檔案+tag1+tag內容1+tag2+tag內容2+…+…+tagN+tag內容N。
  • FLV標頭檔案:(9位元組)
    1-3: 前3個位元組是檔案格式標識(FLV 0x46 0x4C 0x56).
    4-4: 第4個位元組是版本(0x01)
    5-5: 第5個位元組的前5個bit是保留的必須是0.
    6-9: 第6-9的四個位元組還是保留的.其資料為 00000009 .
    整個檔案頭的長度,一般是9(3+1+1+4)

視訊編碼資料瞭解

1、視訊編碼的作用:將視訊畫素資料(YUV、RGB)進行壓縮,壓縮成為視訊碼流,從而降低視訊資料量(減小記憶體的佔用)。
2、視訊編碼格式有哪些:

在這裡插入圖片描述

3、H.264視訊壓縮資料格式:演算法複雜->佔用記憶體少 (例如:幀間預測、幀內預測…)->提高壓縮效能

音訊編碼資料瞭解

1、音訊編碼作用:將音訊取樣資料(YUV、RGB)進行壓縮,壓縮成為音訊碼流,從而降低音訊資料量(減小記憶體的佔用)。
2、音訊編碼格式有哪些:
在這裡插入圖片描述
3、AAC格式:高階音訊編碼,基於MPEG-2的音訊編碼技術。

優點:相對於mp3,AAC格式的音質更佳,檔案更小。
不足:AAC屬於有失真壓縮的格式,與時下流行的APE、FLAC等無損格式相比音質存在“本質上”的差距。加之,傳輸速度更快的USB3.0和16G以上大容量MP3正在加速普及,也使得AAC頭上“小巧”的光環不復存在
特點:
①提升的壓縮率:可以以更小的檔案大小獲得更高的音質;
②支援多聲道:可提供最多48個全音域聲道;
③更高的解析度:最高支援96KHz的取樣頻率;
④提升的解碼效率:解碼播放所佔的資源更少;

視訊畫素資料格式

1、作用:儲存了螢幕上面每一個畫素點的值
2、視訊畫素資料格式種類:常見格式包含:RGB24、RGB32、YUV420P、YUV422P、YUV444P等,一般最常見:YUV420P
3、視訊畫素檔案大小計算
例如:RGB24高清視訊體積(1個小時時長)
體積:3600 (秒) * 25 (幀率)* 1920 * 1080 (螢幕大小) * 3(3位元組 = 8位 * 3(RGB)=24位) = 559GB(非常大)
假設:幀率為25HZ,取樣精度8bit,3位元組
4、YUV播放器:注意右邊,將U和V去掉後變為黑白視訊
在這裡插入圖片描述
人類:對色度不敏感,對亮度敏感。Y表示亮度,UV表示色度

將Y去掉
在這裡插入圖片描述

音訊取樣資料格式

1、音訊取樣資料作用:儲存了音訊中的每一個取樣點值
2、音訊取樣資料檔案大小計算
例如:1分鐘PCM格式歌曲
體積:60 (時間)* 44100(取樣率,人的耳朵能夠分辨的聲音,一般情況下都是這個取樣率) * 2(雙聲道) * 2(取樣精度,16位) =11MB
3、音訊取樣資料檢視工具:Audition

在這裡插入圖片描述

4、PCM格式
儲存順序:
在這裡插入圖片描述

命令列工具使用

FFmpge應用

提供了一套比較完整程式碼->開源免費
核心架構設計思想:(核心+外掛)的設計

重要命令:
需要執行指令碼如下圖,可以去官網直接下載參考連結,也可以參考我的GitHub執行檔案GitHub參考
在這裡插入圖片描述

  • ffmpeg.exe(視訊壓縮->轉碼來完成)
    作用:用於對視訊進行轉碼操作
    例如:將mp4->mov,mov->mp4,wmv-mp4等
    命令格式:ffmpeg -i (指定輸入檔案路徑) -b:v 輸出視訊位元速率 輸出檔案路徑
    測試執行:將test.avi -> test.mp4

    在這裡插入圖片描述

注意:如果要改變音訊或者視訊位元速率,那麼相對應的視訊和音訊位元速率都要做出改變,不然無法對應
比如:原始視訊 視訊位元速率 468 音訊位元速率 128
改變視訊 視訊位元速率 234 音訊位元速率 64

cd /Users/mac/Desktop/GitHub/iOS_AudioVideoProcessing/ffmpeg-test/ffmpeg-20181114-759589b-macos64-static/bin
./ffmpeg -i test.avi -b:v 234k -b:a 64k test.mp4

視訊擷取
注意時間格式

./ffmpeg -i test.mp4-ss 00:00:05 -t 00:00:10 test.mp4
  • ffplay.exe

作用:播放視訊
格式: ffplay {檔案路徑}
例如:./ffplay test.avi

在這裡插入圖片描述

其他案例:視訊,轉為高質量GIF動圖

命令:./ffmpeg -ss 00:00:03 -t 3 -i test.avi -r "15" dongtu.gif

解釋:
1、./ffmpeg執行你目錄下的程式指令碼
2、-s 00:00:03 表示從第03秒開始製作gif,支援小數點,如果不加此命令,則從0秒開始
3、-t 3 表示把持續3秒的視訊轉換為gif,持續時間越長,gif檔案格式越大,如果不加此命令,則把整個視訊轉換為GIF
4、-i 表示invert ,意為轉換
5、test.avi 就是你需要轉換的視訊,名稱最好不要用中文,不要留空格,支援多種視訊格式
6、-s 640×360 GIF解析度,如果不加此命令,解析度不變。
7、-r "15"表示幀率,網上下載的視訊幀率通常為24,設為15效果挺好了,幀率越高,體積越大,不加此命令,幀率保持不變
8、dongtu.gif輸出檔案