编程技术 Vs 编码技术

在《程序员应知——如何处理海量数据》中,我介绍了怎么处理大量数据,大家似乎对大量数据处理很感兴趣。确实,在云计算的时代,不掌握一点数据处理技术,不是一个合格的程序员。掌握数据处理技术后,你还需要什么来提高自己?编程语言什么的都是浮云。我觉得,在程序员如白菜的今天,掌握一项底层的技术才能让自己常青,尤其在大公司。在淘宝工作的朋友告诉我,他们每天在研究怎么部署系统,才能加快数据的访问速度。这些深入到操作系统底层的东西您应该早忘了吧。今天,我将介绍另一种很多大公司急需的技术——如何对多媒体数据编码,节省空间。

百度的图片,优酷的视频,新浪的微博,无论如何压缩都满足不了这些公司的需求。据说谷歌曾经想把它的服务放到海上去,用海风发电。假如你的编码技术很牛,或者你的编码技术比常人牛一点,你都将得到这些公司的青睐。因为假如能让数据量减小1%,就能节省1000……TB空间了。这些服务器每天的耗电量就够你一天的工资了。所以花些时间学习编码技术,比多写几行代码有意义多了。

我不是编码方面的专家,不断瞎说。今天听了微软亚洲研究院高级研究吴枫博士的报告会,颇有感触,写出来与天下共享之。


吴枫博士1999年加入微软亚洲研究院,是当时著名的“微软四少”之一。关于他的更多介绍,参见http://research.microsoft.com/en-us/people/fengwu/default.aspx 总之,多媒体编码方面专家,很牛。

多媒体编码技术建立在“信息论”和“信号处理”的基础上。如果想深入学习的话,应该先学习这两个学科。我觉得要想真正掌握一项技术的话,必须打好基础。有信息论和信号处理方面的基础知识,提出来的新的编码方案才靠谱。我觉得,其它也如是。

编码技术的运用范围很多,数字电视机,个人电脑,手机,游戏机,传感器。。。可以说,现代文明建立在数字之上。而数字和现实的桥梁就是编码。编码技术就是在保证编码质量一样的情况下,让数据量更小。比如图像编码就是,保证图像质量的情况下,减小图片大小。让人不可思议的是,在很小质量损失的情况下,现在的编码技术可以让数据量压缩到百分之一。而且这个压缩比还在不断增大。看这两幅图片

能看出差异么? 但是它们的文件大小是3.13MB : 41.1KB = 76 :1

按照这个比例,百度如果把它缓存的片都压缩一下,能节省多少的服务器啊?这就是图像编码的魅力。

视频编码的压缩空间就更大了。因为视频由图片组成,另一方面可以利用图片之间关系进行数据压缩。

 

下面简单介绍下Block Matching (块匹配)

一般情况下,视频文件两帧之间,只是平移。这是因为大多数视频都是由摄像机拍摄的。摄像机基本上移来移去,很少放大缩大。另一方面,现实中的人更不太可能放大缩小了。更多的也是平移。

根据这个性质,把每一帧图片分成N*N块。于是,我们只需要保存每一张图片,和图片的“变化”。可以想像,这么简单的原理能带来的压缩率。

具体怎么编码,则需要看相关文章了。但是很明显,这种编码方式编码时很耗CPU。不同的移动方式会直接影响视频文件的大小。这就很需要算法的基本功了。我觉得,应该没有最佳的编码方式,因为你没法预测下一帧、下下一帧会是怎么样。考虑的帧数越多,最终的文件自然越小,当然计算量也更大。所以随着CPU速度的提高,视频文件压缩率就越高。

另一方面,解码视频文件就不需要这么费劲了。只需要按照每帧“变化”的指示来还原就行了。如此快速的解码不是偶然。因为,花大量时间来进行视频转换是可以接受的,但花大量时间来打开文件就不能容忍了。

报告会的内容就介绍到这里了

 


我相信,各位码农是不会关心上面编码技术的。心想,这关我什事?我只学好编程技术就好了。实际上,高级码农是不关心编程的。他们绞尽脑汁地寻找高效的解决方案,而不是考虑是不是该学学SilverLight。比如前面提到,大公司的急切需求:压缩视频文件节省服务器。Silverlight是无助的。解决这个问题,需要广博的知识和分析解决问题的能力。所以,我建议,不要仅学编程技术,多学点“编码技术”吧~

 

MicroTeam Hui

posted on 2010-12-17 22:12  MicroTeam  阅读(11522)  评论(58编辑  收藏  举报