/*** Create By yxl on 2018/6/5*/

public classAmrToMP3Utils {private static Logger logger =Logger.getLogger(AmrToMP3Utils.class);/*** 将amr文件输入转为mp3格式

*@paramfile

*@return

*/

public staticInputStream amrToMP3(MultipartFile file) {

String ffmpegPath=getLinuxOrWindowsFfmpegPath();

Runtime runtime=Runtime.getRuntime();try{

String filePath=copyFile(file.getInputStream(), file.getOriginalFilename());

String substring= filePath.substring(0, filePath.lastIndexOf("."));

String mp3FilePath= substring + ".mp3";//执行ffmpeg文件,将amr格式转为mp3//filePath ----> amr文件在临时文件夹中的地址//mp3FilePath ----> 转换后的mp3文件地址

Process p = runtime.exec(ffmpegPath + "ffmpeg -i " + filePath + " " + mp3FilePath);//执行ffmpeg.exe,前面是ffmpeg.exe的地址,中间是需要转换的文件地址,后面是转换后的文件地址。-i是转换方式,意思是可编码解码,mp3编码方式采用的是libmp3lame//释放进程

p.getOutputStream().close();

p.getInputStream().close();

p.getErrorStream().close();

p.waitFor();

File mp3File= newFile(mp3FilePath);

InputStream fileInputStream= newFileInputStream(mp3File);//应该在调用该方法的地方关闭该input流(使用完后),并且要删除掉临时文件夹下的相应文件

/*File amrFile = new File(filePath);

File mp3File = new File(mp3FilePath);

if (amrFile.exists()) {

boolean delete = amrFile.delete();

System.out.println("删除源文件:"+delete);

}

if (mp3File.exists()) {

boolean delete = mp3File.delete();

System.out.println("删除mp3文件:"+delete);

}*/

returnfileInputStream;

}catch(Exception e) {

e.printStackTrace();

}finally{

runtime.freeMemory();

}return null;

}/*** 将amr文件输入流转为mp3格式

*@paraminputStream amr文件的输入流(也可以是其它的文件流)

*@paramfileName 文件名(包含后缀)

*@return

*/

public staticInputStream amrToMP3(InputStream inputStream, String fileName) {

String ffmpegPath=getLinuxOrWindowsFfmpegPath();

Runtime runtime=Runtime.getRuntime();try{

String filePath=copyFile(inputStream, fileName);

String substring= filePath.substring(0, filePath.lastIndexOf("."));

String mp3FilePath= substring + ".mp3";//执行ffmpeg文件,将amr格式转为mp3//filePath ----> amr文件在临时文件夹中的地址//mp3FilePath ----> 转换后的mp3文件地址

Process p = runtime.exec(ffmpegPath + "ffmpeg -i" + " " +filePath + " " + mp3FilePath);//执行ffmpeg.exe,前面是ffmpeg.exe的地址,中间是需要转换的文件地址,后面是转换后的文件地址。-i是转换方式,意思是可编码解码,mp3编码方式采用的是libmp3lame//释放进程

p.getOutputStream().close();

p.getInputStream().close();

p.getErrorStream().close();

p.waitFor();

File file= newFile(mp3FilePath);

InputStream fileInputStream= newFileInputStream(file);//应该在调用该方法的地方关闭该input流(使用完后),并且要删除掉临时文件夹下的相应文件

/*File amrFile = new File(filePath);

File mp3File = new File(mp3FilePath);

if (amrFile.exists()) {

boolean delete = amrFile.delete();

System.out.println("删除源文件:"+delete);

}

if (mp3File.exists()) {

boolean delete = mp3File.delete();

System.out.println("删除mp3文件:"+delete);

}*/

returnfileInputStream;

}catch(Exception e) {

e.printStackTrace();

}finally{

runtime.freeMemory();

}return null;

}/*** 将用户输入的amr音频文件流转为音频文件并存入临时文件夹中

*@paraminputStream 输入流

*@paramfileName 文件姓名

*@returnamr临时文件存放地址

*@throwsIOException*/

private static String copyFile(InputStream inputStream, String fileName) throwsIOException {

Properties props=System.getProperties();

String filePath= props.getProperty("user.home") + File.separator + "MP3TempFile"; //创建临时目录

File dir = newFile(filePath);if (!dir.exists()) {

dir.mkdir();

}

String outPutFile= dir + File.separator +fileName;

OutputStream outputStream= newFileOutputStream(outPutFile);intbytesRead;byte[] buffer = new byte[8192];while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {

outputStream.write(buffer,0, bytesRead);

}

outputStream.flush();

outputStream.close();

inputStream.close();returnoutPutFile;

}/*** 判断系统是Windows还是linux并且拼接ffmpegPath

*@return

*/

private staticString getLinuxOrWindowsFfmpegPath() {

String ffmpegPath= "";

String osName= System.getProperties().getProperty("os.name");if (osName.toLowerCase().indexOf("linux") >= 0) {

ffmpegPath= "";

}else{

URL url= Thread.currentThread().getContextClassLoader().getResource("ffmpeg/windows/");if (url != null) {

ffmpegPath=url.getFile();

}

}returnffmpegPath;

}

}

