复制 AVI 块的一个周期






3.89/5 (5投票s)
2006年5月23日
1分钟阅读

43088

757
如何通过复制数据块来复制一段 AVI 视频。
引言
通常,我们有两种方法来复制一段 AVI 视频。
- 使用
AVIStreamGetFrame
和AVIStreamWriteData
。这种方法的缺点是它会花费很长时间并生成一个非常大的输出文件(未压缩),尤其是在复制较长的一段时。 - 使用
EditStreamCopy
和EditStreamPaste
。这可以让用户选择一个编码器,并使用该编码器压缩输出文件。尽管如此,输出文件总是大于输入文件的相同段的 10 倍以上,而且这也会花费很长时间。
如何复制 AVI 数据块
基本上,AVI 文件的格式应该如下所示
RIFF RIFF HEADER
|-AVI AVI CHUNK
|-hdrl MAIN AVI HEADER
| |- ...... OTHER HEADER INFORMATION
|-movi MOVIE DATA
| |-chunk1 chunk data
| |- ...... chunk data
| |-chunkn chunk data
|-idx1 AVI INDEX
|-[index data] DATA
因此,我们可以通过以下步骤将特定时间段的数据块复制到输出文件
- 复制头部。
- 复制数据块。
- 重建索引数据。
- 更正头部的一些数据,例如文件长度和数据长度。
优点和缺点
这种方法可以运行得非常快,并且输出文件的大小与输入文件相对应。但缺点也很明显。这个类依赖于编解码器,可能对某些类型的 AVI 文件不起作用。如何使用
使用这个类所需的唯一代码是CCopyAVIChunk copier; copier.CopyFile("C:\\tests\\test1.avi", "C:\\tests\\test2.avi", 123, 765);
注释
我将这个类用于某些项目,所以我只关心它是否能与“那些”类型的 AVI 文件一起工作。但我没有机会测试通用的 AVI 文件。如果您对这个类感兴趣并且发现它不起作用,请随时通过 yinglong_w@hotmail.com 与我联系。版本历史
- 版本 1.0 - 发布于 2006 年 5 月 23 日至 CodeProject。