下面是我搭建FFmpeg學習環境的步驟。html
從http://www.ffmpeg.org/download.html下載最新的FFmpeg版本,個人版本是ffmpeg-2.7.2。
python
編譯:linux
tar -xf ffmpeg-2.7.2.tar.bz2 mkdir build cd build/ ../ffmpeg-2.7.2/configure --enable-shared make sudo make install
在build/config.mak中能夠看到將動態庫和靜態庫安裝到什麼位置了:git
# Automatically generated by configure - do not modify! ifndef FFMPEG_CONFIG_MAK FFMPEG_CONFIG_MAK=1 FFMPEG_CONFIGURATION= --enable-shared prefix=/usr/local LIBDIR=$(DESTDIR)${prefix}/lib SHLIBDIR=$(DESTDIR)${prefix}/lib INCDIR=$(DESTDIR)${prefix}/include BINDIR=$(DESTDIR)${prefix}/bin DATADIR=$(DESTDIR)${prefix}/share/ffmpeg DOCDIR=$(DESTDIR)${prefix}/share/doc/ffmpeg MANDIR=$(DESTDIR)${prefix}/share/man PKGCONFIGDIR=$(DESTDIR)${prefix}/lib/pkgconfig SRC_PATH=/home/pengdl/work/study/FFmpeg/ffmpeg-2.7.2 ... ...
能夠看到,拷貝到了/usr/local/lib下。api
ls /usr/local/lib icu libavdevice.a libavfilter.so.5 libavutil.a libswresample.so.1 ocaml tmp lib64OpenglRender.so libavdevice.so libavfilter.so.5.16.101 libavutil.so libswresample.so.1.2.100 openssl libavcodec.a libavdevice.so.56 libavformat.a libavutil.so.54 libswscale.a p4v libavcodec.so libavdevice.so.56.4.100 libavformat.so libavutil.so.54.27.100 libswscale.so pkgconfig libavcodec.so.56 libavfilter.a libavformat.so.56 libswresample.a libswscale.so.3 python2.7 libavcodec.so.56.41.100 libavfilter.so libavformat.so.56.36.100 libswresample.so libswscale.so.3.1.101 python3.4
下面寫個簡單的測試程序,分別用靜態庫和動態庫測試,兩者的區別主要在Makefile上。工具
測試文件 demo.c學習
#include <stdio.h> #include <libavcodec/avcodec.h>
int main(int argc, const char *argv[]) { printf("%s\n", avcodec_configuration()); return 0; }
Makefile的內容以下:開發工具
LIBS_DIR=-L/usr/local/lib LIBS=-lavcodec LIBS+=-lavfilter LIBS+=-lavdevice LIBS+=-lswresample LIBS+=-lswscale LIBS+=-lavformat LIBS+=-lavutil INC=-I/usr/local/include INC+=-I/usr/local/include/libavcodec INC+=-I/usr/local/include/libavdevice INC+=-I/usr/local/include/libavfilter INC+=-I/usr/local/include/libavformat INC+=-I/usr/local/include/libavutil INC+=-I/usr/local/include/libswresample INC+=-I/usr/local/include/libswscale demo:demo.o gcc demo.o -o $@ $(LIBS_DIR) $(LIBS) demo.o:demo.c gcc $(INC) -c $^ -o $@ clean: rm demo
運行:測試
ls -lh demo -rwxrwxr-x 1 pengdl pengdl 8.5K 12月 31 16:11 demo ./demo --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:11-1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --disable-avserver --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
現將/usr/local/lib下的動態庫移動到其餘位置,Makefile的內容以下:ui
LIBS_DIR=-L/usr/local/lib LIBS=-lavcodec LIBS+=-lavfilter LIBS+=-lavdevice LIBS+=-lswresample LIBS+=-lswscale LIBS+=-lavformat LIBS+=-lavutil LIBS+=-lpthread LIBS+=-lm INC=-I/usr/local/include INC+=-I/usr/local/include/libavcodec INC+=-I/usr/local/include/libavdevice INC+=-I/usr/local/include/libavfilter INC+=-I/usr/local/include/libavformat INC+=-I/usr/local/include/libavutil INC+=-I/usr/local/include/libswresample INC+=-I/usr/local/include/libswscale demo:demo.o gcc demo.o -o $@ $(LIBS_DIR) $(LIBS) demo.o:demo.c gcc $(INC) -c $^ -o $@ clean: rm demo
注意,其中靜態庫的順序若是排列有問題,會致使編譯錯誤,如將libavutil放在libavcodec的前面,就會致使編譯錯誤。
運行:
ls -lh demo -rwxrwxr-x 1 pengdl pengdl 3.8M 12月 31 16:08 demo pengdl@pengdl-HP:~/work/study/FFmpeg/FFmpeg/demo$ ./demo --enable-shared
在win7下使用的開發工具VS2013,個人win7是64位的。
能夠從http://ffmpeg.zeranoe.com/builds/下載須要的動態庫和靜態庫,這裏須要注意的是32位和64位要搞清楚。
下載若是所示的兩個,shared的下載包裏有ffmpeg的動態庫,dev的下載包裏有靜態庫。
ffmpeg-20151231-git-4160900-win32-dev.7z
ffmpeg-20151231-git-4160900-win32-shared.7z
打開vs2013,新建一個控制檯應用程序,將shared包裏bin目錄下的動態庫拷貝到C:\Windows\system下,以下圖:
將dev下的lib和include拷貝到工程目錄下,以下圖:
右擊工程名,選擇屬性,做以下設置:
1. C/C++ --> 附加包含目錄 ---> 設置爲include 或者設置爲include的絕對路徑 E:\VC++\FFmpeg\testFFmpeg_32\testFFmpeg\include
2. 連接器 --> 常規 ---> 附加庫目錄 ---> 設置爲lib 或者 設置爲lib的絕對路徑 E:\VC++\FFmpeg\testFFmpeg_32\testFFmpeg\lib
3. 連接器 --> 輸入 ---> 附加依賴項 ---> 設置爲剛纔添加的靜態庫
點擊肯定。
測試程序 testFFmpeg.cpp :
#include "stdafx.h"
//Windows
extern "C" { #include "libavcodec/avcodec.h" }; int _tmain(int argc, _TCHAR* argv[]) { printf("\n<<Configuration>>\n%s", avcodec_configuration()); return 0; }
運行
點擊 調試 ---> 開始執行(不調試) 或者 Ctrl + F5
下面是用到的兩個下載包:
ffmpeg-20151231-git-4160900-win64-dev.7z
ffmpeg-20151231-git-4160900-win64-shared.7z
配置方法與32位相似,不一樣的是創建的工程須要是x64位的,同時再將用到的動態庫拷貝到 C:\Windows\system 下。
完。