背景知識
FFMPEG的視音頻編解碼功能確實太強大了,幾乎囊括了現存所有的視音頻編碼標準,因此只要做視音頻開發,幾乎離不開它
常見工具
查看媒體信息的工具:MediaInfo
二進制查看信息:UItraEdit
視頻單項信息
封裝格式信息工具->Elecard Format Analyzer
視頻編碼信息工具->Elecard Stream Eye
視頻像素信息工具->YUVPlayer
音頻采樣數據工具->Adobe Audition
基本概念
兩種模式播放器
可視化界面播放器:騰訊視頻、愛奇藝視頻、QQ影音、暴風影音、快播、優酷等等…
非可視化界面播放器(命令操作播放器):
FFmpeg->ffplay(命令)播放器(內置播放器)
vlc播放器、mplayer播放器
封裝格式
通??吹揭曨l格式:mp4、mov、flv、wmv、avi、rmvb、mkv…何為封裝格式?就是把視頻數據和音頻數據打包成一個文件的規范。
MPEG2-TS格式
視頻壓縮數據格式:MPEG2-TS
特定:數據排版,不包含頭文件,數據大小固定(188byte)的TS-Packet
FLV格式
優勢:由于它形成的文件極小、加載速度極快,使得網絡觀看視頻文件成為可能,它的出現有效地解決了視頻文件導入Flash后,使導出的SWF文件體積龐大,不能在網絡上很好的使用等問題。
文件結構:FLV是一個二進制文件,由文件頭(FLV header)和很多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)
視頻編碼
將視頻像素數據(YUV、RGB)進行壓縮成為視頻碼流,從而降低視頻數據量(減小內存暫用),H.264最常用。
音頻編碼
將音頻采樣數據(PCM格式)進行壓縮成為音頻碼流,從而降低音頻數據量,AAC、MP3等等…(減小內存暫用)。
AAC格式
AAC,全稱Advanced Audio Coding,是一種專為聲音數據設計的文件壓縮格式。與MP3不同,它采用了全新的算法進行編碼,更加高效,具有更高的“性價比”。利用AAC格式,可使人感覺聲音質量沒有明顯降低的前提下,更加小巧。蘋果,諾基亞手機支持AAC格式的音頻文件。
優點:相對于mp3,AAC格式的音質更佳,文件更小。
不足:AAC屬于有損壓縮的格式,與時下流行的APE、FLAC等無損格式相比音質存在“本質上”的差距。加之,傳輸速度更快的USB3.0和16G以上大容量MP3正在加速普及,也使得AAC頭上“小巧”的光環不復存在。
①提升的壓縮率:可以以更小的文件大小獲得更高的音質;
②支持多聲道:可提供最多48個全音域聲道;
③更高的解析度:最高支持96KHz的采樣頻率;
④提升的解碼效率:解碼播放所占的資源更少;
視頻像素數據
保存了屏幕上面每一個像素點的值,常見格式:RGB24、RGB32、YUV420P、YUV422P、YUV444P等等…一般最常見:YUV420P
視頻像素數據文件大小計算?
例如:RGB24高清視頻體積?(1個小時時長)
體積:3600 * 25 * 1920 * 1080 * 3 = 559GB(非常大 假設:幀率25HZ,采樣精度8bit,每字節8位,24位3個字節)
YUV播放器,人類:對色度不敏感,對亮度敏感
Y表示:亮度,UV表示:色度
音頻采樣數據
保存了音頻中的每一個采樣點值
音頻采樣數據文件大小計算
例如:1分鐘PCM格式歌曲
體積:60 * 44100 * 2 * 2 = 11MB
分析:60表示時間,44100表示采樣率(一般情況下,都是這個采樣率,人的耳朵能夠分辨的聲音),2表示聲道數量,2表示采樣精度16位 = 2字節
FFmepg應用
提供了一套比較完整代碼->開源免費,核心架構設計思想:(核心 + 插件)設計
ffmpeg.exe(視頻壓縮->轉碼來完成)
作用:用于對視頻進行轉碼
將mp4->mov,mov->mp4,wmv->mp4等等…
命令格式:ffmpeg -i {指定輸入文件路徑} -b:v {輸出視頻碼率} {輸出文件路徑}
測試運行:將Test.mov->Test.mp4
ffplay.exe
作用:播放視頻
格式:ffplay {文件路徑}
例如:./ffplay Test.mov
案例:視頻,轉為高質量 GIF 動圖?
命令:./ffmpeg -ss 00:00:03 -t 3 -i Test.mov -s 640x360 -r “15” dongtu.gif
解釋:
1、ffmpeg 是你剛才安裝的程序;
2、-ss 00:00:03 表示從第 00 分鐘 03 秒開始制作 GIF,如果你想從第 9 秒開始,則輸入 -ss 00:00:09,或者 -ss 9,支持小數點,所以也可以輸入 -ss 00:00:11.3,或者 -ss 34.6 之類的,如果不加該命令,則從 0 秒開始制作;
3、-t 3 表示把持續 3 秒的視頻轉換為 GIF,你可以把它改為其他數字,例如 1.5,7 等等,時間越長,GIF 體積越大,如果不加該命令,則把整個視頻轉為 GIF;
4、-i 表示 invert 的意思吧,轉換;
5、Test.mov 就是你要轉換的視頻,名稱最好不要有中文,不要留空格,支持多種視頻格式;
6、-s 640x360 是 GIF 的分辨率,視頻分辨率可能是 1080p,但你制作的 GIF 可以轉為 720p 等,允許自定義,分辨率越高體積越大,如果不加該命令,則保持分辨率不變;
7、-r “15” 表示幀率,網上下載的視頻幀率通常為 24,設為 15 效果挺好了,幀率越高體積越大,如果不加該命令,則保持幀率不變;
8、dongtu.gif:就是你要輸出的文件,你也可以把它命名為 hello.gif 等等。