FFmpeg编译出来的库太大?试试这几招
目录
前言
一、编译出来的库为什么大?
二、去掉多余的格式
三、--enable-small
前言
之前合成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不是很紧张,或者通过其他的方式可以减小的话,就不用这个选项了,根据实际的项目进行权衡吧。我通过上面的前面的方式优化之后,已经不影响了,所以我没有加这个选项。
FFmpeg编译出来的库太大?试试这几招相关推荐
- 动图文件太大怎么办?一招教你在线压缩GIF图片
在日常的生活和工作中,经常会用到图片来进行信息的传递和展示.如果使用动图GIF文件,但是文件太大,被平台限制,无法上传使用的话,怎样才能快速的解决这个问题呢?随着互联网的不断发展,科技的不断进步,可以 ...
- ffmpeg 编译后静态库链接失败
:~$ gcc ./c/avio_ffmpeg.c -o ./c/avio_ffmpeg /tmp/cciJktYW.o:在函数'av_make_error_string'中: avio_ffmpeg ...
- web端引入字体库太大优化
下载字体库HYLEMIAOTIJ.ttf 新建css.css文件在static目录 在根目录: 新建font.html文件 把css文件引入到html文件中 css.css文件内容: @font-fa ...
- Qt 静态编译后的exe太大, 可以这样压缩.
1. 下载PECompact 下载地址:http://download.csdn.net/download/sniper_bing/7669247 , 不行大家就去baidu搜索下载就可以了这个是绿 ...
- ubuntu下ffmpeg编译安装
ubuntu下ffmpeg编译安装 解决库链接不上的问题 ubuntu下ffmpeg编译安装 1.ffmpeg是什么东西?相信很多人第一次接触这个东西,我先在这里做个简单的介绍. FFmpeg是一 ...
- ffmpeg库编译加文字_我自己的FFMpeg编译之路
为了编译这个东西,快折腾了一个星期了.期间经历了很多痛苦的过程,今天我把整个过程,以及在这个过程的感悟写下来,以备日后查看,也希望能帮到一些像我一样的兄弟姐妹. 在这一个星期里前前后后加起来总共使用了 ...
- 视频文件太大?使用FFmpeg来无损压缩它
咱们平时如果经常拍视频的话,都会遇到一个困境:视频文件太大了,存储的时候需要占用很多的空间.如果直接使用视频压缩工具来压缩码率的话,又会担心损失了视频的画质,这该怎么办呢? 这个时候,我们就可以使用f ...
- 如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)
0 前言 对于刚接触Android中ffmpeg的来说,ffmpeg的编译有很多坑,这些坑我都踩过一遍,而且网上文章鱼龙混杂写的太乱,不想太多人浪费时间在编译上,所以把成功的代码及编译步骤分享出来. ...
- linux编译ffmpeg成so,「ffmpeg」一 mac 环境下编译ffmpeg,生成so库文件
1.下载ffmpeg源码,官网,我这里直接采用git 方式下载: 下载ffmpeg.png 终端输入git命令: 静静等待~ 最后下载的版本为3.4.6 . image.png 这里注意一下,刚开始我 ...
最新文章
- Windows server2012虚拟机 密码重置
- Centos6.5-----nagios快速安装编译配置文档-全部虚拟环境
- 张恩民 php,php100视频教程第11讲(制作PHP+MYSQL留言板 上)中,张恩民老师提到的php100-11.txt文档...
- stm32换芯片编译
- UITableView cell自定义视图中插入Table实现复杂界面
- Java性能问题定位
- C++程序员拼命工作却不顾身体,是不值得的!
- CCNA之单臂路由实验
- insert into 多张表_麦克维尔直流变频多联机弹簧阻尼减震器_淞江集团-李工
- 低代码的兴起:花更少的钱,赚更多的钱
- nodejs中的模块的理解
- Bitmap和Drawable的互相转换
- 计算几何-判断两条线段是否相交
- cad尺寸标注快捷键_CAD中还能这样快速标注尺寸?怪不得同事天天准时下班
- 把IE武装到牙齿,IE插件全攻略(转)
- 下载全球高清卫星影像地图
- java分割图片为九宫格
- 【自制编译器】(一)
- 腹板拼接宽度_钢结构工程部件拼接一般规定
- Docker磁盘空间满的解决办法
热门文章
- 计算机网络中的OSI模型和TCP/IP模型
- 安卓App版权申请流程
- mysql数据库误删后能恢复吗_MySQL 数据库误删除后的数据恢复
- 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】
- OMAPL138的DSPLINK开发入门
- FileUriExposedException: file:////XXXXXXXX g exposed beyond app through ClipData.Item.getUri()问题的解决
- 网络分流器|网络分流器|网络分流采集器的应用领域
- iOS 审核总被拒?如何提升 iOS 审核通过率!
- 阿里云ACP级认证考试心得+过关经验
- 汽车VIN码与二手车市场