• wav文件格式及ffmpeg处理命令


    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格式中常见的压缩编码

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Spring的IOC原理(转载)
    谈谈对Spring IOC的理解
    Servlet3.0学习总结(四)——使用注解标注监听器(Listener)
    Servlet3.0学习总结(三)——基于Servlet3.0的文件上传
    Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)
    Servlet3.0学习总结(一)——使用注解标注Servlet
    XML学习总结(二)——XML入门
    XML学习总结(一)——XML介绍
    孤傲苍狼的博客园
    android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明
  • 原文地址:https://www.cnblogs.com/strugglion/p/6849275.html
Copyright © 2020-2023  润新知