wav文件头详解

符合RIFF(Resource Interchange File Format)规范的wav文件的文件头记录了音频流的编码参数等基本信息。wav文件由多个块组成,至少包含RIFF标志块、格式块、数据头块和数据块,所有数据均以小端模式存储。(小端模式:按顺序读取时,先读取的是数据的低位部分,后读取的是数据的高位部分。如数据0x11, 0x00代表的是十六进制数0x0011,也就是3)。

一般的wav文件头由以下数据组成:

偏移地址 字节数 数据类型 内容
00H ~ 03H 4 char "RIFF", 资源交换文件RIFF标志,固定不变
04H ~ 07H 4 long

文件长度,从下个字节开始到文件结束的总字节数。

计算结果为文件大小(可以从文件属性中看)+8个字节(00H~07H)

08H ~ 0BH 4 char "WAVE", WAVE文件标志,固定不变
0CH ~ 0FH 4 char "fmt ", fmt标志(最后一位为空格),固定不变
10H ~ 13H 4 long 格式长度,一般为00000010H(=16),代表16PCM(量化结果为16bit)
14H ~ 15H 2 int 格式类别,1表示线性PCM编码
16H ~ 17H 2 int 通道数,1为单声道,2为双声道
18H ~ 1BH 4 long 采样频率(每秒的样本数)
1CH ~ 1FH 4 long 每秒字节数,其值为:采样频率*通道数*样本数据位数/8
20H ~ 21H 2 int DATA数据块的调整数(字节),其值为:通道数*样本数据位数/8
22H ~ 23H 2 int 样本数据位数,0010H即16,代表一个量化两本占2字节
24H ~ 27H 4 char "data", data数据块标志,固定不变
28H ~ 2BH 4 long wav文件音频数据所占大小
2CH ~ ... ...   真正存储的音频数据(不属于文件头了)

上面是一般wav文件的文件头数据,而通过ffmpeg转码的wav文件于此有些差距,在格式块和数据头块之间添加了一些ffmpeg的信息,如下图。

偏移地址 字节数 数据类型 内容
00H ~ 23H 36   同上表的00H~23H一致
24H ~ 27H 4 char "LIST", LIST块标志,固定不变
28H ~ 2BH 4 long LIST块占用的字节数,在这里为26字节
2CH ~ 45H 26   LIST块内容
46H ~ 49H 4 char "data", data数据块标志,固定不变
4AH ~ 4DH 4 long wav文件音频数据所占大小

ffmpeg处理命令

1. 将格式不正确的wav文件转码为ffmpeg格式的wav文件:

  ffmpeg -i "sourceFile" -y "targetFile"

2. 将mp3文件转码为ffmpeg格式的wav文件(编码格式为16PCM、小端模式):

  ffmpeg -i "sourceFile" -acodec pcm_s16le -y "targetFile"

3. 音频切割:

  ffmpeg -i "sourceFile" -ss startTime -to endTime -y "targetFile"(按起点和终点切割)

  ffpmeg -i "sourceFile" -ss startTime -t duration -y "targetFile"(按起点和持续时间切割)

参考文章

1. WAV文件格式

2. wav文件详解

3. wav文件格式分析

4. FFmpeg介绍及参数详细说明

5. java切割wav音频文件

6. java读取wav文件(波形文件)并绘制波形图的方法

7. WAV格式中常见的压缩编码

