ffmpeg是一个非常强大的音视频处理工具,官网是:http://ffmpeg.org/ 。

由于ffmpeg在windows上和linux系统上的执行文件不一样(Windows上不需要安装ffmpeg,只需要下载Windows版本的ffmpeg就行。linux上需要用户自己安装ffmpeg---> 参考链接:http://linux.it.net.cn/e/Linuxit/2014/0828/3980.html)

  最近最项目是遇到一个需求,就是将安卓端amr格式的录音文件转为mp3格式,然后在网页上播放。

  一、 Windows系统和linux系统的处理方式

  1、首先在Windows系统上倒好解决。方案有2个,一个是使用jave.jar工具包,另一种是直接将下载好的Windows版本的ffmpeg解压,然后将其中bin目录下ffmpeg.exe文件导入到项目中(或者直接使用代码读取本地的ffmpeg.exe执行文件)。

    1.1、 使用jave.jar工具包

      http://mfan.iteye.com/blog/2032454

    1.2、使用ffmpeg.exe执行文件

      1.2.1、使用本地的ffmpeg.exe执行文件,直接通过File获取

      

      1.2.2、将ffmpeg.exe执行文件导入到项目中,通过 URL url = Thread.currentThread().getContextClassLoader().getResource("ffmpeg/windows/"); 来获取

      

    

    1.3、linux服务器上使用ffmpeg将amr转为mp3

      1.3.1、首先要在linux服务器上安装ffmpeg工具,安装方式见上方  

      

  二、utils工具类(代码具体实现)

  

/*** Create By yxl on 2018/6/5*/
public class AmrToMP3Utils {private static Logger logger =Logger.getLogger(AmrToMP3Utils.class);/*** 将amr文件输入转为mp3格式* @param file* @return*/public static InputStream 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 = new File(mp3FilePath);InputStream fileInputStream = new FileInputStream(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);}*/return fileInputStream;} catch (Exception e) {e.printStackTrace();} finally {runtime.freeMemory();}return null;}/*** 将amr文件输入流转为mp3格式* @param inputStream  amr文件的输入流(也可以是其它的文件流)* @param fileName  文件名(包含后缀)* @return*/public static InputStream 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 = new File(mp3FilePath);InputStream fileInputStream = new FileInputStream(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);}*/return fileInputStream;} catch (Exception e) {e.printStackTrace();} finally {runtime.freeMemory();}return null;}/*** 将用户输入的amr音频文件流转为音频文件并存入临时文件夹中* @param inputStream  输入流* @param fileName  文件姓名* @return  amr临时文件存放地址* @throws IOException*/private static String copyFile(InputStream inputStream, String fileName) throws IOException {Properties props = System.getProperties();String filePath = props.getProperty("user.home") + File.separator + "MP3TempFile"; //创建临时目录File dir = new File(filePath);if (!dir.exists()) {dir.mkdir();}String outPutFile = dir + File.separator + fileName;OutputStream outputStream = new FileOutputStream(outPutFile);int bytesRead;byte[] buffer = new byte[8192];while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {outputStream.write(buffer, 0, bytesRead);}outputStream.flush();outputStream.close();inputStream.close();return outPutFile;}/*** 判断系统是Windows还是linux并且拼接ffmpegPath* @return*/private static String 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();}}return ffmpegPath;}
}

      

  

转载于:https://www.cnblogs.com/Amaris-Lin/p/9186888.html

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

  1. Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件

    Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...

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

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

  3. 在java中使用FFmpeg将图片和音频合成视频

    下面分享一个我之前在java中使用FFmpeg将图片和音频合成视频的demo. package com.xxx.console.videoProcess;import java.awt.image.B ...

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

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

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

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

  6. 在线qmc0转换mp3工具_如何将M4A格式的音频转换为MP3格式?只需一步搞定

    随着网络技术的发达,会有很多人喜欢在网上下载东西,特别是很喜欢在网上下载音乐,但是下载音乐之后发现是M4A格式?这样用起来很不方便,都喜欢MP3格式的,那么如何将M4A格式的音频转换为MP3格式?今天 ...

  7. 如何将M4A格式的音频转换为MP3格式?只需一步搞定

    随着网络技术的发达,会有很多人喜欢在网上下载东西,特别是很喜欢在网上下载音乐,但是下载音乐之后发现是M4A格式?这样用起来很不方便,都喜欢MP3格式的,那么如何将M4A格式的音频转换为MP3格式?今天 ...

  8. 怎样播放swf文件 swf格式怎么转换成mp3格式

    话说swf文件真是个让人头疼的格式.小编最新为了锻炼自己的听力,就在网上下载了很多学习的课程,但是下载的课程是swf格式文件,而我又只需要音频,所以格式的转换就成了最大的问题.可能有不少网友有着和我一 ...

  9. OpenCV应用:将jpg格式的图片转为bmp格式的图片

    将jpg格式的图片转为bmp格式的图片 之前看到一篇博文,说用cvLoadImage函数读出来的是IplImage类的值,同时cvSaveImage的输入也是IplImage类的值,这就可以通过这两个 ...

最新文章

  1. Flask学习之路(一)--初识flask
  2. leetcode 剑指 Offer 05. 替换空格
  3. Powerful array(CF-86D)
  4. 数电与模电的根本区别 转
  5. 将应用制作成镜像发布到服务器k8s上作为容器微服务运行。
  6. J2ME 模拟短信发送界面开发程序
  7. CMU 15-213 Introduction to Computer Systems学习笔记(15)System-Level I/O
  8. Word在生成PDF后,PDF左侧导航书签没有目录
  9. matlab 图像锐化 梯度 原理,Matlab梯度法图像锐化
  10. Java 算法之三色旗
  11. 公众号排名优化被动引流截流之关于公众号注册申请的那些事儿
  12. 【论文笔记】AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions
  13. 大数据分析师的沟通技巧
  14. 离散数学——中国剩余定理(孙子定理)
  15. 如果给video标签动态写入视频?
  16. 说说部署网站的奇葩事
  17. 揭秘家用路由器0day漏洞挖掘技术-Chapter1-读书笔记
  18. 谷歌三大论文之the Google File System
  19. 微信变身大史记:从IM到电商 腾讯帝国新时代http://danke74520.qzone.qq.com
  20. Android EditText定制粘贴和定制输入

热门文章

  1. AD采样的平均值滤波
  2. [教程]微信官方开源UI库-WeUI使用方法【申明:来源于网络】
  3. 走进C/C++函数的名字改编
  4. tcp之backlog参数
  5. 如何明智的使用计算机,幼儿园如何正确使用计算机
  6. (38)FPGA原语设计(BUFH)
  7. (27)System Verilog设计UART接收
  8. div输入的内容全选css,将CSS类应用于内容中的选定文本可编辑div
  9. 自己在win10中添加ADO控件步骤总结
  10. 怎么修改x轴_Origin绘图:共X轴Stack绘制分波态密度与绘图中的科学构思