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