博客
关于我
AVI封装
阅读量:801 次
发布时间:2023-04-05

本文共 2216 字,大约阅读时间需要 7 分钟。

AVI 文件格式详解

AVI(Audio Video Interleaved,音视频交错文件)是 Microsoft 推出的 RIFF(Resource Interchange File Format)文件格式,广泛应用于视频编码、编辑及播放领域。AVI 文件通常包含多个数据流,其中最常见的组合是音频流和视频流。尽管有些 AVI 文件仅包含视频流而不需要音频流,但大多数情况下它们都需要同时包含这两种类型的数据流。

AVI 文件格式结构

AVI 文件的基本结构遵循 RIFF 文件格式规范,具体结构如下:

  • RIFF:标识文件类型,通常以 RIFF 开头。
  • 文件总长度:文件总长度,通常设置为 0
  • AVI:标识文件类型为 AVI 文件,最后有一个空格。
  • LIST:标识文件的第一个列表块(list0),用于存储文件的其他信息。
  • list0 长度:list0 的长度,不能为 0
  • hdrl:视频头信息,包含视频的基本参数。
  • avih:视频信息头,包含视频的详细参数,如帧率、视频尺寸等。
  • list1:第二个列表块,存储视频和音频流的信息。
  • JUNK:垃圾数据块,用于确保文件长度为 16 的倍数。
  • 文件头部结构详解

    AVI 文件头部信息由 hdrlavih 两部分组成:

    • hdrl

      • FOURCC:四字节编码,通常为 D83D382E
      • cb:视频头信息的长度,通常为 32 字节。
      • dwMicroSecPerFrame:每帧的微秒数,可通过 10^6 / fps 计算。
      • dwMaxBytesPerSec:视频数据速率,设置为 0
      • dwPaddingGranularity:视频数据的分辨率粒度,设置为 0
      • dwFlags:视频数据的旗志位,常见标志包括 AVIF_HAS_INDEXAVIF_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_INDEXAVIF_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 文件的数据流结构可以根据具体需求进行扩展或修改。例如:

    • 视频流数据:视频流数据可以是原始的 RGB 数据,也可以是压缩后的 YUV 格式数据。
    • 音频流数据:音频流数据可以是 PCM 码率的线性采样数据,也可以是 MP3 等压缩格式的数据。
    • 关键帧信息:视频流中通常会包含关键帧信息,用于视频编码和解码的参考。

    AVI 文件的注意事项

    在处理 AVI 文件时,需要注意以下几点:

    • 文件长度:AVI 文件的总长度可以设置为 0,但需要确保 list0 的长度正确。
    • 数据对齐:如果视频或音频数据的长度为奇数,需要在末尾添加一个零字节以保证数据对齐。
    • 兼容性:不同视频编解码器可能对 AVI 文件的数据流格式有不同的要求,需要根据具体编解码器的需求进行调整。

    AVI 文件的实际示例

    以下是一个简单的 AVI 文件结构示例:

    RIFF0x00AVI LIST0x00hdrl0x38avih0x38LIST0x00strl0x38vids0x000x3800dc长度为奇数时添加一个零字节...

    通过以上详细介绍,可以看出 AVI 文件格式具有高度的灵活性和扩展性,适用于多种不同的音视频编解码器和应用场景。在实际开发中,需要根据具体需求调整文件头部和数据流的结构,同时确保兼容性和数据对齐。

    转载地址:http://iarfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>
    MySQL中auto_increment有什么作用?(IT枫斗者)
    查看>>
    MySQL中B+Tree索引原理
    查看>>
    mysql中cast() 和convert()的用法讲解
    查看>>
    mysql中datetime与timestamp类型有什么区别
    查看>>
    MySQL中DQL语言的执行顺序
    查看>>
    mysql中floor函数的作用是什么?
    查看>>
    MySQL中group by 与 order by 一起使用排序问题
    查看>>
    mysql中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>
    mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>