linux下的ffmpeg預設情況下是不支援amr格式解碼的,因此考慮手動編譯ffmpeg原始碼增加解碼器以便支援amr檔案格式的解碼。
系統內容:Suse 64bit OS
前期準備:
1、 下載ffmpeg原始碼:http://ffmpeg.org/download.html,這裡選擇版本為0.11.1
2、 下載OpenCORE AMR:http://sourceforge.net/projects/opencore-amr/,這裡選擇的版本為0.1.3。
並將下載的檔案存放與/home/ffmpeg目錄下,以root使用者登入系統。
具體步驟:
1、 編譯安裝opencore-amr,這裡需要注意的是在執行configure命令的時候要添加--enable-shared=no --enable-static=yes參數,其主要作用是禁止生產動態連結程式庫、允許生產靜態庫。
chmod 755 opencore-amr-0.1.3.tar.gz tar -xzvf opencore-amr-0.1.3.tar.gz cd opencore-amr-0.1.3 ./configure --enable-shared=no --enable-static=yes make make install |
2、 編譯安裝ffmpeg,注意configure命令後面所要添加的參數,可以通過執行configure --help命令查看後面所允許帶的參數
chomd 755 ffmpeg-0.11.1.tar.gz tar -xzvf ffmepg-0.11.1.tar.gz cd ffempg ./configure --enable-gpl --enable-version3 --enable-nonfree --disable-ffplay --disable-ffprobe --disable-ffserver --enable-libopencore-amrnb --enable-libopencore-amrwb --prefix=/home/ffmpeg/target make make install |
以上命令成功執行後將會在/home/ffmpeg/target目錄下的bin目錄得到ffmpeg檔案,該檔案已經包含amr解碼器
3、 測試:
chmod 755 ffmpeg ./ffmpeg -I PA003.wav -ar 8000 -ab 12.2k -ac 1 target.amr |
4、 注意事項:
a) 以上方式都是通過靜態庫的形式編譯,採用靜態庫的形式編譯的好處在於:編譯後的可執行檔ffmpeg可以不依賴於amr解碼器,簡單地說,可執行檔已經將amr解碼器包含在內了。
b) ffmpeg在編譯時間候會優先尋找amr解碼器的動態連結程式庫,如果沒有找到,則尋找amr解碼器的靜態庫。在第一步中如果沒有禁止amr產生動態連結程式庫,則ffmpeg將採用amr的動態連結程式庫進行編譯,其缺點是,編譯後的可執行檔ffmpeg將依賴於amr的動態連結程式庫,如果系統的動態連結程式庫搜尋路徑LD_LIBRARY_PATH不包含amr動態連結程式庫所在路徑,則ffmpeg將會報錯,無法正常工作。
c) amr編譯安裝時不建議添加prefix=XXX參數(./configure)修改amr安裝路徑,這樣ffmpeg在編譯安裝時將出現找不到amr解碼器的情況。