linux下的ffmpeg默认情况下是不支持amr格式解码的,因此考虑手动编译ffmpeg源代码增加解码器以便支持amr文件格式的解码。
系统环境:Suse 64bit OS
前期准备:
1、 下载ffmpeg源代码:http://ffmpeg.org/download.html,这里选择版本为0.11.1
2、 下载OpenCORE AMR:http://sourceforge.net/projects/opencore-amr/,这里选择的版本为0.1.3。
并将下载的文件存放与/home/ffmpeg目录下,以root用户登录系统。
具体步骤:
1、 编译安装opencore-amr,这里需要注意的是在执行configure命令的时候要添加--enable-shared=no --enable-static=yes参数,其主要作用是禁止生产动态链接库、允许生产静态库。
chmod 755 opencore-amr-0.1.3.tar.gz tar -xzvf opencore-amr-0.1.3.tar.gz cd opencore-amr-0.1.3 ./configure --enable-shared=no --enable-static=yes make make install |
2、 编译安装ffmpeg,注意configure命令后面所要添加的参数,可以通过执行configure --help命令查看后面所允许带的参数
chomd 755 ffmpeg-0.11.1.tar.gz tar -xzvf ffmepg-0.11.1.tar.gz cd ffempg ./configure --enable-gpl --enable-version3 --enable-nonfree --disable-ffplay --disable-ffprobe --disable-ffserver --enable-libopencore-amrnb --enable-libopencore-amrwb --prefix=/home/ffmpeg/target make make install |
以上命令成功执行后将会在/home/ffmpeg/target目录下的bin目录得到ffmpeg文件,该文件已经包含amr解码器
3、 测试:
chmod 755 ffmpeg ./ffmpeg -I PA003.wav -ar 8000 -ab 12.2k -ac 1 target.amr |
4、 注意事项:
a) 以上方式都是通过静态库的形式编译,采用静态库的形式编译的好处在于:编译后的可执行文件ffmpeg可以不依赖于amr解码器,简单地说,可执行文件已经将amr解码器包含在内了。
b) ffmpeg在编译时候会优先查找amr解码器的动态链接库,如果没有找到,则查找amr解码器的静态库。在第一步中如果没有禁止amr生成动态链接库,则ffmpeg将采用amr的动态链接库进行编译,其缺点是,编译后的可执行文件ffmpeg将依赖于amr的动态链接库,如果系统的动态链接库搜索路径LD_LIBRARY_PATH不包含amr动态链接库所在路径,则ffmpeg将会报错,无法正常工作。
c) amr编译安装时不建议添加prefix=XXX参数(./configure)修改amr安装路径,这样ffmpeg在编译安装时将出现找不到amr解码器的情况。