1. 程式人生 > >FFmpeg 編譯安裝使用總結

FFmpeg 編譯安裝使用總結

最近想把這段時間學的東西整理下,免得自己健忘。

1.FFmpeg 介紹:

       ffmpeg是音視訊的分離,轉換,編碼解碼及流媒體的完全解決方案,其中最重要的就是libavcodec庫。它被mplayer或者xine使用作為解碼器。還有,國內比較流行的播放器影音風暴或MyMPC的後端ffdshow也是使用ffmpeg的解碼庫的.

         ffmpeg軟體包經編譯過後將生成三個可執行檔案,ffmpeg,ffserver,ffplay。其中ffmpeg用於對媒體檔案進行處理,ffserver是一個http的流媒體伺服器,ffplay是一個基於SDL的簡單播放器。

       ffmpeg中有五個庫文libavcodec,libavformat,libavutil,libswscale,libpostproc,其中庫libavcodec,libavformat用於對媒體檔案進行處理,如格式的轉換;libavutil是一個通用的小型函式庫,該庫中實現了CRC校驗碼的產生,128位整數數學,最大公約數,整數開方,整數取對數,記憶體分配,大端小端格式的轉換等功能;libswscale,libpostproc
暫時不知道何用。

2.FFmpeg下載:

最新的FFmpeg可以通過svn下載,svn輔助軟體有:

SubVersion,從 http://subversion.tigris.org/ 下載,支援linux。
TortoiseSVN,從 http://tortoisesvn.tigris.org/ 下載,是很不錯的SVN客戶端程式,為windows外殼程式整合到windows資源管理器和檔案管理系統的Subversion客戶端,用起來很方便。

3.FFmpeg安裝:

       1).安裝apr 和apr-util ,安裝在/usr/local 下

       2).subversion安裝,(筆者用的是1.7.16版本)在apache.org網站能下到

tar -vxf subversion-1.7.16.tar.gz

cd subversion-1.7.16

./configure–with-apr=/usr/local/apr-httpd –with-apr-util=/usr/local/apr-util-httpd/

make

make install

:在安裝過程中如果出現缺少sqlite3 需要下載安裝sqlite-amalgamation-3.7.3.tar.gz

tar  –xvf sqlite-amalgamation-3.7.3.tar.gz

將解壓出來的sqlite3.c 拷貝到subversion-1.7.16 下的sqlite-amalgamation

目錄下

3).FFmpeg下載: 可以直接通過svn命令獲取最新的ffmpeg,命令如下:

svn checkoutsvn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

4).FFmpeg 支援庫的安裝

* xvid


for x86
#./configure --prefix=/usr/  --enable-shared
#make
#make install
for arm
#CC=arm-linux-gcc ./configure--prefix=/usr/local/arm/arm-linux --build=i686-pc-linux --host=arm-linux--target=arm-linux
#make
#make install

* x264
x264的獲取地址如下: svnco svn://svn.videolan.org/x264/trunk x264
配置編譯
for x86
#./configure --enable-shared --prefix=/usr/
#make
#make install
for arm
#CC=arm-linux-gcc ./configure --enable-pthread--enable-shared --host=arm-linux --prefix=/usr/local/arm/arm-linux
#make
#make install

* 支援mp3

lame的獲取地址如下: http://lame.sourceforge.net/index.php
配置編譯
for x86
./configure --enable-shared –prefix=/usr/

* AC3和dts編碼的支援
libdts編譯引數
./configure --prefix=/usr
make
make install

* mpg4 aac格式支援,
如果ffserver伺服器還針對手機使用者服務,所以,類似aac,mpg4鈴聲格式的支援,我們也得做。這裡我們安裝faad2和faac就行,下載請到http://www.audiocoding.com/modules/mydownloads/http://prdownloads.sourceforge.net/faac
FAAD2的編譯
cd faad2
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
faac的編譯
cd faac
chmod +x bootstrap
./bootstrap
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install


* 支援3gp格式,
這也是現在好多手機支援的格式,所以也得支援編譯, 編譯的時候加上--enable-amr_nb --enable-amr_wb引數就行,根據編譯系統的提示,所以我們得下載一些編譯3gp所需得檔案。
原始碼網址:http://www.3gpp.org/ftp/Specs
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
解壓以後把裡面的檔案都拷貝到libavcodec/amrwb_float
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
解壓以後把裡面的檔案都拷貝到libavcodec/amr_float

好了,基本ffmpeg支援的格式,我們基本都做好前期準備了(如果有安裝不成功的可以換一個包重新安裝),下面是ffmpeg的編譯

網上的很多安裝配置方法基本都是:./configure --enable-gpl --enable-shared --enable-amr_nb--enable-amr_wb --enable-mp3lame --enable-amr_if2 --enable-libogg--enable-libvorbis --enable-libxvid --enable-a52 --enable-a52bin--enable-libfaadbin --enable-dts --enable-pp --enable-libfaad --enable-libfaac--enable-libx264 –enable-pthreads

但是我自己編譯試過發現這個配置過不了會出現如下錯誤,可能因為版本的不同,現在包含的庫寫法有一些是不一樣的

Unknown option”—enable-amr_nb” Unknown option ”—enable-mp3lame” Unknown option ”—enable-amr_wb” Unknown option ”—enable-amr_if2” Unknown option ”—enable-libogg” Unknown option ”—enable-a52”。。。。。

經查實,新版庫變成如下:

     --enable-libmp3lame

     --enable-libopencore-armnb

     --enable-libopencore-armwb

至於其他的unknwon option 依然沒有找到解決方法,所以筆者在配置的選項中去掉了對應的選項,最後的配置命令如下:

./configure--prefix=/usr --enable-gpl --enable-shared --enable-libmp3lame--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvorbis--enable-libx264 --enable-pthreads --enable-swscale --enable-avfilter--enable-nonfree --enable-version3 –enable-postproc  --enable-x11grab

make

make install

至此FFmpeg 編譯完成了。進入ffmpeg目錄輸入 ffmpeg 命令檢視是否安裝成功。

如果出現ffmpeg: relocation error: /usr/lib/libavfilter.so.3: symbolsws_isSupportedEndiannessConversion, version LIBSWSCALE_2 not defined in filelibswscale.so.2 with link time reference

解決方法:在FFmpeg目錄下 exportLD_LIBRARY_PATH=/usr/lib/

OK,FFmpeg可以正常使用了