ffmpeg 配置与编译
生活随笔
收集整理的這篇文章主要介紹了
ffmpeg 配置与编译
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| 本文標簽(Tag) | |
| 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客戶端,用起來很方便。 ? ??? subversion安裝,記住最好之前裝過apr和apr-util,在apache.org網站能下到 ??? wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz ??? tar zvxf subversion-1.3.2.tar.gz ??? cd subversion-1.3.2 ??? ./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/ ??? make ??? make install ??? 如果安裝了FC6,它已經帶了svn,不用裝了。 ? ??? ffmpeg的下載:我們就可以通過svn命令獲取最新的ffmpeg,命令如下: ??? svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg ? 3 ffmpeg支持庫的安裝 * xvid ??? xvid的獲取地址如下: http://www.xvid.org/ ??? wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz ??? 配置編譯 ??? for x86 ?#./configure --prefix=/usr/local ?#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的獲取地址如下: svn co svn://svn.videolan.org/x264/trunk x264 ??? 配置編譯 ??? for x86 ?#./configure --enable-shared --prefix=/usr/local ?#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/local ? * 支持Ogg Vorbis: ? * 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 ??? 在編譯ffmpeg,在configure時加上--enable-amr_nb --enable-faad --enable-faac參數。 ? * 支持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支持VC1格式 ??? 微軟ASF格式的三個版本,WMV1,WMV2,WMV3分別對應MediaPlayer的版本7,8和9,所以很多時候會稱VC1為WMV3或WMV9,都是它了,有時候在代碼里,也能看到稱呼它為VC9的。因為微軟還沒有正式公開這種格式,所以當前對VC1的支持還很不完善。本文基本是根據 Multimedia Mike 的一篇博客翻譯和完善而來。 ??? (1) 首先要下載 SMPTE VC-1 reference decoder,這個組織是要收費的,可以從這里下載免費的。 ??? (2) 在ffmpeg目錄下的libavcodec目錄下面,建立目錄libvc1。 ??? (3) 將VC1_reference_decoder_release6/decoder/目錄中的*.c和*.h文件全部copy到libvc1目錄下。 ??? (4) 將VC1_reference_decoder_release6/shared/目錄中的*.c和*.h文件全部copy到libvc1目錄下。 ??? (5) 將 libvc1-makefile.txt放到libvc1下的Makefile文件。 ??? (6) 將smpte-vc1.c文件放到libavcodec目錄下。 ??? (7) 修改libavcodec目錄下的vc9.c,將文件最后的wmv3_decoder這個AVCodec的structure,用#if 0和#endif包含起來,也就是使它失效了。 ??? (8) 修改libavcodec目錄下的allcodecs.c,將register_avcodec(&wmv3_decoder)上下的注釋去掉,使它發揮作用。 ??? (9) 修改libavcodec目錄下的Makefile,把OBJS的列表中加入smpte-vc1.o。 ??? (10)修改ffmpeg主目錄下的Makefile文件,把-L./libavcodec/libvc1 -lvc1$(BUILDSUF)加入到FFLIBS后面。 ??? (11) 進入ffmpeg/libavcodec/libav1,執行make ??? (12) 到ffmpeg主目錄下,執行config;make;make install。config時根據實際情況帶參數。 ? * 采用ffmpeg轉碼制作FLV文件的方法 ??? 采用ffmpeg轉碼制作FLV文件,和轉碼成其它媒體類型的重要差別是一定要有lame庫支持,因為FLV的聲音編碼采用mp3格式,非lame這個東東不行。編譯ffmpeg中加入lame庫真是一場災難,特別在windows下,很多參數都不能發揮作用,最后直接手工copy和改一些文件,記錄如下: ??? (1) 如果在Windows下編譯,第一步當然是下載MinGW和MSYS來裝上了。到http://mingw.sourceforge.net/去下載最新版的MinGW-5.0.2.exe和MSYS-1.0.11-2004.04.30-1.exe。 ??? (2) 先安裝MinGW,直接運行MinGW-5.0.2.exe安裝,選擇目錄,譬如選擇D:\MinGW為安裝目錄。安裝時需要選擇gcc和make模塊,安裝文件本身很小,會從網上下載模塊來安裝。 ??? (3) 然后安裝MSYS,也是直接運行MSYS-1.0.11-2004.04.30-1.exe安裝。安裝目錄一般選擇D:\MinGW\bin \1.0。,安裝過程會詢問剛才安裝MinGW的目錄,輸入D:\MinGW,其它都回答'Y'就搞定了。如果不清楚,可以看這個圖片效果。 ??? (4) 運行MSYS,桌面上有個圖標,雙擊就運行了,運行結果是一個模擬unix的命令窗口,后面的編譯都在這種狀態下進行。前面4步在linux不需要。 ??? (5) 到http://lame.sourceforge.net/去下載最新版的lame-3.97b2.tar.gz,copy到你認為合適的地方,解壓后進入lame解壓出來的目錄中。執行 ??????? ./configure --prefix=PREFIX ??????? make ??????? make install ??? (6) 就把編譯出來的include下的lame目錄copy到/usr/include目錄下,把lib下的幾個庫文件都copy到/usr/lib目錄下。這里注意有個變化,如果只copy lib目錄下的靜態庫到/usr/lib下,就是只copy libmp3lame.a文件,編譯出來的ffmpeg最終就不會對libmp3lame的動態庫有依賴關系,這是因為編譯首先找動態庫,動態庫沒有才找靜態庫。如果不做這個copy,后面編譯ffmpeg時無論如何指定參數,都會報錯LAME not found,不知道是哪里的bug。 ??? (7) 從http://ffmpeg.mplayerhq.hu/取得最新的ffmpeg,現在自由軟件都大量采用SVN了,要先裝一個SVN,可以去http://tortoisesvn.tigris.org/下載windows版的SVN,去http://subversion.tigris.org/下載linux版的SVN。SVN如何編譯安裝這里就省略了。 ??? (8) 如果在windows下,打開解壓后的ffmpeg目錄下的Makefile文件,在FFLIBS的那一行后面加上-lmp3lame$(BUILDSUF)。這個也不知道是哪個bug引起的,搞了好長時間才搞出來,郁悶。Linux下不用這樣。 ? 4 ffmpeg的編譯 ? ??? 配置編譯 ??? for x86 #./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-faadbin --enable-dts --enable-pp --enable-faad --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay make make install ? 補充1: 關于3gp的編譯,如果大家要編譯--enable-amr_nb-fixed,那就不能跟--enable-amr_nb同時編譯,我不大清楚這兩者到底有什么區別,似乎fixed是修正版,管他呢,編譯的方法: wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip 解壓以后把里面的文件都拷貝到libavcodec/amr目錄下 ? 修改libavcodec/amr/makefile 找到CFLAGS = -Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) 換成CFLAGS = -Wall -I. ? $(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO ? 整體編譯參數就是 #./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb-fixed --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-dts --enable-pp --enable-faad --enable-faadbin --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay make make install ? ?for x86的簡易配置 #./configure --prefix=./install --disable-shared --enable-pthreads --enable-libx264 --enable-libxvid --arch=i686 --enable-gpl #make #make install ? ??? for arm ??? 配置編譯 #./configure --prefix=/home/zht/redhatzht/sources/image-colletct/ffmpeg/install --enable-static --disable-shared --enable-libx264 --enable-libxvid --cross-compile --cc=arm-linux-gcc --arch=arm --enable-gpl --disable-strip --disable-network --disable-ipv6 --disable-vhook --disable-audio-beos --disable-audio-oss --disable-mpegaudio-hp? --enable-pthreads --enable-small --disable-parsers --disable-debug #make #make install ? 注意: ? (1)“/home/zht/redhatzht/sources/image-colletct/ffmpeg”為ffmpeg源碼所在目錄。 (2)“/usr/local/arm”為arm-linux-gcc交叉編譯器所在目錄。 (3) 如果庫文件安裝在/usr/local/lib目錄中導致配置失敗,可以在/etc/ld.so.conf文件中添加/usr/local/lib目錄,然后執行#ldconfig。 ??? x86上的ldconfig不能在arm上運行,arm上的ldconfig工具是在建立交叉編譯器時,編譯glibc是產生的,可以拷貝到arm-linux中。 (4) 本文大部分內容來自網絡,其中xvid,x264的庫,我親手安裝過,ffmpeg的配置編譯for x86的簡易配置,for arm,我親手配置編譯過,并在x86,arm上可用,編譯配置都是采用靜態庫。 |
轉載于:https://blog.51cto.com/prothesman/1411477
總結
以上是生活随笔為你收集整理的ffmpeg 配置与编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 韩式自助烤肉宣传文案30句
- 下一篇: Dll 导出类 [示例代码]