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/

 

因項目需求,需要將 amr 格式的文件轉成 mp3格式。
網絡上提供的思路大多是使用jave-x-x.jar。
這個包確實有用,因為開發時是在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,然並卵。
所以只能再想其他解決方案。

解決

知道原因之后,解決思路有兩種。

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

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

下載和替換

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

下載下載

然后選擇一個32位還是64位:

下載下載

下載之后解壓,選擇其中的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文件,刪除掉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM