博客
关于我
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/

    你可能感兴趣的文章
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>
    MySQL
    查看>>
    mysql
    查看>>
    MTK Android 如何获取系统权限
    查看>>