从视频文件提取音频并存储为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,合并的命令为:

你可能感兴趣的:(C++,ios开发,php)