如何裁剪FFmpeg—FFmpeg编译教程
作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音
众所周知,ffmpeg.exe 命令行的功能非常强大,但是他的体积非常庞大,如果是静态编译,ffmpeg.exe 的大小会高达到 20M,如下:

但是,在一些嵌入式设备,或者某些场景下,不需要用到这么多的功能,例如不需要捕捉摄像头的输入,不需要进行网络通信,等等。
这时候,可不可以把这些不需要的功能裁剪掉,让 ffmpeg.exe 或者 dll 的体积或者依赖更小呢?
答:是可以的,FFmpeg 的开发者早就想到了这个需求,所以在 configure 脚本里面定义了很多裁剪的选项,如下:
Component options:
--disable-avdevice disable libavdevice build
--disable-avcodec disable libavcodec build
--disable-avformat disable libavformat build
--disable-swresample disable libswresample build
--disable-swscale disable libswscale build
--disable-postproc disable libpostproc build
--disable-avfilter disable libavfilter build
--enable-avresample enable libavresample build (deprecated) [no]
--disable-pthreads disable pthreads [autodetect]
--disable-w32threads disable Win32 threads [autodetect]
--disable-os2threads disable OS/2 threads [autodetect]
--disable-network disable network support [no]
--disable-dct disable DCT code
--disable-dwt disable DWT code
--disable-error-resilience disable error resilience code
--disable-lsp disable LSP code
--disable-lzo disable LZO decoder code
--disable-mdct disable MDCT code
--disable-rdft disable RDFT code
--disable-fft disable FFT code
--disable-faan disable floating point AAN (I)DCT code
--disable-pixelutils disable pixel utils in libavutil
下面我们就以 msvc 的编译环境来试一下 --disable-avdevice ,--disable-network 选项的作用,参考《用msys2与msvc编译FFmpeg》,修改一下 configure 的参数,如下:
./configure \
--prefix=/home/loken/ffmpeg/build64/ffmepg-n4.4.1-small \
--enable-gpl \
--enable-nonfree \
--disable-shared \
--disable-optimizations \
--disable-asm \
--disable-stripping \
--toolchain=msvc \
--disable-avdevice \
--disable-network
编译完成之后,可以看到 ffmpeg.exe 的大小只有 19.8M,少了一点,如下:

而且 ffmpeg.exe 也不再依赖 gdi32.dll,等库,gdi32.dll 是用来捕捉摄像头之类用的。

广告:本人罗上文现在是声网的渠道合作商,各位如果有需要使用声网的产品,请通过我的渠道邀请链接注册,我会给与一定的优惠折扣。欢迎加我微信Loken1咨询。
