从视频文件提取音频并存储为MP3格式文件
在linux世界里,进行视频格式转化的软件有很多,其中大名鼎鼎的ffmpeg和mplayer下的mencoder。本文主要介绍如何从视频文件中提起音频,同时保存成mp3格式的文件。
格式转换其实就是经过解码和重新编码两个过程,如果系统不存在对应的解、编码器,就需要额外安装。ffmpeg自带了MP2格式的编码器,对于MP2格式的音频,普通电脑上的播放器似乎都能支持,但大部分手机的播放器不支持,所以为了通用,还是生成MP3格式的音频。MP3编码器可以使用lame。
在centos和ubuntu下,ffmpeg似乎不在标准的源中,不能使用yum或apt-get来安装,其实源码安装也是很容易的,这里就介绍的就是通过源码安装,安装前确保机器上有gcc,如果没有安装,先通过yum安装。
安装 lame
下载地址:http://sourceforge.net/projects/lame/files/lame/ 使用wget下载到本机 wget http://nchc.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz 解压文件: tar -xvf lame-3.99.5.tar.gz 编译安装: cd lame-3.99.5 ./configure && make && make install
检查本机是否有yasm(不知道是干什么用的),在ffmpeg执行configure时会用到它,不过可以disabled掉,也可以装上它
安装yasm:
下载地址:http://www.tortall.net/projects/yasm/releases/ 下载文件: wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz 解压并编译安装: tar -xvf yasm-1.2.0.tar.gz cd yasm-1.2.0 ./configure && make && make install
安装ffmpeg
下载地址:http://www.ffmpeg.org/download.html 下载文件: wget http://www.ffmpeg.org/releases/ffmpeg-0.10.2.tar.bz2 也可以使用svn、git下载最新版本 解压文件: tar -xvf ffmpeg-0.10.2.tar.bz2 编译安装: cd ffmpeg-0.10.2 ./configure --prefix=/usr/local/ffmpeg --enable-libmp3lame make && make install --enable-libmp3lame 是让ffmpeg在编码时可以使用MP3编码器
至此,软件都安装好了。注意:如果使用ffmpeg出现如下错误信息:
ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory
其原因是lame编译好的库文件安装在/usr/local/lib/下,而ffmpeg是去/usr/lib/下找,解决的办法是做一个软链接即可:
ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0
假设视频文件名称为01.flv,下面详细介绍如何从里面提取去音频。
通过ffmpeg来查看视频文件信息:
ffmpeg -i 01.flv 输出大致为: Duration: 00:01:10.21, start: 0.000000, bitrate: 284 kb/s Stream #0.0: Video: h264, yuv420p, 512x288 [PAR 513:512 DAR 57:32], 252 kb/s, 15 tbr, 1k tbn, 30 tbc Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 32 kb/s
可以看到音频编码用的acc,所以需要看看ffmpeg是否支持acc的解码,命令为:
ffmpeg -codecs | grep aac 如果看到下面类似输出,表示支持 DEA aac Advanced Audio Coding
DEA中的D表示decoder,E表示encoder,A表示Audio Codec
由于要转换成MP3格式的音频,所以就需要查看是否存在MP3编码器,命令为:
ffmpeg -codecs | grep mp 如果输出中存在如下信息即表示支持 EA libmp3lame libmp3lame MP3 (MPEG audio layer 3) DEA mp2 MP2 (MPEG audio layer 2)
注意:如果没有看到libmp3lame,就不能进行MP3格式的编码,但是可以使用MP2格式的编码,一个很奇怪的问题,我在一台机器上编译ffmpeg时候使用enable lame,安装ffmpeg还是不支持MP3编码,另外一台机器上就是好的。不过可以通过lame来把MP2格式的音频转换为MP3格式,所以就算ffmpeg在编译时候没有指定使用MP3编码器,也一样可以得到MP3格式的音频文件。
有了上面的知识,现在就来说怎么从视频中获取音频
1、先获取MP2编码的音频在使用lame来重新编码 ffmpeg -i 01.flv -f mp2 -vn t.mp3 lame t.mp3 01.mp3 -i 输入文件, -f 输出使用的编码格式 -vn 禁止视频输出 t.mp3 输出的文件名 使用lame命令还可以在MP3文件中增加一些额外信息,更多信息可以使用 lame --help id3 查看 2、一步到位直接使用MP3编码器 ffmpeg -i 01.flv -f mp3 -vn 01.mp3 或 ffmpeg -i 01.flv -acodec libmp3lame -vn 01.mp3
另外使用mplayer和mencoder获取音频命令为:
mencoder 01.flv -oac mp3lame -ovc lavc -o t.avi mplayer -dumpaudio -dumpfile 01.mp3 t.avi
现在很多视频网站上的一个长视频都是分成很多小段的,如何把一个长视频音频提取到一个音频文件中,在linux中,借用cat命令就很容易实现。假设视频有三段,先使用上面提到的命令获取三个独立的音频文件01.mp3、02.mp3和03.mp3,合并的命令为:
cat 01.mp3 02.mp3 03.mp3 > comp.mp3