前言

为什么要写这本书

在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官方文档:http://ffmpeg.org/documentation.html

❏ FFmpeg官方wiki:https://trac.ffmpeg.org

中文经典资料

❏ 雷霄骅博士总结的资料:http://blog.csdn.net/leixiaohua1020

❏ 罗索实验室:http://www.rosoo.net

❏ ChinaFFmpeg:http://bbs.chinaffmpeg.com

除了以上这些信息,还可以通过Google、百度等搜索引擎获得大量相关资料。

FFmpeg本身也提供了命令参数的详细说明,读者可以查看FFmpeg的帮助信息,后面的章节将会对此进行详细的介绍。

致谢

首先感谢我的爱人一直以来对我的工作和写作的支持与理解,是你在我背后默默的支持,才让我有更多的时间和精力放到工作及写作中。

感谢FFmpeg社区中的朋友们对本书提供了大力的支持,感谢蓝汛、高升、金山云、学而思网校与OnVideo的伙伴们长期的支持与贡献,没有你们也就不会有这本书的问世。

感谢机械工业出版社华章公司的编辑,感谢你们的耐心指导与帮助,引导我们顺利地完成了全部书稿。

感谢FFmpeg社区、ChinaUnix社区、LVS社区,社区很好地提供了技术沟通与交流的平台,帮助我们更好地成长。

谨以此书献给我最亲爱的家人、朋友、同事,以及众多为互联网、流媒体添砖加瓦的从业者们。

刘歧、赵文杰

2018年1月于北京