ffmpeg静态库的裁剪

直接对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源码下载。

[html] view plain copy
  1. #!/bin/sh  
  2. ./configure --enable-gpl --enable-nonfree --enable-version3 --enable-small\  
  3.  --disable-encoders --enable-libx264 --enable-libvo-aacenc --enable-encoder=libx264 --enable-encoder=libvo_aacenc\  
  4.  --disable-muxers --enable-muxer=mov --enable-muxer=mp4 --enable-muxer=avi\  
  5.  --disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=h264 --enable-decoder=mpeg4\  
  6.  --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\  
  7.  --disable-demuxers --enable-demuxer=h264 --enable-demuxer=avi --enable-demuxer=mpc --enable-demuxer=mov\  
  8.  --disable-parsers --enable-parser=aac --enable-parser=h264\  
  9.  --disable-protocols --enable-protocol=file\  
  10.  --disable-bsfs --enable-bsf=aac_adtstoasc --enable-bsf=h264_mp4toannexb\  
  11.  --disable-indevs\  
  12.  --disable-outdevs --disable-ffprobe --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-debug  
  13.   
  14. make   
  15. sudo make install  
我们可以比较./configure之后输出的信息来判断我们到底裁剪到了什么东西。

如果我们不进行裁剪,直接./configure 输出的结果如下:

我们可以看到不管是decoder还是encoder或者filter或者protocal我们都Enable了一大堆,在实际应用中我们完全不需要这么全面的库。

