FFmpeg编译出来的库太大?试试这几招

 


前言

    之前合成Mp4的项目功能已经完成了,在实际测试的时候发现一个问题,就是编译出来的几个库文件加起来太大了,很占空间,所以想优化压缩一下。

一、编译出来的库为什么大?

    FFmpeg的功能实在是太强大,支持视频的编码、解码、合成、分离、转换格式等等,而且几乎支持所有的视频和音频的编码格式,大部分人使用只能用到其中的一部分功能。在编译的时候,可以通过编译选项查看到当前版本支持的编码格式,下面是查看支持对应功能信息的指令

Help options:
  --help                   print this message
  --quiet                  Suppress showing informative output
  --list-decoders          show all available decoders
  --list-encoders          show all available encoders
  --list-hwaccels          show all available hardware accelerators
  --list-demuxers          show all available demuxers
  --list-muxers            show all available muxers
  --list-parsers           show all available parsers
  --list-protocols         show all available protocols
  --list-bsfs              show all available bitstream filters
  --list-indevs            show all available input devices
  --list-outdevs           show all available output devices
  --list-filters           show all available filters

 比如查看解码支持的格式:

zqq@zqq-virtual-machine:~/share/work/3rdlib/FFmpeg-n3.3.1_bak$ ./configure --list-decoders
aac                     als                     dpx                     h264                    loco                    msmpeg4v3               pcm_zork                snow                    vmnc
aac_at                  amr_nb_at               dsd_lsbf                h264_crystalhd          m101                    msrle                   pcx                     sol_dpcm                vorbis
aac_fixed               amrnb                   dsd_lsbf_planar         h264_cuvid              mace3                   mss1                    pgm                     sonic                   vp3
aac_latm                amrwb                   dsd_msbf                h264_mediacodec         mace6                   mss2                    pgmyuv                  sp5x                    vp5
aasc                    amv                     dsd_msbf_planar         h264_mmal               magicyuv                msvideo1                pgssub                  speedhq                 vp6
ac3                     anm                     dsicinaudio             h264_qsv                mdec                    mszh                    pictor                  srt                     vp6a
ac3_at                  ansi                    dsicinvideo             h264_vda                metasound               mts2                    pixlet                  ssa                     vp6f
ac3_fixed               ape                     dss_sp                  h264_vdpau              microdvd                mvc1                    pjs                     stl                     vp7
adpcm_4xm               apng                    dst                     hap                     mimic                   mvc2                    png                     subrip                  vp8
adpcm_adx               ass                     dvaudio                 hevc                    mjpeg                   mxpeg                   ppm                     subviewer               vp8_cuvid
adpcm_afc               asv1                    dvbsub                  hevc_cuvid              mjpeg_cuvid             nellymoser              prores                  subviewer1              vp8_mediacodec
adpcm_aica              asv2                    dvdsub                  hevc_mediacodec         mjpegb                  nuv                     prores_lgpl             sunrast                 vp8_qsv
adpcm_ct                atrac1                  dvvideo                 hevc_qsv                mlp                     on2avc                  psd                     svq1                    vp9
adpcm_dtk               atrac3                  dxa                     hnm4_video              mmvideo                 opus                    ptx                     svq3                    vp9_cuvid
adpcm_ea                atrac3al                dxtory                  hq_hqa                  motionpixels            paf_audio               qcelp                   tak                     vp9_mediacodec
adpcm_ea_maxis_xa       atrac3p                 dxv                     hqx                     movtext                 paf_video               qdm2                    targa                   vplayer
adpcm_ea_r1             atrac3pal               eac3                    huffyuv                 mp1                     pam                     qdm2_at                 targa_y216              vqa
adpcm_ea_r2             aura                    eac3_at                 iac                     mp1_at                  pbm                     qdmc                    tdsc                    wavpack
adpcm_ea_r3             aura2                   eacmv                   idcin                   mp1float                pcm_alaw                qdmc_at                 text                    webp
adpcm_ea_xas            avrn                    eamad                   idf                     mp2                     pcm_alaw_at             qdraw                   theora                  webvtt
adpcm_g722              avrp                    eatgq                   iff_ilbm                mp2_at                  pcm_bluray              qpeg                    thp                     wmalossless
adpcm_g726              avs                     eatgv                   ilbc_at                 mp2float                pcm_dvd                 qtrle                   tiertexseqvideo         wmapro
adpcm_g726le            avui                    eatqi                   imc                     mp3                     pcm_f16le               r10k                    tiff                    wmav1
adpcm_ima_amv           ayuv                    eightbps                indeo2                  mp3_at                  pcm_f24le               r210                    tmv                     wmav2
adpcm_ima_apc           bethsoftvid             eightsvx_exp            indeo3                  mp3adu                  pcm_f32be               ra_144                  truehd                  wmavoice
adpcm_ima_dat4          bfi                     eightsvx_fib            indeo4                  mp3adufloat             pcm_f32le               ra_288                  truemotion1             wmv1
adpcm_ima_dk3           bink                    escape124               indeo5                  mp3float                pcm_f64be               ralf                    truemotion2             wmv2
adpcm_ima_dk4           binkaudio_dct           escape130               interplay_acm           mp3on4                  pcm_f64le               rawvideo                truemotion2rt           wmv3
adpcm_ima_ea_eacs       binkaudio_rdft          evrc                    interplay_dpcm          mp3on4float             pcm_lxf                 realtext                truespeech              wmv3_crystalhd
adpcm_ima_ea_sead       bintext                 exr                     interplay_video         mpc7                    pcm_mulaw               rl2                     tscc                    wmv3_vdpau
adpcm_ima_iss           bmp                     ffv1                    jacosub                 mpc8                    pcm_mulaw_at            roq                     tscc2                   wmv3image
adpcm_ima_oki           bmv_audio               ffvhuff                 jpeg2000                mpeg1_cuvid             pcm_s16be               roq_dpcm                tta                     wnv1
adpcm_ima_qt            bmv_video               ffwavesynth             jpegls                  mpeg1_vdpau             pcm_s16be_planar        rpza                    twinvq                  ws_snd1
adpcm_ima_qt_at         brender_pix             fic                     jv                      mpeg1video              pcm_s16le               rscc                    txd                     xan_dpcm
adpcm_ima_rad           c93                     flac                    kgv1                    mpeg2_crystalhd         pcm_s16le_planar        rv10                    ulti                    xan_wc3
adpcm_ima_smjpeg        cavs                    flashsv                 kmvc                    mpeg2_cuvid             pcm_s24be               rv20                    utvideo                 xan_wc4
adpcm_ima_wav           ccaption                flashsv2                lagarith                mpeg2_mmal              pcm_s24daud             rv30                    v210                    xbin
adpcm_ima_ws            cdgraphics              flic                    libcelt                 mpeg2_qsv               pcm_s24le               rv40                    v210x                   xbm
adpcm_ms                cdxl                    flv                     libfdk_aac              mpeg2video              pcm_s24le_planar        s302m                   v308                    xface
adpcm_mtaf              cfhd                    fmvc                    libgsm                  mpeg4                   pcm_s32be               sami                    v408                    xl
adpcm_psx               cinepak                 fourxm                  libgsm_ms               mpeg4_crystalhd         pcm_s32le               sanm                    v410                    xma1
adpcm_sbpro_2           clearvideo              fraps                   libilbc                 mpeg4_cuvid             pcm_s32le_planar        scpr                    vb                      xma2
adpcm_sbpro_3           cljr                    frwu                    libopencore_amrnb       mpeg4_mediacodec        pcm_s64be               screenpresso            vble                    xpm
adpcm_sbpro_4           cllc                    g2m                     libopencore_amrwb       mpeg4_mmal              pcm_s64le               sdx2_dpcm               vc1                     xsub
adpcm_swf               comfortnoise            g723_1                  libopenh264             mpeg4_vdpau             pcm_s8                  sgi                     vc1_crystalhd           xwd
adpcm_thp               cook                    g729                    libopenjpeg             mpeg_vdpau              pcm_s8_planar           sgirle                  vc1_cuvid               y41p
adpcm_thp_le            cpia                    gif                     libopus                 mpeg_xvmc               pcm_u16be               sheervideo              vc1_mmal                ylc
adpcm_vima              cscd                    gsm                     libschroedinger         mpegvideo               pcm_u16le               shorten                 vc1_qsv                 yop
adpcm_xa                cyuv                    gsm_ms                  libspeex                mpl2                    pcm_u24be               sipr                    vc1_vdpau               yuv4
adpcm_yamaha            dca                     gsm_ms_at               libvorbis               msa1                    pcm_u24le               smackaud                vc1image                zero12v
aic                     dds                     h261                    libvpx_vp8              msmpeg4_crystalhd       pcm_u32be               smacker                 vcr1                    zerocodec
alac                    dfa                     h263                    libvpx_vp9              msmpeg4v1               pcm_u32le               smc                     vmdaudio                zlib
alac_at                 dirac                   h263i                   libzvbi_teletext        msmpeg4v2               pcm_u8                  smvjpeg                 vmdvideo                zmbv
alias_pix               dnxhd                   h263p

 可以看到支持的格式很齐全,但是如果把这些都包含进去的话,编译出来的库会很大。所以可以只支持我们需要的格式就好了,把其他的一些可以关掉。

