作为一个音视频多年开发的老兵,把我觉得最好的一些书籍整理出来,按最小系统原则,把音视频每一个分支领域最好的参考书籍,推荐1~2本给大家。希望阅读这些参考书籍,是熟悉音视频概念的最佳路径;希望读完这些参考书籍,你能成为这个行业的最佳手艺人!
—————
第二篇:编程基础
第一本:Essential C++ 中文版
C++的入门书籍浩如烟海,我推荐看这本[^1],简单明了适合快速入门。本书的中文译者侯捷老师,是对我影响最大的中文计算机作家,没有之一。他本人的《深入浅出MFC》可是当时我一字一句研读、消化过的作品。他本人的翻译,就是一门艺术。
C++既然是一门“语言”,自然就需要用学语言的方法来学习它,学多少实践多少,千万别等全部语法掌握的时候才动手。在你迅速地翻过这本两百来页的书后,对C++全貌有了认识,就开始动手吧。读本书,千万不要在把精力耗在语法细节上,而是需要抓住主要脉络,细节可以边写C++边学习。
学好C++,最重要的是需要有正经的项目经验,通过实践两到三个高难度项目,解决一些疑难杂症,再继而深入理解背后的设计理念,基本就可以号称自己“精通”C++。如果希望对细节有进一步的了解,可以看作者的另外一部大部头书籍,即《C++ Primer 中文版(第 5 版)》,此书有N多版本,根据自己的实际情况,挑一本即可,有能力的,直接上英文版本效果更好。
学好C++,可以让你在操作系统、数据结构方面的理解更深一层,而C++本身的Debug链条足够长,小到语法本身的问题、大到系统层面的问题,都值得深入研究。
学习C++可以让你对计算机系统有着相当深度的了解,基本上能具备音视频开发所需要的技能,但是如果你想做得更好,就需要针对 Windows、Android、iOS、Linux某一个平台的开发知识进行深入了解,好在操作系统的原理基本类似,一通百通。君不见一大堆Windows开发者转到Android、iOS开发后,一样如鱼得水。挑一个操作系统,深入钻研相关的渲染、音视频相关接口特性,有助于音视频知识的深入理解。而熟悉Linux,主要是为了在服务端做一些音视频的处理工作,比如说转码、混画、转发等操作。
音视频开发里,有很大一部分工作内容是工程技术开发,目的是解决功能性内容及平台性问题,与音视频算法本身关系并不大,如果你C++功力足够好,操作系统知识足够丰富,也足够在音视频领域有一番建树。
第二本:Matlab数值计算
做音视频处理算法,用Matlab实在太方便。信号处理及相关专业出身的同学对这个一定不陌生。Matlab编程语言本身不难,重要的是理解背后的数学思想。
作为编码语言本身,Matlab并不需要花太多精力,我推荐这本Matlab之父写的数值计算书籍《MATLAB数值计算》,对于“精通”了C++的人来说,Matlab从语言角度并没有什么难度,难的是要掌握使用这种语言的思维和场景,而从数值计算的角度,来学习使用Matlab就是最好的方法。
请记住最核心的原则:本质上来说,Matlab是一个数学计算工具而不是编程语言,它只是你数学思想的延伸,你对音视频处理的数学问题,可以用Matlab来方便地求解。
学有余力的同学,可以再看看《特别版MATHEMATICA全书》,Mathematica这个软件在中国用得不多,但是本书的思想可以给你的数学计算带来不一样的见解。
第三本:Python编程 : 从入门到实践
Python在机器学习方面,比Matlab更有优势,并且,免费(没错,在中国用Matlab的人,没几个是正版)。现在Python在科学计算方面,已经取得了长足的进步,和Matlab能力不相上下,当然,还有一大堆Matlab的仿真功能,Python还需要努力追赶。
Python在音视频领域,扮演着胶水语言的特色,方便快速地实现深度学习算法原型,方便快速地对实验统计数学做分析,以及对于数据收集网站、代码文档也能干得不亦乐乎。
对Python的学习,如果C++功底好,挑一本最薄的入门书籍即可。我本人推荐这本,足够简单通俗易懂,最重要的是篇幅不长,是一本Python入门的好教材。
第四本:计算机网络: 自顶向下方法
在音视频领域,音视频处理(包括美颜、解码码)负责生产、消费数据,而网络传输负责传输这些数据,负责快速而高效地把音视频数据搬运到对应的地方。
作为基础课程,本书并不能给你带来特别的东西,但可以给你建立网络传输基本概念,包括可靠性传输原理、拥塞控制原理等。
本书一个最大的特点,正如书名所说,自顶向下,从应用协议开始,往数据链路介绍网络知识,更直观更好理解,而且不失关键细节,但是又不纠结于细节。
看完本书,可以建立起音视频处理所需要的基本网络知识。音视频网络传输本身是一个实践性很强的科目,理论原理并不复杂深奥,反而很符合人类的直觉,要学会网络知识,多动手才是关键。
第五本:《动手学深度学习》
越来越多的音视频处理方法,包括编解码,都加入了机器学习元素,对于音视频从业人员来说,熟练掌握AI工具,就变成理所当然的事情。
我们不要求对机器学习网络有很深的理解,能用好就足够厉害。最重要的是,需要了解好网络的内涵,理解数学含义,把它用在合适的地方。
这里推荐《动手学深度学习》,本书偏动手实践,在刚开始,的确不用太纠结机器学习中的那些数学原理,多动手依然是秘诀。《动手学深度学习》(PyTorch版)是这本书关于PyTorch的实现,易读性非常好,对深度学习的介绍简单易懂,并且配有动手示例,书里的代码是用现在流行的 PyTorch 框架写的,看完就可以直接上战场。唯一不足,书里对反向传播的介绍,过于简单抽象。这本书作为音视频从业人员AI武器库的第一本书,足够称职。
本书同样有一个我最喜欢的优点:薄!专心阅读的话,几天就能看完,是音视频人员作为入门书籍的不二选择。
当然,这本书只是入门,如果你需要对各个深度学习网络有更深的了解,还需要翻查对应的各网络(如GoogleNet)资料。
附书籍详细信息:
- [1] Stanley B·Lippman and 侯捷. Essential C++中文版. 北京: 电子工业出版社, 2013.
- [2] Stanley B. Lippman, 拉乔伊, 默, 王刚, and 杨巨峰. C++ Primer中文版. 北京: 电子工业出版社, 2013.
- [3] Cleve B. Moler and 张志涌. MATLAB数值计算. 北京: 北京航空航天大学出版社, 2015.
- [4] Wolfram, Stephen, 赫孝良, and 周义仓. MATHEMATICA全书, 2002.
- [5] Eric Matthes and 袁国忠. Python编程: 从入门到实践. 北京: 人民邮电出版社, 2017.
- [6] James F. Kurose and Keith W. Ross. 计算机网络: 自顶向下方法. 北京: 机械工业出版社, 2018.
- [7] Zhang, Aston. 动手学深度学习, 2019.