FFmpeg从入门到精通pdf下载

FFmpeg从入门到精通百度网盘pdf下载

作者:
简介:FFmpeg从入门到精通
出版社:机械工业出版社
出版时间:2018-03-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐


  特别说明:购买此电子书,暂无附赠视频,敬请谅解。

内容简介
本书是一本介绍FFmpeg的实战技术指南,全书共10章,分为两个部分。部分(第1~7章)为FFmpeg的命令行使用篇,介绍了FFmpeg的基础组成部分、FFmpeg工具使用、FFmpeg的封装操作、FFmpeg的转码操作、FFmpeg的流媒体操作、FFmpeg的滤镜操作、FFmpeg的设备操作。第二部分(第8~10章)为FFmpeg的API使用篇,介绍了FFmpeg封装部分的API使用操作、FFmpeg编解码部分的API使用操作,FFmpeg滤镜部分的API使用操作,相关操作均以实例方式进行说明,包括新API及旧API的操作。
目录
版权信息
本书赞誉
推荐序一
推荐序二
推荐序三
前言
第一部分 FFmpeg的命令行使用篇
第1章 FFmpeg简介
1.1 FFmpeg的定义
1.2 FFmpeg的历史
1.3 FFmpeg的基本组成
1.4 FFmpeg的编解码工具ffmpeg
1.5 FFmpeg的播放器ffplay
1.6 FFmpeg的多媒体分析器ffprobe
1.7 FFmpeg编译
1.8 FFmpeg编码支持与定制
1.9 小结
第2章 FFmpeg工具使用基础
2.1 ffmpeg常用命令
2.2 ffprobe常用命令
2.3 ffplay常用命令
2.4 小结
第3章 FFmpeg转封装
3.1 音视频文件转MP4格式
3.2 视频文件转FLV
3.3 视频文件转M3U8
3.4 视频文件切片
3.5 音视频文件音视频流抽取
3.6 系统资源使用情况
3.7 小结
第4章 FFmpeg转码
4.1 FFmpeg软编码H.264与H.265
4.2 FFmpeg硬编解码
4.3 FFmpeg输出MP3
4.4 FFmpeg输出AAC
4.5 系统资源使用情况
4.6 小结
第5章 FFmpeg流媒体
5.1 FFmpeg发布与录制RTMP流
5.2 FFmpeg录制RTSP流
5.3 FFmpeg录制HTTP流
5.4 FFmpeg录制和发布UDP/TCP流
5.5 FFmpeg推多路流
5.6 FFmpeg生成HDS流
5.7 FFmpeg生成DASH流
5.8 小结
第6章 FFmpeg滤镜使用
6.1 FFmpeg滤镜Filter描述格式
6.2 FFmpeg为视频加水印
6.3 FFmpeg生成画中画
6.4 FFmpeg视频多宫格处理
6.5 FFmpeg音频流滤镜操作
6.6 FFmpeg音频音量探测
6.7 FFmpeg为视频加字幕
6.8 FFmpeg视频抠图合并
6.9 FFmpeg3D视频处理
6.10 FFmpeg定时视频截图
6.11 FFmpeg生成测试元数据
6.12 FFmpeg对音视频倍速处理
6.13 小结
第7章 FFmpeg采集设备
7.1 FFmpeg中Linux设备操作
7.2 FFmpeg中OS X设备操作
7.3 FFmpeg中Windows设备操作
7.4 小结
第二部分 FFmpeg的API使用篇
第8章 FFmpeg接口libavformat的使用
8.1 音视频流封装
8.2 音视频文件解封装
8.3 音视频文件转封装
8.4 视频截取
8.5 avio内存数据操作
8.6 小结
第9章 FFmpeg接口libavcodec的使用
9.1 FFmpeg旧接口的使用
9.2 FFmpeg新接口的使用
9.3 小结
第10章 FFmpeg接口libavfilter的使用
10.1 filtergraph和filter简述
10.2 FFmpeg中预留的滤镜
10.3 avfilter流程图
10.4 使用滤镜加LOGO操作
10.5 小结
前言
  前言
  为什么要写这本书
  在2011年之前,笔者的工作主要是以图形系统和Linux设备驱动程序开发为主,一个偶然的机会,笔者参与了Android的流媒体框架开发与技术支持工作,于是笔者开始快速地学习音视频流媒体技术。后来又因参与某广电的云计算项目时负责云转码项目,笔者又开始学习使用FFmpeg,在学习的过程中遇到了很多问题,而手册的内容又非常多,即使系统地学习一遍,也很难及时地解决自己遇到的问题。当时(2012年)网络中并没有现如今这么多的音视频相关技术文档分享,大多数都是提问,很少能看到精确的解答,所以最终还是耐心地读手册。在日积月累的学习过程中,笔者发现对FFmpeg感兴趣的人越来越多,因此便计划进一步地学习和整理FFmpeg的相关使用知识,以期能够帮助到更多的朋友。
  近几年,音视频流媒体技术的应用日益广泛,尤其是以视频直播中音视频流媒体处理的应用最甚,但是市面上与“老牌”音视频处理工具FFmpeg相关的介绍书籍少之又少,虽然市面上有些讲述音视频纯理论的书籍,但是并不能快速指导新人上手操作,并且大多数人看到FFmpeg的官方文档篇幅之长时望而却步,入门的新手日渐增多并且经常会有不同的人问到相同的问题,以上种种激发了笔者编写本书的想法。
  2014年笔者所在的公司主导流媒体CDN的开发,再加上市场对转码、移动端推流SDK、播放SDK以及音视频处理的需求愈加强烈,而FFmpeg又刚好可以快速满足上述需求的大多数场景,以上种种更加充分地说明了本书出版的必要性。
  在与FFmpeg相关的开发讨论与交流过程中,笔者了解到有很多公司尤其是云服务相关的公司,对FFmpeg的使用各有不同,有的使用命令行,有的使用SDK。所以本书分为两部分进行介绍,前半部分以FFmpeg的命令行使用为主,后半部分以SDK基本使用方法的介绍为主。当然,FFmpeg如今发展速度迅猛,本书讲解的内容将会尽力以最新版本为准。笔者将会持续与广大读者沟通交流FFmpeg的相关技术,希望能够为企业同行或者感兴趣的读者提供参考,笔者希望本书能够帮助大家提高工作效率、解决工作和学习中的实际问题。
  另外,市场上还鲜有出现关于FFmpeg实战相关的技术书籍,FFmpeg的技术知识主要以网络中的博客、论坛等为主,因此笔者希望本书的出版能够在图书领域和技术领域打开新的篇章,让我们的图书出版行业多一个FFmpeg音视频处理相关类目,也让我们的技术领域多一个音视频流媒体处理实战相关的方向。
  本书的读者对象
  本书的读者对象具体如下。
  ·音视频流媒体处理的研究人员
  ·音视频流媒体技术的研发人员
  ·对音视频流媒体处理开发感兴趣的技术人员
  ·计算机相关专业的高等院校学生
  如何阅读本书
  本书一共包含10章,按照所讲述的内容以及所面向读者的不同层次,可以划分为两大部分,具体如下。
  ·第一部分为FFmpeg的命令行使用篇,包括第1~7章,介绍了FFmpeg的基础组成部分、FFmpeg工具使用、FFmpeg的封装操作、FFmpeg的转码操作、FFmpeg的流媒体操作、FFmpeg的滤镜操作和FFmpeg的设备操作。
  ·第二部分为FFmpeg的API使用篇,包括第8~10章,介绍了FFmpeg封装部分的API使用操作、FFmpeg编解码部分的API使用操作和FFmpeg滤镜部分的API使用操作,相关操作均以实例方式进行说明,包括新API及旧API的操作。
  如果你已经能够通过源代码独立安装FFmpeg,那么可以跳过第1章直接从第2章开始阅读;如果你对命令行使用没有兴趣,或者希望使用FFmpeg的API开发,那么可以跳过前7章直接从第8章开始阅读。笔者建议最好是从第1章开始阅读。
  勘误和支持
  由于笔者的水平有限,加之编写的同时还要参与开发工作,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,都可以发送邮件到lq@chinaffmpeg.org或者740936897@qq.com,期待您的真挚反馈。
  另外,本书代码相关的举例均可以在FFmpeg的源代码目录的doc/examples中获得,也可以通过FFmpeg官方网站的文档获得:https://ffmpeg.org/doxygen/trunk/examples.html。
  FFmpeg发展了至少17年,积累了极其丰富的资料,能够满足大部分的需求。由于FFmpeg的更新与版本的迭代,不同版本之间使用的参数相对来说会稍微有所不同,由于本书篇幅有限,所以FFmpeg的很多交流社区的资源同样值得参考。
  官方文档资料
  ·FFmpeg官方文档://ffmpeg.org/documentation.html
  ·FFmpeg官方wiki:https://trac.ffmpeg.org
  中文经典资料
  ·雷霄骅博士总结的资料://blog.csdn.net/leixiaohua1020
  ·罗索实验室://www.rosoo.net
  ·ChinaFFmpeg://bbs.chinaffmpeg.com
  除了以上这些信息,还可以通过Google、百度等搜索引擎获得大量相关资料。
  FFmpeg本身也提供了命令参数的详细说明,读者可以查看FFmpeg的帮助信息,后面的章节将会对此进行详细的介绍。
  致谢
  首先感谢我的爱人一直以来对我的工作和写作的支持与理解,是你在我背后默默的支持,才让我有更多的时间和精力放到工作及写作中。
  感谢FFmpeg社区中的朋友们对本书提供了大力的支持,感谢蓝汛、高升、金山云、学而思网校与OnVideo的伙伴们长期的支持与贡献,没有你们也就不会有这本书的问世。
  感谢机械工业出版社华章公司的编辑,感谢你们的耐心指导与帮助,引导我们顺利地完成了全部书稿。
  感谢FFmpeg社区、ChinaUnix社区、LVS社区,社区很好地提供了技术沟通与交流的平台,帮助我们更好地成长。
  谨以此书献给我最亲爱的家人、朋友、同事,以及众多为互联网、流媒体添砖加瓦的从业者们。
  刘歧、赵文杰
  2018年1月于北京
