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解碼器的情況。