二、去掉多余的格式

Individual component options:
  --disable-everything     disable all components listed below
  --disable-encoder=NAME   disable encoder NAME
  --enable-encoder=NAME    enable encoder NAME
  --disable-encoders       disable all encoders
  --disable-decoder=NAME   disable decoder NAME
  --enable-decoder=NAME    enable decoder NAME
  --disable-decoders       disable all decoders
  --disable-hwaccel=NAME   disable hwaccel NAME
  --enable-hwaccel=NAME    enable hwaccel NAME
  --disable-hwaccels       disable all hwaccels
  --disable-muxer=NAME     disable muxer NAME
  --enable-muxer=NAME      enable muxer NAME
  --disable-muxers         disable all muxers
  --disable-demuxer=NAME   disable demuxer NAME
  --enable-demuxer=NAME    enable demuxer NAME
  --disable-demuxers       disable all demuxers
  --enable-parser=NAME     enable parser NAME
  --disable-parser=NAME    disable parser NAME
  --disable-parsers        disable all parsers
  --enable-bsf=NAME        enable bitstream filter NAME
  --disable-bsf=NAME       disable bitstream filter NAME
  --disable-bsfs           disable all bitstream filters
  --enable-protocol=NAME   enable protocol NAME
  --disable-protocol=NAME  disable protocol NAME
  --disable-protocols      disable all protocols
  --enable-indev=NAME      enable input device NAME
  --disable-indev=NAME     disable input device NAME
  --disable-indevs         disable input devices
  --enable-outdev=NAME     enable output device NAME
  --disable-outdev=NAME    disable output device NAME
  --disable-outdevs        disable output devices
  --disable-devices        disable all devices
  --enable-filter=NAME     enable filter NAME
  --disable-filter=NAME    disable filter NAME
  --disable-filters        disable all filters

 编译选项中提供了disable所有的解码格式的选项 --disable-decoders ,我们就可以先把所以的解码选项都禁止掉,然后通过--enable-decoder=NAME 这个选项来添加你项目中用的编码格式,比如我的项目中用到了H264和AAC合成Mp4,那我的编译选项中就可以先禁止掉所有的decoders,demuxers,然后打开和ACC和H264相关的。我没有用到编码,所以encoders也可以关掉。类似的你也可以去尝试一下其他的功能选项。

