本文共 2216 字,大约阅读时间需要 7 分钟。
AVI(Audio Video Interleaved,音视频交错文件)是 Microsoft 推出的 RIFF(Resource Interchange File Format)文件格式,广泛应用于视频编码、编辑及播放领域。AVI 文件通常包含多个数据流,其中最常见的组合是音频流和视频流。尽管有些 AVI 文件仅包含视频流而不需要音频流,但大多数情况下它们都需要同时包含这两种类型的数据流。
AVI 文件的基本结构遵循 RIFF 文件格式规范,具体结构如下:
RIFF
开头。0
。0
。AVI 文件头部信息由 hdrl
和 avih
两部分组成:
hdrl:
FOURCC
:四字节编码,通常为 D83D382E
。cb
:视频头信息的长度,通常为 32
字节。dwMicroSecPerFrame
:每帧的微秒数,可通过 10^6 / fps
计算。dwMaxBytesPerSec
:视频数据速率,设置为 0
。dwPaddingGranularity
:视频数据的分辨率粒度,设置为 0
。dwFlags
:视频数据的旗志位,常见标志包括 AVIF_HAS_INDEX
和 AVIF_ISINTERLEAVED
。dwTotalFrames
:总帧数,设置为 0
。dwInitialFrames
:初始帧数,设置为 0
。dwStreams
:数据流的数量,通常为 2
(一个视频流和一个音频流)。dwSuggestedBufferSize
:建议缓冲区大小,通常为 0x100000
(1,048,576 字节)。dwWidth
:视频宽度,不可为 0
。dwHeight
:视频高度,不可为 0
。dwReserved[4]
:保留字段,设置为 0
。avih:
FOURCC
:四字节编码,通常为 32 2C L3 06
。cb
:avih 结构的长度,通常为 32
字节。dwMicroSecPerFrame
:每帧的微秒数。dwMaxBytesPerSec
:音频数据速率,设置为 0
。dwPaddingGranularity
:音频数据的分辨率粒度,设置为 0
。dwFlags
:音频数据的旗志位,常见标志包括 AVIF_HAS_INDEX
和 AVIF_ISINTERLEAVED
。dwTotalFrames
:总帧数,设置为 0
。dwInitialFrames
:初始帧数,设置为 0
。dwStreams
:数据流的数量,通常为 2
(一个音频流和一个视频流)。dwSuggestedBufferSize
:建议缓冲区大小,通常为 0x3000
(12,288 字节)。dwWidth
:音频宽度,设置为 0
。dwHeight
:音频高度,设置为 0
。dwReserved[4]
:保留字段,设置为 0
。AVI 文件的数据流由 list1
块存储,具体包括以下几个部分:
strl:字符串列表,存储视频流信息。
strh
:视频流头信息,包含视频流的编码类型、分辨率等。vids
:视频流数据块,包含压缩后的视频数据。strf
:视频流格式块,包含视频压缩格式信息。strl:字符串列表,存储音频流信息。
strh
:音频流头信息,包含音频编码类型、采样率等。auds
:音频流数据块,包含压缩后的音频数据。strf
:音频流格式块,包含音频压缩格式信息。在实际应用中,AVI 文件的数据流结构可以根据具体需求进行扩展或修改。例如:
在处理 AVI 文件时,需要注意以下几点:
0
,但需要确保 list0
的长度正确。以下是一个简单的 AVI 文件结构示例:
RIFF0x00AVI LIST0x00hdrl0x38avih0x38LIST0x00strl0x38vids0x000x3800dc长度为奇数时添加一个零字节...
通过以上详细介绍,可以看出 AVI 文件格式具有高度的灵活性和扩展性,适用于多种不同的音视频编解码器和应用场景。在实际开发中,需要根据具体需求调整文件头部和数据流的结构,同时确保兼容性和数据对齐。
转载地址:http://iarfk.baihongyu.com/