首先感谢 :dadiyang 找了很久才找到能够兼容Linux/Windows的amr格式转mp3php
本文连接:http://www.javashuo.com/article/p-mbaybskh-cw.htmljava
直接上代码linux
1.首先引入maven依赖(使用maven这点我很喜欢)git
<dependency> <groupId>com.github.dadiyang</groupId> <artifactId>jave</artifactId> <version>1.0.4</version> </dependency>
2.调用 AudioUtils.amrToMp3 方法github
public void amrToMp3() { File source = new File("target/test-classes/material/testAudio.amr"); File target = new File("testAudio.mp3"); it.sauronsoftware.jave.AudioUtils.amrToMp3(source, target); }
结束:三行代码搞定格式转换微信
探索过程
最近接到基于微信公众号开发的需求,在处理微信消息的时候,发现语音类型的消息微信推送过来的是 amr 格式的文件,而在网页 HTML5的audio标签不支持amr格式,非常麻烦。app
因而处处查资料,发现了 JAVE 这个项目,它封装了 ffmpeg 的命令,让开发者能够经过 Java 转换文件格式。maven
不幸的是,这个项目可谓年久失修,存在如下几个问题单元测试
JAVE 项目的问题
- 项目老旧没再维护。官网最近版本是2009年发布的,其依赖的ffmpeg早已过期,不少状况下用不了。
- 转码一直报异常 EncoderException: Stream mapping
- 没有发布maven仓库,并且 JAVE 自己也不是一个maven项目
- 不支持Mac OS
解决
本项目为解决上述问题,根据网上的资料进行整理和修改,我建立了一个 JAVE开源项目 而且发布到 maven中央仓库,让整个解决方案变得更加简单。测试
项目特色
- 这是一个maven项目,并且已发布到中央仓库。
- 项目依赖的 ffmpeg 可执行文件通过验证可使用(单元测试中提供了一个简单的检验方法)
- 解决了amr转mp3出现的 EncoderException: Stream mapping
- 支持 Linux/Windows/Mac 平台
JAVE原理
- 初始化时判断当前运行环境,将bin目录中对应的 ffmpeg 可执行文件拷贝到临时目录中
- 根据文件类型及配置经过 Runtime.getRuntime().exec(cmd) 执行 ffmpeg 对应的转码命令
自定义 ffmpeg 路径
若是程序没法经过拷贝资源文件的方式获取到 ffmpeg 的可执行文件或者内置的 ffmpeg 不支持你所使用的操做系统
你能够经过环境变量或者在 java 中设置 System.setProperty("ffmpeg.home", "ffmpeg可执行文件所在的目录") 的方式指定你的系统中安装的可用的 ffmpeg 文件的目录,如 System.setProperty("ffmpeg.home", "/usr/local/bin/")
项目GitHub地址
https://github.com/dadiyang/jave
参考
JAVE官网:http://www.sauronsoftware.it/projects/jave/index.php
《解決linux AMR轉MP3出現轉碼成功卻無法播放的問題》:
https://hk.saowen.com/a/2ec2a73ec73091967c3ebdb5697832006cb255a7183377b6e8fae1c13f5e54bc
xiaoymin: https://github.com/xiaoymin/jave