java amr转mp3_在java中使用ffmpeg将amr格式的语音转为mp3格式相关推荐

  1. 在java中使用ffmpeg将amr格式的语音转为mp3格式

    ffmpeg是一个非常强大的音视频处理工具,官网是:http://ffmpeg.org/ . 由于ffmpeg在windows上和linux系统上的执行文件不一样(Windows上不需要安装ffmpe ...

  2. java后台 amr格式音频转为mp3格式

    最近项目用到读取amr格式的音频,但是h5不支持这种格式,前台处理不太擅长感觉太过麻烦,所以还是在后端转格式吧. 用到一个jar: jave.jar 网址:https://www.sauronsoft ...

  3. java视频转换语音,视频转换成音频方法,avi格式视频怎么转换为MP3格式

    如何将视频中的音频提取出来?有时候我们在网上下载了一个视频,但真正吸引到自己的却是视频中的音乐.甚至有时候并不是想要视频文件,而是想要视频中的声音,那么如何将视频格式转换成音频格式呢?一般常见的视频转 ...

  4. 【Android FFMPEG 开发】Android 中使用 FFMPEG 将 PCM 音频采样转为 MP3 格式

    文章目录 一.前置操作 ( 移植 FFMPEG ) 二.FFMPEG 将 PCM 采样转为 MP3 格式的命令 三.Android FFMPEG 混音源代码完整示例 四.博客源码 一.前置操作 ( 移 ...

  5. java中支持mp3格式_可以播放mp3格式文件的机器,都遵守了什么协议,才能让mp3格式的文件可以:“一处保存,到处播放?...

    //题主修改了问题,第一段的立场就有点奇怪了 >_<.> //不是mp3格式去适应各种机器的,是各种机器按照mp3规范通过硬件或软件去解码mp3格式的文件,然后经过DAC(数字-&g ...

  6. x3m文件怎么转换成mp3_视频中的音频怎么单独提取出来转换成mp3格式

    视频格式中通常是包含着音频格式的,而在看视频时看见有喜欢的bgm或者片头曲片尾曲时想把其中的音频单独的提取出来怎么办呢?此时通常可以用一些音频转换器把你喜欢的这些音频片段单独的提取出来,接下来就教你怎 ...

  7. java flv转mp3_用java程序调用ffmpeg执行视频文件格式转换flv

    用java小例题说明更直观:(可以直接编译运行) 环境我在windows平台下测试的... 需要在e:/下有ffmpeg.exe;mencoder.exe;drv43260.dll;pncrt.dll ...

  8. amr格式音频转为mp3格式

    最近项目用到读取amr格式的音频,但是h5不支持这种格式,网上有一些是通过插件的方式来读取,amrlib.js之类,但是不擅长前端,而且有一些插件是要求把文件转为base64编码格式,然后把这些bas ...

  9. 将amr格式音频转成mp3格式

    1.网上下载jar包(jave-1.0.2.jar) 2.pom添加依赖,并把jar包弄到项目指定路径下 <dependency><groupId>jack.jave</ ...

  10. 在服务器端,转换amr格式音频文件为MP3格式

    由于当前pc端浏览器及移动端浏览器都不支持直接播放amr格式文件,因此考虑在服务器端,将amr文件转换为MP3文件,使浏览器可直接播放. 在服务器使用ffmpeg工具,供php调用,用来转换amr文件 ...

最新文章

  1. Qt + VS 【如何添加图片资源】
  2. springmvc二十五:springmvc支持ajax
  3. ECCV 2018 DSLT:《Deep Regression Tracking with Shrinkage Loss》论文笔记
  4. Django-认证系统
  5. 前后端敏感数据加密方案及实现_02
  6. Spring技术原理之Spring IOC
  7. 支付宝弄了个“双12 ” 岛国民众都high了
  8. mips64高精度时钟引起ktime_get时间不准,导致饿狗故障原因分析【转】
  9. MySQL VARCHAR的说明信息
  10. web测试之性能测试
  11. 中间人攻击的实践与原理(ARP毒化、DNS欺骗)
  12. osgEarth使用经纬度定义视点/设置相机跟随移动的节点
  13. 冒险岛手游服务器维护界面,冒险岛手游游戏界面全解 丰富轻松画风
  14. Barefoot Networks进军白盒市场
  15. 云端3d虚拟现实展制作
  16. js如何修改对象的padding属性
  17. Libuv源码解析 - uv_loop整个初始化模块
  18. linux桌面 仿android,Ubuntu粉丝必备!仿Ubuntu锁屏App体验
  19. 小米手机显示服务器已满,小米云空间不足怎么办 小米云服务空间已满官方解决方案...
  20. 判断字符串是否为回文的三种常用编程语言实现

热门文章

  1. IOS 检测摇一摇动作的实现方式
  2. 分布式存储Ceph之PG状态详解
  3. 【自学与引导】 大数据技术 技能课程总结篇
  4. 抢Google等巨头生意,纽约大学小伙挖掘并出售自己数据
  5. 【周五松土】私家萝卜与坑
  6. 魔兽和星际最大差别是什么?
  7. java 某年某月的天数_1160-C语言实验——某年某月的天数-JAVA
  8. java替换word空格,java替换word 2007字符串
  9. word中使用通配符替换【持续更新系列】
  10. kaggle之共享单车案例