原文: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就是封裝了一層對外部ffmpeg
的調用。
而windows上能轉換是由於:ffmpeg.exe 這個程序沒問題。
而Linux上轉換失敗也是由於 ffmpeg 這個可能版本太老或依賴庫缺失。
起初我覺得是調用外部的ffmpeg,因此從新安裝編譯了Linux的ffmpeg,然並卵。
因此只能再想其餘解決方案。測試
知道緣由以後,解決思路有兩種。spa
第二種比較簡單,就直接用第二種吧。日誌
下載站點:http://ffmpeg.org/download.htmlcode
而後選擇一個32位仍是64位:blog
下載以後解壓,選擇其中的ffmpeg,替換掉。
若是沒成功,或者轉換失敗,看這裏。
在操做的時候,爲了驗證服務器支持這種方式,你能夠將下載回來的ffmpeg拷貝到你的服務器上,手動進行轉換一次,若是失敗,能夠留言哦。
能夠操做以下:
.it/sauronsoftware/jave
目錄,也能夠看到這個ffmpeg )接着先給ffmpeg加個執行權限
chmod +x ffmpeg
接着調用 ffmpeg 執行轉換下
./ffmpeg -i test.amr test.mp3
而後你會看到一堆的日誌,而且可能還有提示,「test.amr: Input/output error」,但不要擔憂,先無論,你查看下這個目錄下是否多了一個test.mp3 文件。若是有了,恭喜你,轉換成功了,嘗試播放下MP3
若是不行就到Tomcat下有個temp目錄,進入jave 目錄,挺多層的,進去看看有沒一個ffmpeg文件,刪除掉。