java将silk文件转换成MP3

微信的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();
        }
    }

好了到此结束

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值