直接对ffmpeg的源码进行编译链接生成的静态库非常大,仅仅avcodec就有几十兆。因此根据我们自己的需求对ffmpeg进行裁剪是非常必要的。
先不说具体的,直接上代码。在ffmpeg源码的根目录下新建shell脚本,命名为ffmpeg_small(随便起的),然后把下面的内容复制进去,修改执行权限,然后执行,大概十多分钟后就可以得到裁剪后的ffmpeg静态库啦。经过验证,生成的libavcodec.a仅有2MB,libavdevice仅有7.5KB,libavfilter仅有192.4KB,libavformat.a仅有450.2KB,libavutil为298.2KB。
另外需要说明的是,为了使得生成的静态库可以对视频进行h264编码,对音频进行aac编码,我们需要对ffmpeg添加x264和aac支持,因此需要下载编译x264和vo-aacenc的源码。x264源码从git上下载就行,vo-aacenc可以在bitbucket下载:vo-aacenc源码下载。
#!/bin/sh
./configure --enable-gpl --enable-nonfree --enable-version3 --enable-small\
--disable-encoders --enable-libx264 --enable-libvo-aacenc --enable-encoder=libx264 --enable-encoder=libvo_aacenc\
--disable-muxers --enable-muxer=mov --enable-muxer=mp4 --enable-muxer=avi\
--disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=h264 --enable-decoder=mpeg4\
--disable-filters --enable-filter=anull --enable-filter=null --enable-filter=aresample --enable-filter=pad --enable-filter=scale --enable-filter=overlay --enable-filter=amix --enable-filter=aresample\
--disable-demuxers --enable-demuxer=h264 --enable-demuxer=avi --enable-demuxer=mpc --enable-demuxer=mov\
--disable-parsers --enable-parser=aac --enable-parser=h264\
--disable-protocols --enable-protocol=file\
--disable-bsfs --enable-bsf=aac_adtstoasc --enable-bsf=h264_mp4toannexb\
--disable-indevs\
--disable-outdevs --disable-ffprobe --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-debug
make
sudo make install
我们可以比较./configure之后输出的信息来判断我们到底裁剪到了什么东西。
如果我们不进行裁剪,直接./configure 输出的结果如下:
我们可以看到不管是decoder还是encoder或者filter或者protocal我们都Enable了一大堆,在实际应用中我们完全不需要这么全面的库。
<pre name="code" class="html">nstall prefix /usr/local
source path .
C compiler gcc
C library glibc
ARCH x86 (generic)
big-endian no
runtime cpu detection yes
yasm yes
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AVX enabled yes
XOP enabled yes
FMA3 enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast no
EBX available yes
EBP available yes
debug symbols yes
strip symbols yes
optimize for size no
optimizations yes
static yes
shared no
postprocessing support no
new filter support yes
network support yes
threading support pthreads
safe bitstream reader yes
SDL support no
opencl enabled no
texi2html enabled no
perl enabled yes
pod2man enabled yes
makeinfo enabled no
makeinfo supports HTML no
External libraries:
iconv
<strong><span style=