ffmpeg使用转码学习
ffmpeg在官網(wǎng)上描述自身:是一個(gè)對視頻和音頻進(jìn)行記錄,轉(zhuǎn)換,流化的完整的跨平臺解決方案。事實(shí)上,現(xiàn)在有很多工具都是基于ffmpeg來進(jìn)行視頻音頻的處理工具的。比如鼎鼎大名的格式工廠,就是使用ffmpeg來作為內(nèi)核的轉(zhuǎn)碼工具。
理解一些音視頻的編碼知識。
我們平時(shí)看的視頻文件格式:mp4/rmvb/mkv/avi其實(shí)是一個(gè)容器。這個(gè)容器中裝的東西分為兩大類:音頻和視頻。對于視頻這部分,它包含的編碼格式有:H264/H265/VP8/VC1等。對于音頻這個(gè)部分,它包含的編碼格式有:AAC/MP3/mid等。所以說,我們平?;\統(tǒng)說的【視頻格式】其實(shí)包含了三個(gè)部分:視頻編碼,音頻編碼,容器格式。這里說的【編碼】其實(shí)包含的是兩層:編碼和解碼。比如視頻編碼,就是將視頻圖像轉(zhuǎn)換成為二進(jìn)制數(shù)據(jù)的過程。視頻解碼就是將二進(jìn)制數(shù)據(jù)轉(zhuǎn)化成圖像的過程。音頻編碼也是一樣的。那么我們看一個(gè)視頻文件的時(shí)候,能同時(shí)看到聲音和圖像,就說明我們至少同時(shí)存在視頻編碼和音頻編碼兩組數(shù)據(jù)。那么這兩組數(shù)據(jù)是按照什么規(guī)則組織起來的呢?這就要看【容器格式】的規(guī)定了。容器里面存放的數(shù)據(jù)可能采用多種不同的編碼方式。比如avi文件存放的通常是xvid或者divx編碼的視頻和mp3編碼的音頻。rmvb 文件里面存放的通常是 RV40 編碼的視頻和 cook 編碼的音頻。mp4 文件里面通常存放的是 H.264 編碼的視頻和 AAC 編碼的音頻。mkv 文件里面存放的則可能包含前面各種。
如果你安裝了ffmpeg,你使用ffmpeg -codecs就可以看到ffmpeg支持的哪些音視頻編碼了(幾乎已經(jīng)囊括了大部分現(xiàn)有編碼了)。截取其中的一部分:
Codecs:?
D..... = Decoding supported (支持解碼)?
.E.... = Encoding supported (支持編碼)?
..V... = Video codec (視頻編碼)?
..A... = Audio codec (音頻編碼)?
..S... = Subtitle codec (字幕編碼)?
...I.. = Intra frame-only codec (幀編解碼)?
....L. = Lossy compression (有損壓縮的編碼)?
.....S = Lossless compression (無損壓縮的編碼)?
-------?
D.V.L. 4xm????????????????? 4X Movie?
D.VI.S 8bps???????????????? QuickTime 8BPS video?
.EVIL. a64_multi??????????? Multicolor charset for Commodore 64 (encoders: a64multi )?
.EVIL. a64_multi5?????????? Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )?
D.V..S aasc???????????????? Autodesk RLE?
DEVIL. amv????????????????? AMV Video?
D.V.L. anm????????????????? Deluxe Paint Animation?
D.V.L. ansi???????????????? ASCII/ANSI art
好了,那我們經(jīng)常說的轉(zhuǎn)碼其實(shí)就是這么個(gè)過程:
原視頻 -- 解碼 -- 像素?cái)?shù)據(jù) -- 編碼 -- 目標(biāo)視頻
原音頻 -- 解碼 -- 音頻數(shù)據(jù) -- 編碼 -- 目標(biāo)音頻
我們使用aac轉(zhuǎn)mp3的例子來看ffmpeg在音頻轉(zhuǎn)碼方面的使用。
aac名字就很高大上,高級音頻編碼,出現(xiàn)于1997年,出現(xiàn)的目的是為了取代MP3格式。相比于MP3格式來說,它的壓縮算法更優(yōu)秀,是一種高壓縮比的編碼。它是蘋果和諾基亞等公司共同開發(fā)的,現(xiàn)在蘋果手機(jī)上的itunes音樂播放器都是支持和使用AAC文件的。
但是,aac格式的音頻文件在html5中不是可以被所有的瀏覽器所支持的。瀏覽器對音頻文件的支持如下:
再回到ffmpeg工具,它的格式是這樣的:
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
所以假設(shè)我有個(gè)aac文件在這個(gè)位置:
/home/web/mycareer/upload/61/1d0452670723c3ba2e1b10d02d789c61.aac
我需要將它轉(zhuǎn)換成mp3文件:
/home/web/mycareer/upload/61/1d0452670723c3ba2e1b10d02d789c61.mp3
音頻的參數(shù)有這么幾個(gè):http://ffmpeg.org/ffmpeg.html#Audio-Options
首先ffmpeg自身有帶aac的解碼器,但是沒有帶mp3的編碼器,需要編譯的時(shí)候帶上--enable-libmp3lame
當(dāng)然這個(gè)需要你先安裝libmp3lame
curl -L -O?http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
make
make install
然后在ffmpeg編譯安裝的時(shí)候帶上:--enable-libmp3lame
然后ffmpeg的命令就是:
ffmpeg -i /home/web/mycareer/upload/61/1d0452670723c3ba2e1b10d02d789c61.aac -acodec libmp3lame? /home/web/mycareer/upload/61/1d0452670723c3ba2e1b10d02d789c61.mp3
記得這里要說明下-acodec libmp3lame
轉(zhuǎn)碼就完成了。
本文轉(zhuǎn)自軒脈刃博客園博客,原文鏈接:http://www.cnblogs.com/yjf512/p/3793536.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的ffmpeg使用转码学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fcpx插件:6个现代全屏标题字幕动画模
- 下一篇: XMind ,印象笔记, Effie 哪