[html] view plain copy
  1. <pre name="code" class="html">nstall prefix            /usr/local  
  2. source path               .  
  3. C compiler                gcc  
  4. C library                 glibc  
  5. ARCH                      x86 (generic)  
  6. big-endian                no  
  7. runtime cpu detection     yes  
  8. yasm                      yes  
  9. MMX enabled               yes  
  10. MMXEXT enabled            yes  
  11. 3DNow! enabled            yes  
  12. 3DNow! extended enabled   yes  
  13. SSE enabled               yes  
  14. SSSE3 enabled             yes  
  15. AVX enabled               yes  
  16. XOP enabled               yes  
  17. FMA3 enabled              yes  
  18. FMA4 enabled              yes  
  19. i686 features enabled     yes  
  20. CMOV is fast              no  
  21. EBX available             yes  
  22. EBP available             yes  
  23. debug symbols             yes  
  24. strip symbols             yes  
  25. optimize for size         no  
  26. optimizations             yes  
  27. static                    yes  
  28. shared                    no  
  29. postprocessing support    no  
  30. new filter support        yes  
  31. network support           yes  
  32. threading support         pthreads  
  33. safe bitstream reader     yes  
  34. SDL support               no  
  35. opencl enabled            no  
  36. texi2html enabled         no  
  37. perl enabled              yes  
  38. pod2man enabled           yes  
  39. makeinfo enabled          no  
  40. makeinfo supports HTML    no  
  41.   
  42. External libraries:  
  43. iconv  
  44.   
  45. <strong><span style="color:#FF0000;"><span style="background-color: rgb(255, 255, 255);">Enabled decoders:span>span>strong>  
  46. aac         bink            h264  
  47. aac_latm        binkaudio_dct       hevc  
  48. aasc            binkaudio_rdft      hnm4_video  
  49. ac3         bintext         huffyuv  
  50. ac3_fixed       bmp         iac  
  51. adpcm_4xm       bmv_audio       idcin  
  52. adpcm_adx       bmv_video       idf  
  53. adpcm_afc       brender_pix     iff_byterun1  
  54. adpcm_ct        c93         iff_ilbm  
  55. adpcm_dtk       cavs            imc  
  56. adpcm_ea        cdgraphics      indeo2  
  57. adpcm_ea_maxis_xa   cdxl            indeo3  
  58. adpcm_ea_r1     cinepak         indeo4  
  59. adpcm_ea_r2     cljr            indeo5  
  60. adpcm_ea_r3     cllc            interplay_dpcm  
  61. adpcm_ea_xas        comfortnoise        interplay_video  
  62. adpcm_g722      cook            jacosub  
  63. adpcm_g726      cpia            jpeg2000  
  64. adpcm_g726le        cscd            jpegls  
  65. adpcm_ima_amv       cyuv            jv  
  66. adpcm_ima_apc       dca         kgv1  
  67. adpcm_ima_dk3       dfa         kmvc  
  68. adpcm_ima_dk4       dirac           lagarith  
  69. adpcm_ima_ea_eacs   dnxhd           loco  
  70. adpcm_ima_ea_sead   dpx         mace3  
  71. adpcm_ima_iss       dsd_lsbf        mace6  
  72. adpcm_ima_oki       dsd_lsbf_planar     mdec  
  73. adpcm_ima_qt        dsd_msbf        metasound  
  74. adpcm_ima_rad       dsd_msbf_planar     microdvd  
  75. adpcm_ima_smjpeg    dsicinaudio     mimic  
  76. adpcm_ima_wav       dsicinvideo     mjpeg  
  77. adpcm_ima_ws        dvbsub          mjpegb  
  78. adpcm_ms        dvdsub          mlp  
  79. adpcm_sbpro_2       dvvideo         mmvideo  
  80. adpcm_sbpro_3       dxtory          motionpixels  
  81. adpcm_sbpro_4       eac3            movtext  
  82. adpcm_swf       eacmv           mp1  
  83. adpcm_thp       eamad           mp1float  
  84. adpcm_vima      eatgq           mp2  
  85. adpcm_xa        eatgv           mp2float  
  86. adpcm_yamaha        eatqi           mp3  
  87. aic         eightbps        mp3adu  
  88. alac            eightsvx_exp        mp3adufloat  
  89. alias_pix       eightsvx_fib        mp3float  
  90. als         escape124       mp3on4  
  91. amrnb           escape130       mp3on4float  
  92. amrwb           evrc            mpc7  
  93. amv         ffv1            mpc8  
  94. anm         ffvhuff         mpeg1video  
  95. ansi            ffwavesynth     mpeg2video  
  96. ape         fic         mpeg4  
  97. ass         flac            mpegvideo  
  98. asv1            flic            mpl2  
  99. asv2            flv         msa1  
  100. atrac1          fourxm          msmpeg4v1  
  101. atrac3          fraps           msmpeg4v2  
  102. atrac3p         frwu            msmpeg4v3  
  103. aura            g723_1          msrle  
  104. aura2           g729            mss1  
  105. avrn            gif         mss2  
  106. avrp            gsm         msvideo1  
  107. avs         gsm_ms          mszh  
  108. avui            h261            mts2  
  109. ayuv            h263            mvc1  
  110. bethsoftvid     h263i           mvc2  
  111. bfi         h263p           mxpeg  
  112. nellymoser      ra_144          ulti  
  113. nuv         ra_288          utvideo  
  114. on2avc          ralf            v210  
  115. opus            rawvideo        v210x  
  116. paf_audio       realtext        v308  
  117. paf_video       rl2         v408  
  118. pam         roq         v410  
  119. pbm         roq_dpcm        vb  
  120. pcm_alaw        rpza            vble  
  121. pcm_bluray      rv10            vc1  
  122. pcm_dvd         rv20            vc1image  
  123. pcm_f32be       rv30            vcr1  
  124. pcm_f32le       rv40            vima  
  125. pcm_f64be       s302m           vmdaudio  
  126. pcm_f64le       sami            vmdvideo  
  127. pcm_lxf         sanm            vmnc  
  128. pcm_mulaw       sgi         vorbis  
  129. pcm_s16be       sgirle          vp3  
  130. pcm_s16be_planar    shorten         vp5  
  131. pcm_s16le       sipr            vp6  
  132. pcm_s16le_planar    smackaud        vp6a  
  133. pcm_s24be       smacker         vp6f  
  134. pcm_s24daud     smc         vp7  
  135. pcm_s24le       smvjpeg         vp8  
  136. pcm_s24le_planar    snow            vp9  
  137. pcm_s32be       sol_dpcm        vplayer  
  138. pcm_s32le       sonic           vqa  
  139. pcm_s32le_planar    sp5x            wavpack  
  140. pcm_s8          srt         webp  
  141. pcm_s8_planar       ssa         webvtt  
  142. pcm_u16be       stl         wmalossless  
  143. pcm_u16le       subrip          wmapro  
  144. pcm_u24be       subviewer       wmav1  
  145. pcm_u24le       subviewer1      wmav2  
  146. pcm_u32be       sunrast         wmavoice  
  147. pcm_u32le       svq1            wmv1  
  148. pcm_u8          svq3            wmv2  
  149. pcm_zork        tak         wmv3  
  150. pcx         targa           wmv3image  
  151. pgm         targa_y216      wnv1  
  152. pgmyuv          text            ws_snd1  
  153. pgssub          theora          xan_dpcm  
  154. pictor          thp         xan_wc3  
  155. pjs         tiertexseqvideo     xan_wc4  
  156. ppm         tiff            xbin  
  157. prores          tmv         xbm  
  158. prores_lgpl     truehd          xface  
  159. ptx         truemotion1     xl  
  160. qcelp           truemotion2     xsub  
  161. qdm2            truespeech      xwd  
  162. qdraw           tscc2           y41p  
  163. qpeg            tta         yop  
  164. qtrle           twinvq          yuv4  
  165. r10k            txd         zero12v  
  166. r210  
  167.   
  168. <strong><span style="color:#FF0000;">Enabled encoders:span>strong>  
  169. a64multi        jpegls          ppm  
  170. a64multi5       ljpeg           prores  
  171. aac         mjpeg           prores_aw  
  172. ac3         movtext         prores_ks  
  173. ac3_fixed       mp2         qtrle  
  174. adpcm_adx       mp2fixed        r10k  
  175. adpcm_g722      mpeg1video      r210  
  176. adpcm_g726      mpeg2video      ra_144  
  177. adpcm_ima_qt        mpeg4           rawvideo  
  178. adpcm_ima_wav       msmpeg4v2       roq  
  179. adpcm_ms        msmpeg4v3       roq_dpcm  
  180. adpcm_swf       msvideo1        rv10  
  181. adpcm_yamaha        nellymoser      rv20  
  182. alac            pam         s302m  
  183. alias_pix       pbm         sgi  
  184. amv         pcm_alaw        snow  
  185. ass         pcm_f32be       sonic  
  186. asv1            pcm_f32le       sonic_ls  
  187. asv2            pcm_f64be       srt  
  188. avrp            pcm_f64le       ssa  
  189. avui            pcm_mulaw       subrip  
  190. ayuv            pcm_s16be       sunrast  
  191. bmp         pcm_s16be_planar    svq1  
  192. cinepak         pcm_s16le       targa  
  193. cljr            pcm_s16le_planar    tiff  
  194. comfortnoise        pcm_s24be       tta  
  195. dca         pcm_s24daud     utvideo  
  196. dnxhd           pcm_s24le       v210  
  197. dpx         pcm_s24le_planar    v308  
  198. dvbsub          pcm_s32be       v408  
  199. dvdsub          pcm_s32le       v410  
  200. dvvideo         pcm_s32le_planar    vorbis  
  201. eac3            pcm_s8          wavpack  
  202. ffv1            pcm_s8_planar       webvtt  
  203. ffvhuff         pcm_u16be       wmav1  
  204. flac            pcm_u16le       wmav2  
  205. flv         pcm_u24be       wmv1  
  206. g723_1          pcm_u24le       wmv2  
  207. gif         pcm_u32be       xbm  
  208. h261            pcm_u32le       xface  
  209. h263            pcm_u8          xsub  
  210. h263p           pcx         xwd  
  211. huffyuv         pgm         y41p  
  212. jpeg2000        pgmyuv          yuv4  
  213.   
  214. Enabled hwaccels:  
  215.   
  216. <span style="color:#FF0000;"><strong>Enabled parsers:strong>span>  
  217. aac         dvd_nav         mpegvideo  
  218. aac_latm        dvdsub          opus  
  219. ac3         flac            png  
  220. adx         gsm         pnm  
  221. bmp         h261            rv30  
  222. cavsvideo       h263            rv40  
  223. cook            h264            tak  
  224. dca         hevc            vc1  
  225. dirac           mjpeg           vorbis  
  226. dnxhd           mlp         vp3  
  227. dpx         mpeg4video      vp8  
  228. dvbsub          mpegaudio       vp9  
  229. <span style="color:#FF0000;"><strong>  
  230. Enabled demuxers:strong>span>  
  231. aac         h263            nc  
  232. ac3         h264            nistsphere  
  233. act         hevc            nsv  
  234. adf         hls         nut  
  235. adp         hnm         nuv  
  236. adx         ico         ogg  
  237. aea         idcin           oma  
  238. afc         idf         paf  
  239. aiff            iff         pcm_alaw  
  240. amr         ilbc            pcm_f32be  
  241. anm         image2          pcm_f32le  
  242. apc         image2_alias_pix    pcm_f64be  
  243. ape         image2_brender_pix  pcm_f64le  
  244. aqtitle         image2pipe      pcm_mulaw  
  245. asf         image_bmp_pipe      pcm_s16be  
  246. ass         image_dpx_pipe      pcm_s16le  
  247. ast         image_exr_pipe      pcm_s24be  
  248. au          image_j2k_pipe      pcm_s24le  
  249. avi         image_jpeg_pipe     pcm_s32be  
  250. avr         image_jpegls_pipe   pcm_s32le  
  251. avs         image_pictor_pipe   pcm_s8  
  252. bethsoftvid     image_png_pipe      pcm_u16be  
  253. bfi         image_sgi_pipe      pcm_u16le  
  254. bink            image_sunrast_pipe  pcm_u24be  
  255. bintext         image_tiff_pipe     pcm_u24le  
  256. bit         image_webp_pipe     pcm_u32be  
  257. bmv         ingenient       pcm_u32le  
  258. boa         ipmovie         pcm_u8  
  259. brstm           ircam           pjs  
  260. c93         iss         pmp  
  261. caf         iv8         pva  
  262. cavsvideo       ivf         pvf  
  263. cdg         jacosub         qcp  
  264. cdxl            jv          r3d  
  265. cine            latm            rawvideo  
  266. concat          live_flv        realtext  
  267. data            lmlm4           redspark  
  268. daud            loas            rl2  
  269. dfa         lrc         rm  
  270. dirac           lvf         roq  
  271. dnxhd           lxf         rpl  
  272. dsf         m4v         rsd  
  273. dsicin          matroska        rso  
  274. dts         mgsts           rtp  
  275. dtshd           microdvd        rtsp  
  276. dv          mjpeg           sami  
  277. dxa         mlp         sap  
  278. ea          mlv         sbg  
  279. ea_cdata        mm          sdp  
  280. eac3            mmf         sdr2  
  281. epaf            mov         segafilm  
  282. ffm         mp3         shorten  
  283. ffmetadata      mpc         siff  
  284. filmstrip       mpc8            sln  
  285. flac            mpegps          smacker  
  286. flic            mpegts          smjpeg  
  287. flv         mpegtsraw       smush  
  288. fourxm          mpegvideo       sol  
  289. frm         mpl2            sox  
  290. g722            mpsub           spdif  
  291. g723_1          msnwc_tcp       srt  
  292. g729            mtv         stl  
  293. gif         mv          str  
  294. gsm         mvi         subviewer  
  295. gxf         mxf         subviewer1  
  296. h261            mxg         sup  
  297. swf         vc1t            webvtt  
  298. tak         vivo            wsaud  
  299. tedcaptions     vmd         wsvqa  
  300. thp         vobsub          wtv  
  301. tiertexseq      voc         wv  
  302. tmv         vplayer         xa  
  303. truehd          vqf         xbin  
  304. tta         w64         xmv  
  305. tty         wav         xwma  
  306. txd         wc3         yop  
  307. vc1         webm_dash_manifest  yuv4mpegpipe  
  308.   
  309. <span style="color:#FF0000;"><strong>Enabled muxers:strong>span>  
  310. a64         image2pipe      pcm_s24be  
  311. ac3         ipod            pcm_s24le  
  312. adts            ircam           pcm_s32be  
  313. adx         ismv            pcm_s32le  
  314. aiff            ivf         pcm_s8  
  315. amr         jacosub         pcm_u16be  
  316. asf         latm            pcm_u16le  
  317. asf_stream      lrc         pcm_u24be  
  318. ass         m4v         pcm_u24le  
  319. ast         matroska        pcm_u32be  
  320. au          matroska_audio      pcm_u32le  
  321. avi         md5         pcm_u8  
  322. avm2            microdvd        psp  
  323. bit         mjpeg           rawvideo  
  324. caf         mkvtimestamp_v2     rm  
  325. cavsvideo       mlp         roq  
  326. crc         mmf         rso  
  327. dash            mov         rtp  
  328. data            mp2         rtsp  
  329. daud            mp3         sap  
  330. dirac           mp4         segment  
  331. dnxhd           mpeg1system     smjpeg  
  332. dts         mpeg1vcd        smoothstreaming  
  333. dv          mpeg1video      sox  
  334. eac3            mpeg2dvd        spdif  
  335. f4v         mpeg2svcd       spx  
  336. ffm         mpeg2video      srt  
  337. ffmetadata      mpeg2vob        stream_segment  
  338. filmstrip       mpegts          swf  
  339. flac            mpjpeg          tee  
  340. flv         mxf         tg2  
  341. framecrc        mxf_d10         tgp  
  342. framemd5        null            truehd  
  343. g722            nut         uncodedframecrc  
  344. g723_1          oga         vc1  
  345. gif         ogg         vc1t  
  346. gxf         oma         voc  
  347. h261            opus            w64  
  348. h263            pcm_alaw        wav  
  349. h264            pcm_f32be       webm  
  350. hds         pcm_f32le       webm_dash_manifest  
  351. hevc            pcm_f64be       webp  
  352. hls         pcm_f64le       webvtt  
  353. ico         pcm_mulaw       wtv  
  354. ilbc            pcm_s16be       wv  
  355. image2          pcm_s16le       yuv4mpegpipe  
  356.   
  357. <span style="color:#FF0000;"><strong>Enabled protocols:strong>span>  
  358. cache           http            rtmpt  
  359. concat          httpproxy       rtp  
  360. crypto          icecast         srtp  
  361. data            md5         subfile  
  362. ffrtmphttp      mmsh            tcp  
  363. file            mmst            udp  
  364. ftp         pipe            udplite  
  365. gopher          rtmp            unix  
  366. hls  
  367.   
  368. <span style="color:#FF0000;"><strong>Enabled filters:strong>span>  
  369. adelay          crop            nullsrc  
  370. aecho           curves          overlay  
  371. aeval           dctdnoiz        pad  
  372. aevalsrc        decimate        pan  
  373. afade           dejudder        perms  
  374. aformat         deshake         pixdesctest  
  375. ainterleave     drawbox         psnr  
  376. allpass         drawgrid        removelogo  
  377. alphaextract        earwax          replaygain  
  378. alphamerge      edgedetect      rgbtestsrc  
  379. amerge          elbg            rotate  
  380. amix            equalizer       scale  
  381. amovie          extractplanes       select  
  382. anull           fade            sendcmd  
  383. anullsink       field           separatefields  
  384. anullsrc        fieldmatch      setdar  
  385. apad            fieldorder      setfield  
  386. aperms          flanger         setpts  
  387. aphaser         format          setsar  
  388. aresample       fps         settb  
  389. aselect         framepack       showcqt  
  390. asendcmd        framestep       showinfo  
  391. asetnsamples        gradfun         showspectrum  
  392. asetpts         haldclut        showwaves  
  393. asetrate        haldclutsrc     shuffleplanes  
  394. asettb          hflip           signalstats  
  395. ashowinfo       highpass        silencedetect  
  396. asplit          histogram       silenceremove  
  397. astats          hqx         sine  
  398. astreamsync     hue         smptebars  
  399. atempo          idet            smptehdbars  
  400. atrim           il          split  
  401. avectorscope        interleave      swapuv  
  402. bandpass        join            telecine  
  403. bandreject      lenscorrection      testsrc  
  404. bass            life            thumbnail  
  405. bbox            lowpass         tile  
  406. biquad          lut         transpose  
  407. blackdetect     lut3d           treble  
  408. blend           lutrgb          trim  
  409. cellauto        lutyuv          unsharp  
  410. channelmap      mandelbrot      vflip  
  411. channelsplit        mergeplanes     vignette  
  412. codecview       movie           volume  
  413. color           negate          volumedetect  
  414. colorbalance        noformat        w3fdif  
  415. colorchannelmixer   noise           xbr  
  416. compand         null            yadif  
  417. concat          nullsink        zoompan  
  418. copy  
  419.   
  420. <strong><span style="color:#FF0000;">Enabled bsfs:span>strong>  
  421. aac_adtstoasc       imx_dump_header     mp3_header_decompress  
  422. chomp           mjpeg2jpeg      noise  
  423. dump_extradata      mjpega_dump_header  remove_extradata  
  424. h264_mp4toannexb    mov2textsub     text2movsub  
  425.   
  426. <strong><span style="color:#FF0000;">Enabled indevs:span>strong>  
  427. dv1394          lavfi           v4l2  
  428. fbdev           oss  
  429.   
  430. <strong><span style="color:#FF0000;">Enabled outdevs:span>strong>  
  431. fbdev           oss         v4l2  
  432.   
  433. License: LGPL version 2.1 or later  
  434. Creating config.mak, config.h, and doc/config.texi...  
  435. config.h is unchanged  
  436. config.asm is unchanged  
  437. libavutil/avconfig.h is unchanged  


如果我们对ffmpeg按照上文进行裁剪,则./configure输出的信息是这样的:
比起之前的一堆东西,裁剪之后的静态库只是有目的的Enbale了一小部分编码器和解码器,filters和muxers也去掉了大部分,因此会变得很小。

install 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             no
strip symbols             yes
optimize for size         yes
optimizations             yes
static                    yes
shared                    yes
postprocessing support    yes
new filter support        yes
network support           no
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            libvo_aacenc        libx264

Enabled decoders:
aac            h263            mpeg4
aac_latm        h264

Enabled encoders:
libvo_aacenc        libx264

Enabled hwaccels:

Enabled parsers:

aac            ac3            h264
aac_latm        h263            mpeg4video

Enabled demuxers:
avi            mov            mpc
h264

Enabled muxers:
avi            mov            mp4

Enabled protocols:

file

Enabled filters:
amix            color            pad
anull            null            scale
aresample        overlay

Enabled bsfs:
aac_adtstoasc        h264_mp4toannexb

Enabled indevs:

Enabled outdevs:

License: nonfree and unredistributable
Creating config.mak, config.h, and doc/config.texi...
config.h is unchanged
config.asm is unchanged
libavutil/avconfig.h is unchanged

你可能感兴趣的:(ffmpeg)