精彩书摘
  FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。
  FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等;FFmpeg框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。
  FFmpeg中的“FF”指的是“Fast Forward”,曾经有人写信给FFmpeg的项目负责人,询问“FF”是不是代表“Fast Free”或者“Fast Fourier”的意思。FFmpeg中的“mpeg”则是人们通常理解的Moving Picture Experts Group(动态图像专家组),FFmpeg是一个很全面的图像处理套件。其实从2000年发展至今,FFmpeg中的“FF”已经可以用各种组合进行理解,因为FFmpeg的强大足以支撑这些意义。
  想要深入了解一个软件、一个系统,首先要了解其发展史,下面就来介绍一下FFmpeg的整体发展过程。
  FFmpeg由法国天才程序员Fabrice Bellard在2000年时开发出初版;后来发展到2004年,Fabrice Bellard找到了FFmpeg的接手人,这个人就是至今还在维护FFmpeg的Michael Niedermayer。Michael Niedermayer对FFmpeg的贡献非常大,其将滤镜子系统libavfilter加入FFmpeg项目中,使得FFmpeg的多媒体处理更加多样、更加方便。在FFmpeg发布了0.5版本之后,很长一段时间没有进行新版本的发布,直到后来FFmpeg采用Git作为版本控制服务器以后才开始继续进行代码更新、版本发布,当然也是时隔多年之后了;2011年3月,在FFmpeg项目中有一些提交者对FFmpeg的项目管理方式并不满意,因而重新创建了一个新的项目,命名为Libav,该项目尽管至今并没有FFmpeg发展这么迅速,但是提交权限相对FFmpeg更加开放;2015年8月,Michael Niedermayer主动辞去FFmpeg项目负责人的职务。Michael Niedermayter从Libav中移植了大量的代码和功能至FFmpeg中,Michael Niedermayer辞职的主要目的是希望两个项目最终能够一起发展,若能够合并则更好。时至今日,在大多数的Linux发行版本系统中已经使用FFmpeg来进行多媒体处理。
  作为一套开源的音视频编解码套件,FFmpeg可以通过互联网自由获取。FFmpeg的源码Git库提供了多站同步的获取方式,具体如下。
  ·git://source.ffmpeg.org/ffmpeg.git
  ·//git.videolan.org/?p=ffmpeg.git
  ·https://github.com/FFmpeg/FFmpeg
  FFmpeg发展至今,已经被许多开源项目所采用,如ijkplayer、ffmpeg2theora、VLC、MPlayer、HandBrake、Blender、Google Chrome等。DirectShow/VFW的ffdshow(外部工程)和QuickTime的Perian(外部工程)也采用了FFmpeg。由于FFmpeg是在LGPL/GPL协议下发布的(如果使用了GPL协议发布的模块则必须采用GPL协议),任何人都可以自由使用,但必须严格遵守LGPL/GPL协议。随着参与的人越来越多,FFmpeg的发展也越来越快,至本书完稿,FFmpeg已经发布到3.3版本。
  FFmpeg框架的基本组成包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtil等模块库,结构如图1-1所示。
  下面针对这些模块做一个大概的介绍。
  (1)FFmpeg的封装模块AVFormat
  AVFormat中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如MP4、FLV、KV、TS等文件封装格式,RTMP、RTSP、MMS、HLS等网络协议封装格式。FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的扩展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块。
  (2)FFmpeg的编解码模块AVCodec
  AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。AVCodec除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用x265编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器。如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块,关于AVCode的更多相关信息以及使用信息将会在后面的章节中进行详细的介绍。
  (3)FFmpeg的滤镜模块AVFilter
  AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter中,滤镜框架可以有多个输入和多个输出。我们参考下面这个滤镜处理的例子,如图1-2所示。
精彩插图