音视频学习路线 知乎答主

2019-04-13 11:17发布

https://www.zhihu.com/question/27005982

如果研究生阶段方向是音视频编解码,本科期间应该打好哪些基础?

本人本科专业电子信息工程,专业课学过C语言,数电模电,信号系统,数字信号处理,通信原理。请问这里面哪些是学习音视频编解码的必备前置技能?另外还需要补充哪些知识?学习路线是? 关注者 147 被浏览 7942

4 个回答

武晓阳 武晓阳 视频监控/视频编解码/机器视觉 在视频编解码领域从事工作几年,还没有仔细总结一路怎么走来。趁知友提的问题,再回头看看,稍有心得体会,希望对你有帮助。
视频编解码所从事的工作大致分成3类:编解码算法研究、编解码标准实现、编解码应用开发。
  1. 编解码算法研究主要指制定标准相关工作,参与标准组织,制定新一代标准,比如HEVC、AVS等。该方向研究性较强,需要扎实的基础学科功底,如果在学校期间能够很好掌握线性代数、矩阵论、信息论、通信原理、数字信号处理、统计信号处理等课程,对该方面的发展帮助较大。目前国内参与标准制定的单位主要是高等院校、研究机构、以及一些大企业(海思、三星、联发科等)。
  2. 编解码标准实现主要在不同的平台实现符合标准的编码组件和解码组件。该方向要求熟悉标准文档、熟练掌握C语言编程、熟悉平台指令集优化、熟悉嵌入式开发、能够设计编码3大算法(模式选择、码率控制、运动搜索)等。国内设立这种岗位的公司很多,视频监控行业、视频会议行业、互联网行业、机器视觉行业等与多媒体相关的企业都会有。当然,大的公司分工细,会设定专门做编解码组件的岗位,专业化程度;小公司则要求全面,做事杂些。
  3. 编解码应用开发主要是在编解码组件的基础上,进行系统级开发,包括系统封装层、多媒体软件、传输协议、QoS等。该方向所从事的工作更编解码标准中的技术没有关系,主要要求软件集成能力、应用开发能力等。
从后往前看,回到“如何打好基础”的问题上来,有几个建议步骤:
  1. 学好线性代数、矩阵论、信息论、通信原理、数字信号处理、统计信号处理等课程;
  2. 专业方面熟悉一门标准,建议学H.264。相比H.265来说,H.264更加成熟,材料多。推荐看Iain E G Richardon 写的入门教程“H.264 and MPEG-4 Video Compression”,该书浅显易懂,思路清晰。随后,需要看H.264标准文档以了解更多细节,结合参考软件JM的解码部分一起看;
  3. 围绕预测编码、变换编码、熵编码,看一些学术文章,弄清楚标准中各技术背后的原理;
  4. 调试开源代码,该步骤可以与前面并行。多去玩玩ffmpeg等、x264等,提高编程能力,主要是C语言开发能力。试着去优化一、两个独立的模块,优化的平台选X86、ARM都可以。
  5. 试着用开源代码实现一些应用demo,这方面可以参看 @张晖 的回答。
