博客
关于我
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 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>
    Mysql 分页语句 Limit原理
    查看>>
    MySQL 创建新用户及授予权限的完整流程
    查看>>
    mysql 创建表,不能包含关键字values 以及 表id自增问题
    查看>>
    mysql 删除日志文件详解
    查看>>
    mysql 判断表字段是否存在,然后修改
    查看>>
    mysql 协议的退出命令包及解析
    查看>>