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輸出文件

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