微信的amr文件实际为silk文件
参考某大神博客发现可以用通过SILK v3编码解码方式实现
参考链接:
https://github.com/kn007/silk-v3-decoder
https://blog.csdn.net/weixin_30783629/article/details/95746271
首先下载SILK v3开源脚本
百度网盘地址:
链接:https://pan.baidu.com/s/1E9SPYBErVmrE6jlzFg0bww
提取码:dplv
下载完成我们可以看到以下目录层级
若为linux系统
可以直接可以使用 sh converter.sh 1.silk mp3 转换单个音频文件
converter.sh 为下载包中converter.sh的路径 1.silk为需要转换的源文件 mp3为要转换的格式
也可以使用 sh converter.sh sourcePath receptionPath mp3 进行批量转换
converter.sh 为下载包中converter.sh的路径 sourcePath 为要转换的源文件目录 receptionPath 为要存放转换文件的目录 mp3为要转换的格式
若为windows系统
windows系统可以使用下载包中的windows文件夹下面的silk2mp3.exe
可以直接双击打开进行手动转换
若想在windows中使用java调用程序自动转换的话有点麻烦
首先我们需要在windows中使用linux的命令
那么需要下载cygwin然后安装linux的命令包
下载cygwin:
下载地址:http://www.cygwin.com/
选择与你电脑匹配的系统版本 64 or 32
下载完成后运行setup.exe
安装参考地址:https://blog.csdn.net/u010356768/article/details/90756742
选择下载镜像地址这边我用的是163的:http://mirrors.163.com/cygwin/
注意在安装组件的时候
要选择Devel模块然后在Search处分别搜索 gcc-core、gcc-g++、make、gdb、binutils安装这几个包
安装完成之后打开运行无误配置环境变量
cygwin D:\cygwin64\bin 并加入到path %cygwin%
由于图片处理还需要ffmpeg进行处理,我们还需要配置ffmpeg的环境变量
将下载的silk-v3-decoder-master/windows目录下的ffmpeg.zip解压
环境变量配置,变量的值为ffmpeg.exe所在目录
ffmpeg D:\silk-v3-decoder-master\windows 并加入到path中 %ffmpeg%
到此我们的配置都已经完成了,已经可以在windows的任何目录下使用linux命令了
下面测试下
在cmd中输入 linux命令测试如下
C:\Users\Administrator>sh D:/silk-v3-decoder-master/converter.sh D:/aaa/1.amr mp3
[OK] Convert D:/aaa/1.amr To D:/aaa/1.mp3 Finish.
在目录中也生成了一个1.MP3的文件
第一次运行converter.sh 会加载 需要等待蛮长一段时间,下次使用则不会了
cmd调用无异常可以直接在java中调用了
使用java的Runtime.getRuntime()类 执行cmd命令
public static void main(String[] args) {
try {
//批量转换,会有一个文件转换失败,不明所以等待大神改进
String command = "sh D:/silk-v3-decoder-master/converter.sh D:/aaa D:/bbb mp3";
//单个文件转换 测试无问题
String command1 = "sh D:/silk-v3-decoder-master/converter.sh D:/aaa/msg_181711011620205ce3eb94d104.amr mp3";
Process process = Runtime.getRuntime().exec(command);
int status = process.waitFor();
//打印执行状态 0为成功
System.out.println(status);
System.out.println(command);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
好了到此结束