发布于 2015-06-12 张晖 张晖 弯了大约五十度的直男,请叫我五十度灰 谢邀。在你目前列举出来的课程中,都将在你的编解码生涯中派上用场,有的在你入门时就会用到,有的在你进阶时才会用到,比如你哪天研究在硬件上做视音频开发的话就要用到数电模电了。
还有英语。
简单梳理一下学习路线的话,我认为是这样的:
视音频基础知识——视音频解码——视音频编码——视音频转码——视音频播放——具体应用——其他高阶内容
其实就对应于你在通信原理里学过的基本通信模型,下面以流媒体传输系统为例画个对应项示意图,基本上除了中间信道的部分,都是编解码生涯中要研究的东西。
没错,我们主要研究的就是信源。
下面我针对学习路线中的各部分单独做一下介绍
视音频基础知识:
1、视频、图像、音频的格式。这里的“格式”是一个广义的概念,既包括MP4,FLV这样的封装格式,也包括H264,MPEG2这样的编码格式,还包括420 422 444这样的取样格式,甚至RGB,HSV,YUV这样的彩 {MOD}空间也可以算作一种格式,将来在应用时还可能会遇到RTMP,HLS这样的流媒体传输协议或者其他的协议,都可以算作格式。这些纷繁复杂的格式就好比学英语时要背的单词,初学的时候可能觉得看不见摸不着,将来落实到代码上却是一目了然的,但是这个“背单词”的过程一定不能省。在一些论坛里经常能看到很多写代码的高手受困于不懂这些基本的概念,大概就是基础没打好。
2、信息论以及压缩编码入门。在你学习前面的各种格式时不可避免地会涉及到一些压缩编码的知识,随便拿一本讲视频编码的书,前面的绪论也都会简单讲讲信息论知识。简单来说,你需要知道视音频为什么要压缩编码,为什么可以实现压缩编码,怎样评价压缩编码的质量,以及具体编码过程中的一些概念,比如型(profile)和级(level),GOP,IPB帧,NAL单元,宏块,运动矢量、量化参数,帧内编码(当然你首先要知道帧率、场频这类的概念),帧间预测,这一大堆的概念,在不同的编码标准中还会有各种专属的概念。觉得前途黑暗想要放弃吗?不要怕,下面我会给你推荐一些参考书,看上一两本就差不多入门了。
如果说前面的各种格式相当于英语中的单词的话,这部分很显然就是语法了。
3、其他。相信你已经感觉到了,视音频基础知识确实是非常杂的,除了前面提到的“单词”和“语法”之外,还会有“视音频质量评价”这样的概念,我也不知道要怎么归类,差不多可以算是应用吧。说到视音频技术的应用,流媒体应用是很大的一块,那么这其中又涉及到很多的计算机网络知识。再比如高阶应用中的“硬件加速”,就又涉及到更多高端内容了。这些东西在你以后的工作中慢慢积累就好,还是那句话,不要怕。
4、参考书目。ITUISOIEC的各种标准,虽然一般人都看不下去,但越到后来就越发现这些标准才是最靠谱的;高教出版社《电视原理》;人民邮电出版社《数字电视广播原理与应用》《新一代视频压缩编码标准》《C++ Primer》;清华大学出版社《Visual C++音频视频技术开发与实战》;英语
5、扯蛋。闲着没事的时候玩玩单反、摄像机、非编软件,学校或者自己有条件的话去参观一下电视台,关注一下索尼佳能尼康松下等厂家的产品彩页及说明书,实践对于加深理解基础知识非常有用。 视音频编码、解码、转码:
在你学过前面的基础知识后,是时候上手实践了。编解转码方面有很多开源工程在业内外都得到了广泛的应用,最著名的是ffmpeg。你的编解码生涯有一半可能都要耗在ffmpeg身上了,这个项目是如此庞大,如此牛逼,我都不知道该怎么介绍了,而且你在学习这个项目的过程中也可以接触到包括x264在内的一大票其他开源项目。
希望你能科学上网活用谷歌广泛搜索国内外资料进行学习,相关教程非常多,其中就包括由我们实验室的雷霄骅师哥制作的一系列教程,我会在最后给出他的博客链接供你瞻仰,我已经瞻仰了很久。
为什么这里着重讲开源项目,因为只有做开源项目你才有可能深入调试源码,也就能看到很多原理上的东西,与前面所学的基础知识也就能一一对应上了。 视音频播放:
播放又是另外一大块内容了,就拿其中最简单的“视音频该如何同步”的问题,就绝对能难倒一大堆业内人士。除此之外,如何给视频加上一些“特效”“滤镜”这样的内容也可以算作是视音频播放方面需要研究的内容。同样也有很多开源闭源项目供我们学习,比如ffdshow,DirectShow,ffmpeg中的avfilter部分等,这一部分我也是新手,等我深入研究后再回来补充这一块。 具体应用:
就如我前面所说,视音频技术应用的一大块就是流媒体应用。
1、流媒体传输协议:现在业界应用比较广泛的是rtmp和hls。我研究比较多的是rtmp,但其实这个由adobe推出的协议很蛋疼,adobe官方给的文档很模糊,基本上只有librtmp这个开源项目可供应用,还不是和官方文档完全对应的。好吧我说的有点夸张,同学你将来不要放弃研究rtmp。
2、流媒体服务器:流媒体应用作为典型的客户服务器模式应用,除了要知道怎样在客户端收流、推流之外,有时候还需要研究一下服务器端的技术。FMS,red5,live555,crtmpserver等开源闭源服务器项目都是值得研究的内容。
3、流媒体应用现在很火,但是各家公司在带宽、存储上耗费的成本都很高,如何进行服务优化也是研究热点。 其他高阶内容:
硬件加速、码率控制、QoE优化、包括HEVC在内的各类最新最奇葩编码方法等,都是你在编解码生涯里需要一直关注的问题。 利益相关:
1、中国传媒大学信息工程学院数字视频质量评价实验室研一学生,所以被大神看到有说错的地方请指出,我一定学习
2、大神师哥的csdn博客地址雷霄骅(leixiaohua1020)的专栏
3、我们建立的视音频技术交流QQ群号:256061378,同时我们也正在筹备建立一个视音频技术教程网站,敬请期待。欢迎通过上面的群进行商业合作交流。
4、圣安东尼奥马刺队球迷 发布于 2014-12-11 知乎用户 知乎用户 多谢邀请
一楼回答的很系统了已经。
我这里再说一下吧
如果题主想致力于编解码算法而且会读博士的话:
那就参考视频标准以及开源代码,如果编程不是特别厉害的话,就以这个参考软件为主,先了解文本知识,再试着改写里面的算法,优化一些过程,尽量做到所有模块都基本了解,自己关注的领域了如指掌。
如果是读硕士的话:
建议眼界放宽一些,身边的Top2的学校的硕士生基本都不会在编解码领域继续做下去,选择的范围很宽阔,所以要自己练好看家本领,C、C++,linux系统架构,通信协议这些都能做到实际应用,要么做过很多工程实践的东西,对系统架构了解比较透彻,互联网公司都是需要这种工程人才的。
另外真正的流媒体算法,就是用得着让你优化HEVC等标准的,一般都是要求博士吧。而且公司一般会要求SSE,指令集优化,汇编语言,还是跟自己在开源代码里的研究有很大区别的。 以上是自己的一些理解。 发布于 2014-12-14 泽布隆 泽布隆 别动!让我举个栗子… 泻药啊,本人已经离开编解码很久了(哭…)
帮你邀请我们专业研究生来答
@张晖 @王延智 发布于 2014-12-10