原文:http://linjie.org/2015/08/06/amr%E6%A0%BC%E5%BC%8F%E8%BD%ACmp3%E6%A0%BC%E5%BC%8F-%E5%AE%8C%E7%BE%8E%E8%A7%A3%E5%86%B3Linux%E4%B8%8B%E8%BD%AC%E6%8D%A20K%E9%97%AE%E9%A2%98/html
因项目需求,须要将 amr 格式的文件转成 mp3格式。
网络上提供的思路大可能是使用jave-x-x.jar。
这个包确实有用,由于开发时是在windows环境中,测试转换虽然报了异常:windows
it.sauronsoftware.jave.EncoderException: Duration: N/A, bitrate: N/A
但也确实转换成功了,能够播放。 服务器
但是一旦部署到Linux环境当中,不是转换失败,就是转换的文件为大小 0 k。百思不得其解。网络
通过一些资料和源码跟踪,终于找到了缘由。
jave的能转换的原理其实就是调用外部的二进制可执行文件 ffmpeg
,打开它的jar包就能够发现,它里面内置了:jave原jar包截图
。
因此实际上,jave就是封装了一层对外部ffmpeg
的调用。
而windows上能转换是由于:ffmpeg.exe 这个程序没问题。
而Linux上转换失败也是由于 ffmpeg 这个可能版本太老或依赖库缺失。
起初我觉得是调用外部的ffmpeg,因此从新安装编译了Linux的ffmpeg,然并卵。
因此只能再想其余解决方案。测试
知道缘由以后,解决思路有两种。spa
第二种比较简单,就直接用第二种吧。日志
下载站点:http://ffmpeg.org/download.htmlcode
而后选择一个32位仍是64位:blog
下载以后解压,选择其中的ffmpeg,替换掉。
若是没成功,或者转换失败,看这里。
在操做的时候,为了验证服务器支持这种方式,你能够将下载回来的ffmpeg拷贝到你的服务器上,手动进行转换一次,若是失败,能够留言哦。
能够操做以下:
.it/sauronsoftware/jave
目录,也能够看到这个ffmpeg )接着先给ffmpeg加个执行权限
chmod +x ffmpeg
接着调用 ffmpeg 执行转换下
./ffmpeg -i test.amr test.mp3
而后你会看到一堆的日志,而且可能还有提示,“test.amr: Input/output error”,但不要担忧,先无论,你查看下这个目录下是否多了一个test.mp3 文件。若是有了,恭喜你,转换成功了,尝试播放下MP3
若是不行就到Tomcat下有个temp目录,进入jave 目录,挺多层的,进去看看有没一个ffmpeg文件,删除掉。