./configure	--prefix=`pwd`/out     			\
			--target-os=linux               \
			--enable-cross-compile          \
			--cc=arm-none-linux-gnueabi-gcc	\
			--cxx=arm-none-linux-gnueabi-g++ 	\
			--arch=arm  					\
			--disable-yasm 					\
			--disable-stripping 			\
			--disable-asm 					\
			--enable-shared 				\
			--disable-static				\
			--disable-encoders 				\
			--disable-decoders 				\
			--enable-decoder=aac  			\
			--enable-decoder=aac_at  		\
			--enable-decoder=h264 			\
			--enable-decoder=h264_mediacodec 	\
			--disable-demuxers 				\
			--enable-demuxer=aac 			\
			--enable-demuxer=h264 			\

 我按照上面的脚本实际编译出来的话,库的体积比原来减小了将近2/3,优化效果还是很明显的。

三、--enable-small

FFmpeg还提供了一个选项来减小体积,就是--enable-small 

--enable-small           optimize for size instead of speed

我们可以看到后面的注释,意思是这个选项是通过速度来换取大小,也就是说牺牲编码解码速度来换取库的体积的减小,这个就要看你实际的需求了,如果flash不是很紧张,或者通过其他的方式可以减小的话,就不用这个选项了,根据实际的项目进行权衡吧。我通过上面的前面的方式优化之后,已经不影响了,所以我没有加这个选项。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独尊0136

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值