wav文件格式及ffmpeg处理命令的更多相关文章

  1. 转: FFmpeg功能命令汇总

    原文: FFmpeg功能命令汇总 前言 如此强大的FFmpeg,能够实现视频采集.视频格式转化.视频截图.视频添加水印.视频切片.视频录制.视频推流.更改音视频参数功能等.通过终端命令如何实现这些功能 ...

  2. FFmpeg常用命令 (三)流媒体

    前言 如此强大的FFmpeg,能够实现视频采集.视频格式转化.视频截图.视频添加水印.视频切片.视频录制.视频推流.更改音视频参数功能等.通过终端命令如何实现这些功能,Richy在本文做一记录,以备之 ...

  3. WAV文件格式

    作者:阿宝 更新:2016-09-21 来源:彩色世界(https://blog.hz601.org/2016/09/21/waveform-audio-file-format/index.html) ...

  4. FFmpeg常用命令学习笔记(二)录制命令

    录制命令 1.FFmpeg录屏命令 ffmpeg -f avfoundation -i 1 -r 30 out.yuv -f:指定使用avfoundation采集数据 -i:指定从哪采集数据,它是一个 ...

  5. 音频相关 ALSA ffmpeg ffplay 命令用法 g7xx

    采样率: samples 441100 每秒 DAC/ADC 采样的频率,声卡一般还支持 48k 8k 等模式. 通道:channels 2声道 左右声道 也有单声道的声音,5.1 声道 位数: 16 ...

  6. wav文件格式分析详解

    wav文件格式分析详解 文章转载自:http://blog.csdn.net/BlueSoal/article/details/932395 一.综述    WAVE文件作为多媒体中使用的声波文件格式 ...

  7. WAV文件格式分析

    一. RIFF概念 在Windows环境下,大部分的多媒体文件都依循着一种结构来存放信息,这样的结构称为"资源互换文件格式"(Resources lnterchange File ...

  8. FFmpeg 常用命令收集

    FFmpeg 常用命令 合并视频 ffmpeg -i "KTDS-820A_FHD.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts i ...

  9. wav文件格式分析与详解

    WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形, ...

随机推荐

  1. 处理Git不能上传大于100M文件问题

    记录一下自己工作遇到的问题,免得下次再遇到了还到处网上查资料解决. 自己的项目的版本控制用的是Git,代码仓库在github托管.项目里用到了百度导航SDK,由于百度导航SDK有了新版本,于是就更新到 ...

  2. charles使用教程 干货~

    大部分内容来自前辈们的摘写,博客园是怎么去转载其他好的博呢~ 言归正传,教程看过后还是自己再来一遍理解和操作才会更加深刻. Charles 是在 Mac/WIN下常用的网络封包截取工具,在做移动开发时 ...

  3. 软工网络15团队作业8——Beta阶段敏捷冲刺(day1)

    第 1 篇 Scrum 冲刺博客 1. 介绍小组新加入的成员,Ta担任的角色 --给出让ta担当此角色的理由 小组新加入的成员:3085叶金蕾 担任的角色:测试/用户体验/开发 理由:根据小组讨论以及 ...

  4. 【第七周】B-1分数发布

    组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块 由于排名信息过于敏感,由以下方式进行. 宫成荣 = 魑,谢孝淼 = 魅,武志远 =   魉,杨柳 =  ...

  5. Ubuntu下面 PHPSTORM2017.2破解方法

    Ubuntu下面 PHPSTORM2017.2破解方法 下载破解文件 在 http://idea.lanyus.com/上面新下载一个破解文件. 破解步骤 将JetbrainsCrack-2.6.3_ ...

  6. pycharm安装jpype报错及解决方法

    安装jpype时发生报错: 按照提示去装了Microsoft visual C++,结果重新安装还是报错,根据https://blog.csdn.net/qq_38934189/article/det ...

  7. 增加kms计数

    @echo offset skms=10.15.68.62for %%i in (. . . . . . . . . . . . . . . . . . . . . . . . . .) do cal ...

  8. 隐藏基于Dialog的MFC的主窗体

    最近需要做一个主窗体常态隐藏的程序,类似360卫士那样,只有托盘图标常显示.本以为隐藏主窗体很简单,但遇到了意想不到的情况. 无效的做法 最初的想法是设置主对话框资源的 Visiable 属性为 fa ...

  9. java 静态方法 java 类中的方法无论静态还是非静态的都可以使用静态变量 而静态方法只能使用静态变量 (因为对象还没创建 所以不能在静态方法里面用this)

  10. C++模式学习------模板模式

    模板模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模板模式是一种很常用的模式,在很多的框架或者基类重载的时候都 ...