AVI和WAV文件格式和实例分析

2024-04-17 17:32

本文主要是介绍AVI和WAV文件格式和实例分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、AVI文件分析

二、WAV文件分析

1.WAV格式介绍

2.WAV文件构成

(1)各子块格式分析

(2)data子块数据分布

3.实例分析 


一、AVI文件分析

通过AVI文件分析器打开一个AVI文件,可看出音频和视频数据是交织放置的

其两个数据流如下:

// AVIMAINHEADER
public static readonly int AVIF_HASINDEX = 0x00000010;       //文件最后是否有索引
public static readonly int AVIF_MUSTUSEINDEX = 0x00000020;   //必须使用索引
public static readonly int AVIF_ISINTERLEAVED = 0x00000100;  //交错放置
public static readonly int AVIF_TRUSTCKTYPE = 0x00000800;    //使用CKtype查找帧
public static readonly int AVIF_WASCAPTUREFILE = 0x00010000; //捕获文件
public static readonly int AVIF_COPYRIGHTED = 0x00020000;    //受版权保护

二、WAV文件分析

1.WAV格式介绍

WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字。

2.WAV文件构成

(1)各子块格式分析

WAV文件是属于RIFF结构形式的文件,这种结构是一种树状结构,其最基本的组成单元是chunk(块),而每一个chunk则由辨识码,数据大小,以及数据本身组成,其中辨识码就是RIFF四个字母的ASCII码,共占用4个字节,用十六进制表示就是52 49 46 46;辨识码之后的四个字节,表示除去文件辨识码和它自己之后剩余文件的大小,最后就是文件的数据。

而WAV格式的文件除了前面的文件头之后,还包含三个子块:

  • format子块主要用于描述该wav文件的信息,例如,采样率,数据量,编码格式,声道数等,其结构也如RIFF,最开始4个字节表示标识符“fmt”,接着四个字符表示该块大小,后面的18个字节则表示文件的信息,在format子块中WAVEFORMATEX占了18字节,而标准的WAV应该是16字节,只有一些软件生成的文件会在其后面增加两个字节的附加信息;
  • fact子块并不是必须的,在标准的WAV文件中没有该子块,只有一些软件转化而来的才会增加该子块,其主要存储关于该文件内容的重要信息;
  • data块则主要就是WAV文件真正能播放的声音数据部分。
子块内容字节数端序
文件头标识符(RIFF)4 Bytes大端
数据大小4 Bytes小端
格式辨识码(WAVE)4 Bytes大端
数据format子块“fmt”4 Bytes大端
Size(该区块数据长度)4 Bytes小端

AudioFormat(音频格式)

2 Bytes小端
NumChannels(声道数)2 Bytes小端
SampleRate(采样率)4 Bytes小端
ByteRate(每秒数据字节数)4 Bytes小端
BlockAlign(每个采样所需的字节数)2 Bytes小端
BitsPerSample(采样位数)2 Bytes小端
fact子块"fact"4 Byte大端
子块大小4 Byte小端
子块数据4 Byte小端
data子块“data”4 Byte大端
音频数据的长度4 Byte小端
音频数据4 Byte小端
  • 端序:小端:低位在前,高位在后;大端:高位在前,低位在后
  • ByteRate每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
  • BlockAlign每个采样所需的字节数 = NumChannels * BitsPerSample / 8
  • BitsPerSample每个采样存储的bit数,8:8bit,16:16bit,32:32bit
  • 音频数据的长度 = ByteRate * seconds

(2)data子块数据分布

  • 8bit单声道
采样1采样2
数据1数据2
  • 8bit双声道
采样1采样2
声道1数据1声道2数据1声道1数据2声道2数据2
  • 16bit单声道
采样1采样2
数据1低字节数据1高字节数据2低字节数据2高字节
  • 16bit双声道
采样1
声道1数据1低字节声道1数据1高字节声道2数据1低字节声道2数据1高字节
采样2
声道1数据2低字节声道1数据2高字节声道2数据2低字节声道2数据2高字节

3.实例分析 

  • 红色框1: 标识符RIFF(ASCII码)
  • 黄色框2:数据大小=876516字节
  • 绿色框3:文件类型WAVE(ASCII码)
  • 蓝色框4:fmt空
  • 紫色框5:fmt子块数据长度=16
  • 蓝色线1:音频格式PCM
  • 蓝色线2:声道数=2
  • 蓝色线3:采样率=48000Hz
  • 蓝色线4:每秒数据字节数=192000
  • 蓝色线5:每个采样所需的字节数=4
  • 蓝色线6:采样位数=16
  • 橘色框6:DATA(ASCII码)
  • 淡紫色框7:音频数据长度=876480
  • 数据部分

参考文献

avi 文件格式解析_lxmnet123的专栏-CSDN博客_avi格式解析

分析WAV音频文件 - 知乎 (zhihu.com)

WAV文件格式解析_刘东的博客-CSDN博客_wav格式

WAV文件格式详解_imxiangzi的专栏-CSDN博客_wav格式

这篇关于AVI和WAV文件格式和实例分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912428

相关文章

swiper实例

大家好,我是燐子,今天给大家带来swiper实例   微信小程序中的 swiper 组件是一种用于创建滑动视图的容器组件,常用于实现图片轮播、广告展示等效果。它通过一系列的子组件 swiper-item 来定义滑动视图的每一个页面。 基本用法   以下是一个简单的 swiper 示例代码:   WXML(页面结构) <swiper autoplay="true" interval="3

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

如何实现一台机器上运行多个MySQL实例?

在一台机器上一个MySQL服务器运行多个MySQL实例有什么好处?这里我先入为主给大家介绍这样做至少存在两个好处(看完这篇文章后理解会更透彻): (1)减轻服务器链接负担 (2)为不同的用户提供不同的mysqld服务器的访问权限以方便这些用户进行自我管理。   下面我介绍具体的实现过程: 一、准备工作     台式机一台、Windows系统、MySQL服务器(我安装的版本是MySQL

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

Docker Compose--安装Nginx--方法/实例

原文网址:Docker Compose--安装Nginx--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Docker Compose如何安装Nginx。 目录结构 ├── config│   ├── cert│   │   ├── xxx_bundle.pem│   │   └── xxx.key│   ├── conf.d│   └── nginx.co

Java中的大数据处理与分析架构

Java中的大数据处理与分析架构 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论Java中的大数据处理与分析架构。随着大数据时代的到来,海量数据的存储、处理和分析变得至关重要。Java作为一门广泛使用的编程语言,在大数据领域有着广泛的应用。本文将介绍Java在大数据处理和分析中的关键技术和架构设计。 大数据处理与

段,页,段页,三种内存(RAM)管理机制分析

段,页,段页         是为实现虚拟内存而产生的技术。直接使用物理内存弊端:地址空间不隔离,内存使用效率低。 段 段:就是按照二进制文件的格式,在内存给进程分段(包括堆栈、数据段、代码段)。通过段寄存器中的段表来进行虚拟地址和物理地址的转换。 段实现的虚拟地址 = 段号+offset 物理地址:被分为很多个有编号的段,每个进程的虚拟地址都有段号,这样可以实现虚实地址之间的转换。其实所谓的地

mediasoup 源码分析 (八)分析PlainTransport

mediasoup 源码分析 (六)分析PlainTransport 一、接收裸RTP流二、mediasoup 中udp建立过程 tips 一、接收裸RTP流 PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本,具体地址为:mediasoup-demo/broadcaste