我非常想知道编解码器内部会发生什么。我想了解音频编码器和解码器内部的元素。如果你能给我一些链接,我可以找到一些好的学习资料,我将非常高兴。
准确地说,我想知道编解码器如何解析媒体文件。
答案 0 :(得分:25)
你的标题询问A / V压缩,但你的其他评论谈论解析媒体文件&识别其编解码器。这些是非常不同的任务:spec'd&由不同的组织实施,由大多数多媒体库中的不同API执行,并且最重要的是需要非常不同的技能集。
A / V文件格式与任何其他文件格式没有太大区别,而后者只是formal grammars。解析,验证和生成的对象图在概念上与任何其他语法没有什么不同 - 在实践中,它们往往比在标准CS课程(编译器,有限自动机)中遇到的语法简单得多。 AVI file format在这一点上有点陈旧,但我仍然建议从那里开始,因为:
同时,编解码器是您在“消费者”软件中可能找到的最复杂的算法。他们在学术界和大公司的研发机构(包括其庞大的专利图书馆)中取得了很大的进步。要精通编解码器,您至少需要了解以下基础知识:
如果你已经有了不错的背景(例如,你已经选择了一个或两个本科水平的“工程师数学”类课程)那么我就说潜水了。许多最好的A / V编解码器是开放的源:
答案 1 :(得分:10)
通常,视频压缩涉及丢弃尽可能多的信息,同时对最终用户的观看体验影响最小。例如,使用二次采样YUV而不是RGB将视频大小切成两半。这是可能的,因为人眼对颜色的敏感度低于对亮度的敏感度。在YUV中,Y值是亮度,U和V值表示颜色。因此,您可以丢弃一些减少文件大小的颜色信息,而不会让观察者注意到任何差异。
之后,大多数压缩技术尤其利用了2个冗余。第一个是时间冗余,第二个是空间冗余。
时间冗余指出视频序列中的连续帧非常相似。通常,视频将是每秒20-30帧的量级,并且在1/30秒内没有太大变化。拍摄任何DVD并暂停,然后在一帧上移动它,并注意两张图像的相似程度。因此,MPEG-4(和其他压缩标准)不是独立编码每个帧,而是仅对连续帧之间的差异进行编码(使用motion estimation来查找帧之间的差异)
空间冗余利用了这样的事实:通常,图像上的颜色扩散往往是非常低的频率。我的意思是相邻像素往往具有相似的颜色。例如,在您穿着红色跳线的图像中,代表您的跳线的所有像素都将具有非常相似的颜色。可以使用DCT将像素值变换到频率空间中,其中可以丢弃一些低频信息。然后,当执行反向DCT时(在解码期间),图像现在没有丢弃的低频信息。
要查看丢弃此信息的效果,请打开MS绘画并绘制一系列重叠的水平和垂直黑线。将图像另存为JPEG(也使用DCT进行压缩)。现在放大图案,注意线条的边缘不再那么尖锐,有点模糊。这是因为在压缩过程中丢失了一些信息(从黑色到白色的过渡)。阅读this以获得精美图片的解释
为了进一步阅读,this book非常好,如果对数学有点重要的话。
答案 2 :(得分:2)
尝试从这里开始:
Windows Media Encoder入门
http://www.microsoft.com/windows/windowsmedia/howto/articles/introencoding.aspx
可在codecpage.com找到更多数据
答案 3 :(得分:2)
通过使用MPEG4解码器,我学到了很多关于MPEG4格式的知识。对于视频和音频,有许多不同的参考(和开源实现)编码器和解码器。所以,打电子书 - 从维基百科开始:它有很好的一般摘要和链接(如果你很幸运“打开规格”)。然后点击源。
有许多不同的编码方式(许多涉及某种形式的压缩,无论是有损还是无损),整个问题通常还需要处理框架容器和“子格式”而变得更加复杂。 ”
玩得开心。