开发者社区> java牛> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

linux下使用ffmpeg将amr转成mp3

简介: 说明:AMR格式是智能手机上的常用音频文件格式,比MP3格式的压缩比大。同样时长的AMR文件大概是MP3的十分之一,所以在移动互联项目中应用比较广泛。但目前AMR格式在个人电脑上应用较少,所以目前大部门播放器都不支持AMR,为了解决这个问题我们打算在服务器端将AMR转成MP3,以便在个人电脑上通过浏览器的方式进行播放。
+关注继续查看

说明:
AMR格式是智能手机上的常用音频文件格式,比MP3格式的压缩比大。同样时长的AMR文件大概是MP3的十分之一,所以在移动互联项目中应用比较广泛。但目前AMR格式在个人电脑上应用较少,所以目前大部门播放器都不支持AMR,为了解决这个问题我们打算在服务器端将AMR转成MP3,以便在个人电脑上通过浏览器的方式进行播放。最近公司一款基于移动互联网的产品有个短暂的录音(留言)功能,因为录音需要传输到服务器上,所以为了用户体验及节省用户流量,我们采用了AMR的语音格式。

目前并没有找到合适的支持AMR转MP3的java的开发包,服务器环境为CentOS 6.2,所以我们采用了ffmpeg。
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。其官方网址为:http://www.ffmpeg.org/

实现:
1. 首先安装系统基础环境

# yum install -y automake autoconf libtool gcc gcc-c++  //RHEL & CentOS 系列 # apt-get install automake autoconf libtool gcc gcc-c++  //Debian & Ubuntu 系列

 
2. 编译所需源码包

yasmhttp://yasm.tortall.net/Download.html(汇编器,新版本的ffmpeg增加了汇编代码) 
lamehttp://lame.sourceforge.net/download.php(Mp3音频解码) 
OpenCore AMRhttp://sourceforge.net/projects/opencore-amr 
AmrNBhttp://www.penguin.cz/~utx/amr 
AmrWBhttp://www.penguin.cz/~utx/amr 
FFMpeghttp://ffmpeg.org/download.html  分别解压缩并编译上述源码包 
# tar xzvf *.tar.gz # tar xjvf *.tar.bz2  解压后直接使用 
# ./configure # make # make install 命令进行编译安装。
 编译FFMpef的时候稍微特殊一点: 
# ./configure --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-shared # make # make install 
# ldconfig  最后写入config后,终端运行ffmpeg命令,出现success和已安装的扩展,则运行成功。

 
3.使用方法

# ffmpeg -i 1.mp3 -ac 1 -ar 8000 1.amr  //MP3转换AMR 
# ffmpeg -i 1.amr 1.mp3                 //AMR转换MP3

 
附录:
附录1. ffmpeg默认安装目录为“/usr/local/lib”,有些64位系统下软件目录则为“/usr/lib64”,编译过程中可能会出现
“ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory”等类似的错误,解决办法是建立软链接:
# ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0

附录2. 如果出现以下提示:ffmpeg: error while loading shared libraries: libavdevice.so.54: cannot open shared object file: No such file or directory
可以通过如下方式查看ffmpeg的动态链接库哪些没有找到:

# ldd `which ffmpeg`         
libavdevice.so.54 => not found         
libavfilter.so.3 => not found         
libavformat.so.54 => not found         
libavcodec.so.54 => not found         
libswresample.so.0 => not found         
libswscale.so.2 => not found         
libavutil.so.51 => not found         
libm.so.6 => /lib64/libm.so.6 (0x00002ab7c0eb6000)         
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ab7c100b000)         
libc.so.6 => /lib64/libc.so.6 (0x00002ab7c1125000) 
/lib64/ld-linux-x86-64.so.2 (0x00002ab7c0d9a000) 
如果类似于上面的输出内容,查找以上类库: 
# find /usr/local/lib/ | grep -E "libavdevice.so.54|libavfilter.so.3|libavcodec.so.54" 
/usr/local/lib/libavfilter.so.3.17.100 /usr/local/lib/libavcodec.so.54.59.100 
/usr/local/lib/libavdevice.so.54 /usr/local/lib/libavcodec.so.54 
/usr/local/lib/libavfilter.so.3 /usr/local/lib/libavdevice.so.54.2.101 会发现全部在/usr/local/lib/下 查看链接库配置文件 
# more  /etc/ld.so.conf | grep /usr/local/lib  
如果不包含的话,需要编辑此文添加: /usr/local/lib /usr/local/lib64  
运行配置命令 # ldconfig

转自:http://linux.it.net.cn/e/Linuxit/2014/0828/3980.html
若转载请注明出处!若有疑问,请回复交流!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
linux下挂载U盘【转】
转自:http://www.cnblogs.com/yeahgis/archive/2012/04/05/2432779.html 一.Linux挂载U盘:1、插入u盘到计算机,如果目前只插入了一个u盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件名称为:sda1。
851 0
linux C判断文件是否存在【转】
转自:http://blog.csdn.net/kingjo002/article/details/8442146 一、access函数 功能描述: 检查调用进程是否可以对指定的文件执行某种操作。
592 0
linux dpm机制分析(下)【转】
转自:http://blog.csdn.net/lixiaojie1012/article/details/23707901 1      设备注册到dpm_list路径 (Platform_device->device->device_driver指向platform_driver->driver)   2      低功耗接口 dpm_suspend_start():调用注册到dpm_list的设备的回调函数,执行睡眠前的准备和保存工作; dpm_suspend_end():执行suspend_late和suspend_noirq设备的回调函数,进行睡眠前的准备工作。
618 0
Linux下yum命令详解
主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题 一、yum list|more 列出所有包文件,可搭配grep查询软件包,如yum list |grep kernel 二、yum info xxx 显示包xxx详细信息,即使xxx没有安装 三、yum update kernel 用yum升级内核 四、yum updat
1461 0
在linux下实现用ffmpeg把YUV420帧保存成图片
在网上搜了很久相关的问题,但是好像没有一个在linux下跑得比较完整的例子,不过经过自己一番搜索和总结,终于做出来了,哈哈,看下面的代码吧。 这个例子可以保存成bmp或者jpeg格式的图片。 下面的结构是保存bmp图片是用到的结构: [cpp] view plaincopy ...
1006 0
+关注
java牛
善于分享,乐于分享
281
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载