AVI 介绍

计划把这一年多以来业余作 Python 相关开发的一些知识整理一下,这是第一篇。

迄今还记得第一次看到的 AVI 文件,在 windows 3.1 上,一个邮票大小的窗口里,一个人(男女实在看不清楚)在滑帆板。那是我们不知道从哪里弄来的一个软件包(当然现在知道是一个 VFW 驱动)里面附带的一个 sample,宣称装了这个东东后计算机就进入多媒体时代;随着后来 .dat/.mpg (VCD) 的流行,对比下 avi 给我的印象就成了落后,低质量的代名词。

进入 BT 时代后,突然就发现下载来的电影文件几乎都是 avi 文件,通常是 700MB,就拥有不输于 DVD 4G 容量的数据所包括的音视频质量。就有了这么一个疑问——AVI,它到底是个什么玩意儿。

专业的回答是这样的:AVI 是一种容器(container)格式。通常来说没有把音视频一起编码的方案(用大脚趾都能想到同时编码的效率一定不高),而是独立编码,然后打包在这样一个容器里面,做成一个单独的文件供人使用。播放的时候首先将容器里包含的不同的数据流分离出来(splitter),再交给不同的引擎(Codecs)去解码(decode),播放器还得根据容器包装的规则让视频音频能同步起来。我们现在使用的那些 avi 文件准确说是包括了 XviD/DivX 压缩的视频流和 AC-3 or MP3 音频流的 container .. 随 XP/2000 提供的缺省多媒体附件包括一个 avi 的 splitter,以及一个 mp3 的 decoder。只要再安装一个 XviD 的解码器和一个 AC-3 的解码器基本上就可以看所有的影片了。

事实上 rmvb 也是一个 container,无需 real 播放器,有一个 rmvb splitter 和合适的 codecs,就可以在任何支持 dshow 的播放器欣赏 rmvb 了;DVD 上的 .vob 就是另外一种容器,里面除了 MPEG-2 图象和 DTS/Dolby 音频外,还会包括 n 条字幕流。

言归正传,qyb 为什么要研究 AVI 格式呢?因为在 DV-2-XviD 这个软件的功能里面,有个需求就是从 DV 抓取的 AVI 文件里面,获取拍摄该视频当时的时间。我要作的事情一是把视频流从 AVI 里面分离出来,然后再从视频流里面获得保存在里面的时间戳。

网上很容易可以搜索到一篇关于 AVI 格式的文档(链接是一个 pdf 文件!),它组织的很好,是我一开始起步时的主要参考,但后来处理 >1G AVI 文件的时候感觉这篇文档描述并不清楚。最后还是依靠这篇完成了 avi 分析部分。

本期科普工作到这里结束,计划下一期简单汉化一下 AVI 相关文档... 可能更类似程序文档吧。

Topic: 技术

评论

做个好的科普作家真不容易。

看了你的 GPS 科普了,写的不错