前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FFmpeg使用手册 - FFmpeg 编码支持与定制

FFmpeg使用手册 - FFmpeg 编码支持与定制

作者头像
用户3765803
发布2019-03-05 09:35:04
1.8K0
发布2019-03-05 09:35:04
举报
文章被收录于专栏:悟空被FFmpeg玩

3.1 FFmpeg本身支持一些编码、封装与协议,但是支持的依然有限,有些是因为licence,有些是因为相对来说比较大,FFmpeg所做的是提供一套基础的框架,而这些编码、封装与协议可以作为一个FFmpeg的模块挂在FFmpeg中,这些模块以第三方的外部库的方式提供支持,可以通过FFmpeg的源码的configure进行查看FFmpeg默认支持的编码、封装与协议的支持,不支持的可以再configure –help的时候查看所支持的第三方外部库,可以通过对应的参数选项进行支持:

通过上图可以看到,FFmpeg支持的外部库相对来说比较多,主要包含如下列表:   bzip2 1.0.6   Fontconfig 2.11.94   Frei0r 20130909-git-10d8360   GnuTLS 3.3.15   libiconv 1.14   libass 0.12.2   libbluray 0.8.1   libbs2b 3.1.0   libcaca 0.99.beta18   dcadec 20150506-git-98fb3b6   FreeType 2.5.5   Game Music Emu 0.6.0   GSM 1.0.13-4   iLBC 20141214-git-ef04ebe   Modplug-XMMS 0.8.8.5   LAME 3.99.5   OpenCORE AMR 0.1.3   OpenJPEG 1.5.2   Opus 1.1   RTMPDump 20140707-git-a1900c3   Schroedinger 1.0.11   libsoxr 0.1.1   Speex 1.2rc2   Theora 1.1.1   TwoLAME 0.3.13   vid.stab 0.98   VisualOn AAC 0.1.3   VisualOn AMR-WB 0.1.2   Vorbis 1.3.5   vpx 1.4.0   WavPack 4.75.0   WebP 0.4.3   x264 20150223-git-121396c   x265 1.7   XAVS svn-r55   Xvid 1.3.3   XZ Utils 5.2.1   zlib 1.2.8 这些外部库可以通过configure进行定制,命令行如下:

如果不需要这么多配置选项,只是想支持H264视频与AAC音频编码,可以讲配置项简化为如下:

如图所示,如果要支持H264与AAC,需要系统中包括libx264与libfaac的第三方库进行支持,否则会出现错误提示:

未找到libfaac错误提示

未找到libx264错误提示 如果需要支持H265编码,可以与支持h265基本类似,从前面的help信息中可以看到,只需要增加—enable-libx265即可支持h265编码,其他对应的编码类似。 FFmpeg默认支持的编码、封装与协议相对比较多,所以编译出来的FFmpeg体积比较大,在有些应用场景中并不需要FFmpeg所支持的一些编码、封装或者协议,可以通过configure --help查看到一些有用的裁剪操作:

可以通过这些选项关闭掉不需要用到的编码、封装与协议等模块,验证方法如下:

disable掉所有的模块后,可以看到ffmpeg的编译配置项输出信息几乎为空:

Disable所有的模块之后,可以根据定制,支持上自己所需要的模块,例如希望支持h264视频编码、aac音频编码、封装为mp4,则可以通过如下方式进行支持:

配置后输出的编译配置信息如下:

支持h264、aac编码与mp4封装的FFmpeg编译配置参数 从图中可以看到,FFmpeg已经支持了h264编码、aac编码与mp4封装格式的支持。这样通过编译后生成的ffmpeg即是配置裁剪过的ffmpeg,体积会比默认编译的ffmpeg小很多。 3.2 FFmpeg 的编码器支持 FFmpeg源代码中可以包含的编码非常多,常见的,不常见的都可以在编译配置列表中见到,可以通过使用编译配置命令configure --list-encoders参数来查看:

从图中可以看出,ffmpeg支持的encoder比较全面,比如aac、ac3、h264、h265、mpeg4、mpeg2video、pcm、flv的编码器支持。 3.3 FFmpeg 的解码器支持 FFmpeg源代码中本身包含了很多的解码支持,解码主要为输入的时候进行的解码,也可以理解为将压缩过的编码进行解压缩,关于解码的支持,可以通过./configure –list-decoders命令来进行查看:

从图中可以看到ffmpeg所支持的解码器模块decoders,支持了mpeg4、h264、h265(HEVC)、mp3等。 3.4 FFmpeg 的复用(Muxing)支持  FFmpeg的复用为将压缩后的编码封装到一个容器格式中(又叫Muxing),如果要查看FFmpeg源代码中都可以支持哪些容器格式,可以用过命令./configure --list-muxers查看:

从图中可以看到,ffmpeg支持生成裸流文件,例如h264、aac、pcm,也支持一些常见的格式,例如mp3、mp4、flv、hls、webm等。 3.5 FFmpeg的解复用(Demuxing)支持 FFmpeg的解复用为将读入的容器格式拆解开,将里面的压缩的音频流、视频流、字幕流、数据流等等提取出来(又叫Demuxing),如果要查看FFmpeg的源代码中都可以支持哪些输入的容器格式,可以通过命令./configure --list-demuxers 查看:

从图中可以看到,ffmpeg源码中已经支持的demuxer非常多,包含图片(image)、mp3、flv、MP4、mov、avi等。 3.6 FFmpeg 的通信协议支持 FFmpeg不仅仅支持本地的多媒体处理,而且还支持网络流媒体的处理,支持的网络流媒体协议相对来说也很全面,可以通过命令 ./configure --list-protocols 进行查看:

从图中可以看到,ffmpeg支持的流媒体协议比较多,包括mms、http、hls(M3U8)、rtmp、rtp、甚至支持tcp、udp,也支持本地文件file协议,和多个文件拼接串流的支持concat,在后面的章节中会有详细介绍。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/08/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档