java实现windows下amr转换为mp3(可实现微信语音和qq语音转换)
最近做一个项目需要将微信的语音文件放在页面进行播放,查了好多资料发现,web页面直接播放并没有一个好的解决方案,于是就想到了先将amr文件转换成易于在页面播放的mp3文件,然后在进行播放,现在将amr文件转化为mp3文件的几种方式以及踩过的坑分享一下:
查了好多资料,总结一下,amr转换mp3的方式有如下几种:
1.通过jave.jar包实现(不可以转微信及qq语音文件);
我用的是:jave-1.0.2.zip
jave.jar包官方下载
2.通过ffmpeg.exe实现(不可以转微信及qq语音文件);
需要配置环境变量
ffmpeg.exe包官方下载
3.通过SILK v3编码解码方式实现(可以转微信及qq语音文件);
需要配置环境变量
SILK v3相关内容下载
cygwin软件下载
下面对以上三种方式进行分解:
一、通过jave.jar包实现(不可以转微信及qq语音文件):
将jave.jar包导入项目:
package com.nnbrightstar.lbtm.common.utils;import it.sauronsoftware.jave.AudioAttributes; import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncoderException; import it.sauronsoftware.jave.EncodingAttributes; import it.sauronsoftware.jave.InputFormatException; import java.io.File;public class ChangeAudioFormat {public static void main(String[] args) throws Exception {File source = new File("D:/1.amr");String targetPath = "D:/2.mp3";transcodingToMP3(source,targetPath);}/*** jave包实现将amr格式转为mp3格式 * @param source* @param targetPath* @return*/public static boolean transcodingToMP3(File source,String targetPath){//File source = new File("C:/Users/Administrator/Downloads/厨房里的爆炸案.mpg");boolean flag = false;File target = new File(targetPath);AudioAttributes audio = new AudioAttributes();// 音频属性audio.setCodec("libmp3lame");// libmp3lame 音频编码audio.setBitRate(new Integer(128000));// 音频比特率audio.setChannels(new Integer(1));// 声道audio.setSamplingRate(new Integer(44100));// 采样率EncodingAttributes attrs = new EncodingAttributes();// 视频属性attrs.setFormat("mp3");// 转码格式attrs.setAudioAttributes(audio);// 音频属性Encoder encoder = new Encoder();// 创建解码器long beginTime = System.currentTimeMillis();try {// 获取时长MultimediaInfo m = encoder.getInfo(source);System.out.println(m.getDuration()/1000 + "秒");System.out.println("获取时长花费时间是:" + ((System.currentTimeMillis() - beginTime))/1000 + "秒");beginTime = System.currentTimeMillis();encoder.encode(source, target, attrs);System.out.println("音频转码花费时间是:" + ((System.currentTimeMillis() - beginTime)/1000) + "秒");flag = true;} catch (IllegalArgumentException e) {flag = false;e.printStackTrace();} catch (InputFormatException e) {flag = false;e.printStackTrace();} catch (EncoderException e) {flag = false;e.printStackTrace();}return flag;} }
二、通过ffmpeg.exe实现(不可以转微信及qq语音文件):
ffmpeg是一个非常强大的音视频处理工具,直接将下载好的Windows版本的ffmpeg解压,然后将其中bin目录下ffmpeg.exe文件导入到项目中(或者直接使用代码读取本地的ffmpeg.exe执行文件)。
1.使用本地的ffmpeg.exe执行文件,直接通过File获取:
2、将ffmpeg.exe执行文件导入到项目中,通过 URL url = Thread.currentThread().getContextClassLoader().getResource("ffmpeg/windows/"); 来获取
不管用那种形式实现,效果是一样的,示例代码如下:
package com.nnbrightstar.lbtm.common.utils;import it.sauronsoftware.jave.AudioAttributes; import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncoderException; import it.sauronsoftware.jave.EncodingAttributes; import it.sauronsoftware.jave.InputFormatException; import java.io.File;public class ChangeAudioFormat {public static void main(String[] args) throws Exception {String sourcePath = "D:/1.amr"; String targetPath = "D:/1.mp3";ToMp3(sourcePath,targetPath);}/** * ffmpeg.exe软件实现将amr格式转为mp3格式 * @param webroot 项目的根目录 * @param sourcePath 文件的相对地址 */ public static void ToMp3(String sourcePath, String targetPath){ Runtime run = null; try { run = Runtime.getRuntime(); long start=System.currentTimeMillis(); //Process p=run.exec(webroot+"files/ffmpeg -i "+webroot+sourcePath+" -acodec libmp3lame "+webroot+targetPath);//执行ffmpeg.exe,前面是ffmpeg.exe的地址,中间是需要转换的文件地址,后面是转换后的文件地址。-i是转换方式,意思是可编码解码,mp3编码方式采用的是libmp3lameString cmd = "D:/ffmpeg/bin/ffmpeg -i "+sourcePath+" -acodec libmp3lame "+targetPath;Process p=run.exec(cmd);//执行ffmpeg.exe,前面是ffmpeg.exe的地址,中间是需要转换的文件地址,后面是转换后的文件地址。-i是转换方式,意思是可编码解码,mp3编码方式采用的是libmp3lame System.out.println(cmd);//释放进程 p.getOutputStream().close(); p.getInputStream().close(); p.getErrorStream().close(); p.waitFor(); long end=System.currentTimeMillis(); System.out.println(sourcePath+" convert success, costs:"+(end-start)+"ms"); } catch (Exception e) { e.printStackTrace(); }finally{ //run调用lame解码器最后释放内存 run.freeMemory(); } } }
环境变量配置:
(1)ffmpeg
D:\ffmpeg\bin
(2)Path
.;%ffmpeg%;,;%cygwin%;
三、通过SILK v3编码解码方式实现(可以转微信及qq语音文件):
SILK v3编码是Skype向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器,Skype后来将其开源。具体可见Wikipedia。
转换QQ的语音信息(去年又是微信的语言信息),做成Shell脚本,具体可见Github项目地址:https://github.com/kn007/silk-v3-decoder。
需要gcc和ffmpeg。gcc是拿来编译silk v3 decoder源码,ffmpeg是拿来转换格式的。
1.Linux下可执行,调用很简单,只需一句shell命令:
sh convert.sh 1.amr mp3
其中:“1.amr”是你要转换的源文件(QQ常见为slk,微信常见为amr);后面的“mp3”是你要输出的格式。
首次使用会编译silk v3 decoder,第二次以后就不用了。
2.windows下使用下载好的项目包中的windows文件夹下的silk2mp3.exe可以实现文件类型转换。
3.那么问题来了,我需要在windows下使用java代码直接调用可以再Linux下面执行的shell命令:
首先我们需要在windows系统下可以执行shell命令,然后让cmd.exe中也可以执行相应的shell命令就可以了。
Linux的shell脚本提供了大量方便的工具,如:awk、grep、more、tail、wc等等,方便用户对文件、数据的分析,但是windows相对来说就没那么方便,要分析一个数据可能需要自己编程、编译然后才能对一些数据进行分析,对于一些轻量级的数据,不如shell脚本好用。
下载cygwin对应于自己windows操作系统的版本:32位或64位
(cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件)
打开cygwin,就可以看到熟悉的命令行提示了,shell环境对应的根目录是软件的安装目录.
开始使用linux命令:grep、awk、less、vi等等,如果发现有缺少什么命令,重新运行setup.exe安装程序,搜索需求的命令,叉选上即可安装。
cygwin安装:
(1)双击setup.exe
(2)按照安装提示“下一步”
(3) 选择从“互联网”安装:
(4)选择安装的路径,一般是C:\Cygwin,选择本地临时目录,用于存放下载的软件;选择您连接互联网的方式,一般选“直接连接”就可以了。
(5)选择下载源.
(6)根据安装提示,选择需要安装的软件包,完成安装。
cygwin使用:
(1)双击桌面的Cygwin图标,即可启动Cygwin里的Bash。
(2)或者,你可将C:/Cygwin/bin加到%PATH%当中,您就可以直接在cmd.exe里面使用Linux命令了,比如less, cat, wc , wget
(3)如果您有一个Bash脚本,您可以直接用C:/Cygwin/bin/bash.exe X:/scripts/Monitor.sh的形式调用。
实现代码:
package com.nnbrightstar.lbtm.common.utils;import it.sauronsoftware.jave.AudioAttributes; import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncoderException; import it.sauronsoftware.jave.EncodingAttributes; import it.sauronsoftware.jave.InputFormatException; import java.io.File;public class ChangeAudioFormat {public static void main(String[] args) throws Exception {ToMp3();}/** * cygwin软件实现将amr格式转为mp3格式 */ public static void ToMp3(){ Runtime run = null; try { run = Runtime.getRuntime(); long start=System.currentTimeMillis(); //F:/Cygwin/bin/bash.exe调用cygwin执行linux命令(如果配置过环境变量,在任何路径下直接可以写sh),C:/Users/Administrator/Desktop/silk-v3-decoder-master/converter.sh是要执行的文件,1.amr是要转换的文件,mp3要输出的格式 //String cmd = "sh C:/Users/Administrator/Desktop/silk-v3-decoder-master/converter.sh 1.amr mp3";String cmd = "F:/Cygwin/bin/bash.exe C:/Users/Administrator/Desktop/silk-v3-decoder-master/converter.sh 1.amr mp3";Process p=run.exec(cmd);//执行cygwin,前面是cygwin的地址,中间是需要转换的文件地址,后面是转换后的文件的格式。 System.out.println(cmd);//释放进程 p.getOutputStream().close(); p.getInputStream().close(); p.getErrorStream().close(); p.waitFor(); long end=System.currentTimeMillis(); System.out.println(sourcePath+" convert success, costs:"+(end-start)+"ms"); } catch (Exception e) { e.printStackTrace(); }finally{ //run调用lame解码器最后释放内存 run.freeMemory(); } } }
如何完整安装cygwin:
(1)选择Install from internet
(2)选择安装目录,这个目录相当于是安装好之后的Linux根目录
(3)这个目录之Cygwin的安装文件目录和下载的文件目录
(4)点下一步到
敲黑板,这不很关键,直接关系到能不能安装成功,我之前的N次失败原因都在这里。国内没有合适的下载源,这里得手动添加下:http://mirrors.163.com/cygwin/ 。添加163的镜像下载源,Next step:
(5)接在来选择安装的软件,Search处分别搜索 gcc-core、gcc-g++、make、gdb、binutils,选择devel目录下的相关版本,注意有bin和src,只应用的话选择二进制文件即可。然后一路无脑点,下载文件就看各位的网速了;
环境变量配置(如下两个环境变量必须配置):
(1)cygwin
F:\Cygwin\bin
(2)Path
.;%ffmpeg%;,;%cygwin%;
参考链接:
https://zhidao.baidu.com/question/329657466310314125.html
https://blog.csdn.net/u012778714/article/details/74012013
https://kn007.net/topics/decoding-qq-wechat-silk-v3-encoded-audio-to-mp3-or-other-formats/
java实现windows下amr转换为mp3(可实现微信语音和qq语音转换)相关推荐
- java执行windows下cmd命令的方法
本文实例讲述了java执行windows下cmd命令的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: //获取运行时 Runtime rt = Runtime.getRunti ...
- 微信公众号开发+H5页面语音录入+下载+amr转换为MP3+讯飞语音转文字
其实作为H5想要做语音识别,自认为还说有各种弊端得,同时还是微信公众号里面,如果小程序得话,或许会简单一点,但是这里是在公众号里面开发,在这个过程中查阅个各种资料,其实里面得东西都大同小异,但是大多数 ...
- java 将微信录音amr转换为mp3格式
2020年更新,这是4前写的了文章了,今天找东西,登录账号发现一堆几年前的评论,真抱歉,我没回复你们 如果有需要,尽量参考评论中的解决办法吧. https://blog.csdn.net/dadiya ...
- Java在Windows下导出xml文件到Linux服务器上
最近由于公司项目需要,学习了在Windows平台导出xml文件到Linux服务器上的指定目录下的方法,(注:这里的我的Linux是在本机上装的虚拟机)现在写下来记录一下! 1.首先是项目截图: 2.主 ...
- java在windows下启动jar包使用utf-8格式
在使用hasor+dataway集成到spring boot项目使用jar包方式部署在Windows环境下,出现中文乱码的问题,考虑是Windows默认编码格式为gbk格式,所以在cmd启动jar包项 ...
- Mallet Java【Windows下配置】(解决Ant安装可能会失败的解决方案)
简述 (一般来说,添加环境变量时:除了*_HOME的这些大家自定(根据自己把东西放在了哪个文件夹下),其他的跟我一样也是没问题的) 文章目录 简述 JAVA配置 Mallet下载 ANT下载 ANT配 ...
- PHP 将amr音频文件转换为mp3格式
PHP 将amr音频文件转换为mp3格式 说下整体思路 1.服务器安装ffmpeg 2.使用ffmpeg -i 指令来转换amr为mp3格式(这个到时候写在PHP代码中,使用exec函数执行即可) 3 ...
- Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例
1.准备JAR包 2.代码 首先确定你要转换的文件类型,如amr转成MP3格式,如果你想转换其他的格式,可以参考JAVE 视音频转码,文中详细解释了 JAVE(Java Audio Video Enc ...
- 如何将amr格式转换为mp3格式?
如何将amr格式转换为mp3格式?大家可能对amr文件了解不多,其实amr是手机设备上音频通用格式,它的最大特点就是文件体积小,一分钟的amr音频文件大小只有1kb,这给使用带来了非常大的便利,不过最 ...
最新文章
- 1042: [HAOI2008]硬币购物 - BZOJ
- C语言与sqlserver数据库
- 时间管理-暗世界-时间碎片
- how to find all element type with type table of content
- SDN精华问答 | SDN的核心技术是什么?
- Linux学习总结(69)——Linux 生成随机数的6种方法
- 花一天时间踩了node npm的一个坑
- winform 防止多開
- php spl自动加载类,php – SPL自动加载最佳实践
- python爬数据是什么意思-爬数据是什么意思?
- C语言大作业-个人通讯录管理系统、考试座位表生成系统、学生获奖信息收集与管理系统
- 微软必应词典客户端的案例分析——个人Week3作业
- java.lang.IllegalArgumentException: Last encoded character (before the paddings if any)
- 搜索思维[PPT制作]
- QT QDateTime获取当前时间且分出年月日时分秒
- c语言中 mf什么意思,mf是什么意思(单反相机的对焦怎么用)
- Oracle分页查询性能优化
- MTU MSS 设置对网络环境的影响
- 文因互联CEO鲍捷:八一八聊天机器人
- 模型的评估方法及错误率与精度
热门文章
- h5调用支付宝 php支付源码,友价源码如何集成支付宝H5接口(即支付宝手机支付接口)...
- 【MM32F5270开发板试用】定制MicroPython及读取MPU6050数据到OLED1306
- RETHINKING SOFT LABELS FOR KNOWLEDGE DISTIL- LATION: A BIAS-VARIANCE TRADEOFF PERSPECTIVE
- abd获取手机应用的安装包
- openlayers 6 图层望远镜功能的实现
- 电脑蓝屏错误代码0x0000007e的解决方法
- 2021年教你增加拿到BAT等大厂offer几率,分享PDF高清版
- 设计模式(二)—— 创建型模式
- (c#)小游戏 飞行棋
- 谷歌动态验证码二次验证ssh