完美解決:Java微信語音amr格式轉mp3格式,兼容Linux/Mac/Windows,支持Maven

首先感謝 :dadiyang   找了很久才找到能夠兼容Linux/Windows的amr格式轉mp3php

本文連接:http://www.javashuo.com/article/p-mbaybskh-cw.htmljava

直接上代碼linux

1.首先引入maven依賴(使用maven這點我很喜歡)git

<dependency>
    <groupId>com.github.dadiyang</groupId>
    <artifactId>jave</artifactId>
    <version>1.0.4</version>
 </dependency>

2.調用 AudioUtils.amrToMp3 方法github

 

public void amrToMp3() { File source = new File("target/test-classes/material/testAudio.amr"); File target = new File("testAudio.mp3"); it.sauronsoftware.jave.AudioUtils.amrToMp3(source, target); }

 

結束:三行代碼搞定格式轉換微信

探索過程

最近接到基於微信公衆號開發的需求,在處理微信消息的時候,發現語音類型的消息微信推送過來的是 amr 格式的文件,而在網頁 HTML5的audio標籤不支持amr格式,非常麻煩。app

因而處處查資料,發現了 JAVE 這個項目,它封裝了 ffmpeg 的命令,讓開發者能夠經過 Java 轉換文件格式。maven

不幸的是,這個項目可謂年久失修,存在如下幾個問題單元測試

JAVE 項目的問題

  1. 項目老舊沒再維護。官網最近版本是2009年發佈的,其依賴的ffmpeg早已過期,不少狀況下用不了。
  2. 轉碼一直報異常 EncoderException: Stream mapping
  3. 沒有發佈maven倉庫,並且 JAVE 自己也不是一個maven項目
  4. 不支持Mac OS

解決

本項目爲解決上述問題,根據網上的資料進行整理和修改,我建立了一個 JAVE開源項目 而且發佈到 maven中央倉庫,讓整個解決方案變得更加簡單。測試

項目特色

  • 這是一個maven項目,並且已發佈到中央倉庫。
  • 項目依賴的 ffmpeg 可執行文件通過驗證可使用(單元測試中提供了一個簡單的檢驗方法)
  • 解決了amr轉mp3出現的 EncoderException: Stream mapping
  • 支持 Linux/Windows/Mac 平臺

JAVE原理

  1. 初始化時判斷當前運行環境,將bin目錄中對應的 ffmpeg 可執行文件拷貝到臨時目錄中
  2. 根據文件類型及配置經過 Runtime.getRuntime().exec(cmd) 執行 ffmpeg 對應的轉碼命令


自定義 ffmpeg 路徑
若是程序沒法經過拷貝資源文件的方式獲取到 ffmpeg 的可執行文件或者內置的 ffmpeg 不支持你所使用的操做系統

你能夠經過環境變量或者在 java 中設置 System.setProperty("ffmpeg.home", "ffmpeg可執行文件所在的目錄") 的方式指定你的系統中安裝的可用的 ffmpeg 文件的目錄,如 System.setProperty("ffmpeg.home", "/usr/local/bin/")

項目GitHub地址
https://github.com/dadiyang/jave

參考

JAVE官網:http://www.sauronsoftware.it/projects/jave/index.php

《解決linux AMR轉MP3出現轉碼成功卻無法播放的問題》:

https://hk.saowen.com/a/2ec2a73ec73091967c3ebdb5697832006cb255a7183377b6e8fae1c13f5e54bc
xiaoymin: https://github.com/xiaoymin/jave

相關文章
相關標籤/搜索