java amr格式轉mp3格式(完美解決Linux下轉換0K問題)

原文:http://linjie.org/2015/08/06/amr%E6%A0%BC%E5%BC%8F%E8%BD%ACmp3%E6%A0%BC%E5%BC%8F-%E5%AE%8C%E7%BE%8E%E8%A7%A3%E5%86%B3Linux%E4%B8%8B%E8%BD%AC%E6%8D%A20K%E9%97%AE%E9%A2%98/html

 

因項目需求,須要將 amr 格式的文件轉成 mp3格式。
網絡上提供的思路大可能是使用jave-x-x.jar。
這個包確實有用,由於開發時是在windows環境中,測試轉換雖然報了異常:windows

it.sauronsoftware.jave.EncoderException:   Duration: N/A, bitrate: N/A

 


但也確實轉換成功了,能夠播放。
 服務器

但是一旦部署到Linux環境當中,不是轉換失敗,就是轉換的文件爲大小 0 k。百思不得其解。網絡

緣由

通過一些資料和源碼跟蹤,終於找到了緣由。
jave的能轉換的原理其實就是調用外部的二進制可執行文件 ffmpeg,打開它的jar包就能夠發現,它裏面內置了:
jave原jar包截圖jave原jar包截圖

因此實際上,jave就是封裝了一層對外部ffmpeg的調用。
而windows上能轉換是由於:ffmpeg.exe 這個程序沒問題。
而Linux上轉換失敗也是由於 ffmpeg 這個可能版本太老或依賴庫缺失。
起初我覺得是調用外部的ffmpeg,因此從新安裝編譯了Linux的ffmpeg,然並卵。
因此只能再想其餘解決方案。
測試

解決

知道緣由以後,解決思路有兩種。spa

  1. 不使用jave ,將jave一些核心的代碼抽取出來,本身調用系統外部。
  2. 下載最新的ffmpeg,替換掉原先的ffmpeg。

第二種比較簡單,就直接用第二種吧。日誌

下載和替換

下載站點:http://ffmpeg.org/download.htmlcode

下載下載htm

而後選擇一個32位仍是64位:blog

下載下載

下載以後解壓,選擇其中的ffmpeg,替換掉。

ffmpeg替換以後ffmpeg替換以後

其餘!失敗看這裏!

若是沒成功,或者轉換失敗,看這裏
在操做的時候,爲了驗證服務器支持這種方式,你能夠將下載回來的ffmpeg拷貝到你的服務器上,手動進行轉換一次,若是失敗,能夠留言哦。
能夠操做以下:

  1. 解壓文件(能夠本身下載,也能夠下載博主在最後提供的現成的jar包,直接解壓jar也,打開.it/sauronsoftware/jave 目錄,也能夠看到這個ffmpeg )
  2. 進入目錄,看到ffmpeg文件後,將其拷貝到Linux環境下。
  3. 準備一個amr文件,將兩個文件都拷貝到同一個目錄下,進行測試。若是準備好了,如圖:
    arm和ffmpegarm和ffmpeg
  4. 接着先給ffmpeg加個執行權限

    chmod +x ffmpeg
  5. 接着調用 ffmpeg 執行轉換下

    ./ffmpeg  -i test.amr  test.mp3

而後你會看到一堆的日誌,而且可能還有提示,「test.amr: Input/output error」,但不要擔憂,先無論,你查看下這個目錄下是否多了一個test.mp3 文件。若是有了,恭喜你,轉換成功了,嘗試播放下MP3

你可能獲得的日誌以下:
日誌和執行

 

 

 

 

若是不行就到Tomcat下有個temp目錄,進入jave 目錄,挺多層的,進去看看有沒一個ffmpeg文件,刪除掉。

相關文章
相關標籤/搜索