背景知識(shí)
FFMPEG的視音頻編解碼功能確實(shí)太強(qiáng)大了,幾乎囊括了現(xiàn)存所有的視音頻編碼標(biāo)準(zhǔn),因此只要做視音頻開發(fā),幾乎離不開它
常見工具
查看媒體信息的工具:MediaInfo
二進(jìn)制查看信息:UItraEdit
視頻單項(xiàng)信息
封裝格式信息工具->Elecard Format Analyzer
視頻編碼信息工具->Elecard Stream Eye
視頻像素信息工具->YUVPlayer
音頻采樣數(shù)據(jù)工具->Adobe Audition
基本概念
兩種模式播放器
可視化界面播放器:騰訊視頻、愛奇藝視頻孽锥、QQ影音、暴風(fēng)影音细层、快播惜辑、優(yōu)酷等等…
非可視化界面播放器(命令操作播放器):
FFmpeg->ffplay(命令)播放器(內(nèi)置播放器)
vlc播放器、mplayer播放器
封裝格式
通骋呤辏看到視頻格式:mp4盛撑、mov、flv虚缎、wmv撵彻、avi钓株、rmvb实牡、mkv…何為封裝格式?就是把視頻數(shù)據(jù)和音頻數(shù)據(jù)打包成一個(gè)文件的規(guī)范轴合。
MPEG2-TS格式
視頻壓縮數(shù)據(jù)格式:MPEG2-TS
特定:數(shù)據(jù)排版创坞,不包含頭文件,數(shù)據(jù)大小固定(188byte)的TS-Packet
FLV格式
優(yōu)勢(shì):由于它形成的文件極小受葛、加載速度極快题涨,使得網(wǎng)絡(luò)觀看視頻文件成為可能,它的出現(xiàn)有效地解決了視頻文件導(dǎo)入Flash后总滩,使導(dǎo)出的SWF文件體積龐大纲堵,不能在網(wǎng)絡(luò)上很好的使用等問題。
文件結(jié)構(gòu):FLV是一個(gè)二進(jìn)制文件闰渔,由文件頭(FLV header)和很多tag組成席函。tag又可以分成三類:audio,video,script,分別代表音頻流冈涧,視頻流茂附,腳本流(關(guān)鍵字或者文件信息之類)。
FLV文件=FLV頭文件+ tag1+tag內(nèi)容1 + tag2+tag內(nèi)容2 + ...+... + tagN+tag內(nèi)容N督弓。
FLV頭文件:(9字節(jié))
1-3:前3個(gè)字節(jié)是文件格式標(biāo)識(shí)(FLV 0x46 0x4C 0x56).
4-4:第4個(gè)字節(jié)是版本(0x01)
5-5:第5個(gè)字節(jié)的前5個(gè)bit是保留的必須是0.
6-9: 第6-9的四個(gè)字節(jié)還是保留的.其數(shù)據(jù)為00000009
整個(gè)文件頭的長(zhǎng)度营曼,一般是9(3+1+1+4)
視頻編碼
將視頻像素?cái)?shù)據(jù)(YUV、RGB)進(jìn)行壓縮成為視頻碼流愚隧,從而降低視頻數(shù)據(jù)量(減小內(nèi)存暫用)蒂阱,H.264最常用。
音頻編碼
將音頻采樣數(shù)據(jù)(PCM格式)進(jìn)行壓縮成為音頻碼流,從而降低音頻數(shù)據(jù)量录煤,AAC虱痕、MP3等等…(減小內(nèi)存暫用)。
AAC格式
AAC辐赞,全稱Advanced Audio Coding部翘,是一種專為聲音數(shù)據(jù)設(shè)計(jì)的文件壓縮格式。與MP3不同响委,它采用了全新的算法進(jìn)行編碼新思,更加高效,具有更高的“性價(jià)比”赘风。利用AAC格式夹囚,可使人感覺聲音質(zhì)量沒有明顯降低的前提下,更加小巧邀窃。蘋果荸哟,諾基亞手機(jī)支持AAC格式的音頻文件。
優(yōu)點(diǎn):相對(duì)于mp3瞬捕,AAC格式的音質(zhì)更佳鞍历,文件更小。
不足:AAC屬于有損壓縮的格式肪虎,與時(shí)下流行的APE劣砍、FLAC等無(wú)損格式相比音質(zhì)存在“本質(zhì)上”的差距。加之扇救,傳輸速度更快的USB3.0和16G以上大容量MP3正在加速普及刑枝,也使得AAC頭上“小巧”的光環(huán)不復(fù)存在。
①提升的壓縮率:可以以更小的文件大小獲得更高的音質(zhì)迅腔;
②支持多聲道:可提供最多48個(gè)全音域聲道装畅;
③更高的解析度:最高支持96KHz的采樣頻率;
④提升的解碼效率:解碼播放所占的資源更少沧烈;
視頻像素?cái)?shù)據(jù)
保存了屏幕上面每一個(gè)像素點(diǎn)的值掠兄,常見格式:RGB24、RGB32掺出、YUV420P徽千、YUV422P、YUV444P等等…一般最常見:YUV420P
視頻像素?cái)?shù)據(jù)文件大小計(jì)算汤锨?
例如:RGB24高清視頻體積双抽?(1個(gè)小時(shí)時(shí)長(zhǎng))
體積:3600 * 25 * 1920 * 1080 * 3 = 559GB(非常大 假設(shè):幀率25HZ,采樣精度8bit闲礼,每字節(jié)8位牍汹,24位3個(gè)字節(jié))
YUV播放器铐维,人類:對(duì)色度不敏感,對(duì)亮度敏感
Y表示:亮度慎菲,UV表示:色度
音頻采樣數(shù)據(jù)
保存了音頻中的每一個(gè)采樣點(diǎn)值
音頻采樣數(shù)據(jù)文件大小計(jì)算
例如:1分鐘PCM格式歌曲
體積:60 * 44100 * 2 * 2 = 11MB
分析:60表示時(shí)間嫁蛇,44100表示采樣率(一般情況下,都是這個(gè)采樣率露该,人的耳朵能夠分辨的聲音)睬棚,2表示聲道數(shù)量,2表示采樣精度16位 = 2字節(jié)
FFmepg應(yīng)用
提供了一套比較完整代碼->開源免費(fèi)解幼,核心架構(gòu)設(shè)計(jì)思想:(核心 + 插件)設(shè)計(jì)
ffmpeg.exe(視頻壓縮->轉(zhuǎn)碼來(lái)完成)
作用:用于對(duì)視頻進(jìn)行轉(zhuǎn)碼
將mp4->mov抑党,mov->mp4,wmv->mp4等等…
命令格式:ffmpeg -i {指定輸入文件路徑} -b:v {輸出視頻碼率} {輸出文件路徑}
測(cè)試運(yùn)行:將Test.mov->Test.mp4
ffplay.exe
作用:播放視頻
格式:ffplay {文件路徑}
例如:./ffplay Test.mov
案例:視頻撵摆,轉(zhuǎn)為高質(zhì)量 GIF 動(dòng)圖底靠?
命令:./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,支持小數(shù)點(diǎn)牵素,所以也可以輸入 -ss 00:00:11.3严衬,或者 -ss 34.6 之類的,如果不加該命令笆呆,則從 0 秒開始制作;
3粱挡、-t 3 表示把持續(xù) 3 秒的視頻轉(zhuǎn)換為 GIF赠幕,你可以把它改為其他數(shù)字,例如 1.5询筏,7 等等榕堰,時(shí)間越長(zhǎng),GIF 體積越大嫌套,如果不加該命令逆屡,則把整個(gè)視頻轉(zhuǎn)為 GIF;
4踱讨、-i 表示 invert 的意思吧魏蔗,轉(zhuǎn)換;
5痹筛、Test.mov 就是你要轉(zhuǎn)換的視頻莺治,名稱最好不要有中文廓鞠,不要留空格,支持多種視頻格式谣旁;
6床佳、-s 640x360 是 GIF 的分辨率,視頻分辨率可能是 1080p榄审,但你制作的 GIF 可以轉(zhuǎn)為 720p 等砌们,允許自定義,分辨率越高體積越大搁进,如果不加該命令怨绣,則保持分辨率不變;
7拷获、-r “15” 表示幀率篮撑,網(wǎng)上下載的視頻幀率通常為 24,設(shè)為 15 效果挺好了匆瓜,幀率越高體積越大赢笨,如果不加該命令,則保持幀率不變驮吱;
8茧妒、dongtu.gif:就是你要輸出的文件,你也可以把它命名為 hello.gif 等等左冬。
視音頻編解碼技術(shù)零基礎(chǔ)學(xué)習(xí)方法
FFMPEG視音頻編解碼零基礎(chǔ)學(xué)習(xí)方法