问题由来:有一批客服提供的配音文件,好几千个,需要用作我写的程序合成,发现其尺寸差异较大,遂检查了一遍,发现果然里面10%的文件格式有问题,和其他不一致:

Option ExplicitPublic Type RIFFID As String * 4    '0x00    4Byte   大端    'RIFF' (0x52494646)Size As Long        '0x04    4Byte   小端    fileSize - 8Type As String * 4  '0x08    4Byte   大端    'WAVE'(0x57415645)
End TypePublic Type FORMATID As String * 4        '   0x00    4Byte   大端    'fmt ' (0x666D7420)Size  As Long           '   0x04    4Byte   小端    16AudioFormat As Integer  '   0x08    2Byte   小端    音频格式NumChannels As Integer  '   0x0A    2Byte   小端    声道数SampleRate As Long      '   0x0C    4Byte   小端    采样率ByteRate As Long        '   0x10    4Byte   小端    每秒数据字节数BlockAlign As Integer   '   0x14    2Byte   小端    数据块对齐BitsPerSample As Integer '  0x16    2Byte   小端    采样位数
End TypePublic Type dataID As String * 4    ' 0x00    4Byte   大端    'data' (0x64617461)Size As Long        ' 0x04    4Byte   小端    NdataBlock() As Integer
End TypePublic Type HP1data As String * 14    '0x00    4Byte   大端    Lavf58.29.100
End TypePublic Type HPID As String * 8    '0x00    4Byte   大端    INFOISFTSize As Long        '0x04    4Byte   小端data As HP1
End TypePublic Type LIST '-------------ffmpeg 转换出来的 WAV 文件,文件头会多出 LIST 块,所以单独定义个判断下,以免忘记了。ID As String * 4    '0x00    4Byte   大端    LISTSize As Long        '0x04    4Byte   小端data As HP
End TypePublic Function apppath()apppath = ActiveWorkbook.Path & "\"
End FunctionPublic Sub chkWavFormat()Dim P1 As RIFF, P2 As FORMAT, P3 As data, P2x As LISTDim P0 As RIFF, AR As Long, dataBlock() As IntegerDim i As Integer, fn As String, fpath As String, fp As Integer, col As IntegerDim Headsize As Longfpath = apppath & "基本语音\wav\"fn = Dir(fpath & "*.wav")Do'-----------读取文件格式fp = FreeFileOpen fpath & fn For Binary As #fpGet #fp, , P1Get #fp, , P2Get #fp, , P0AR = Seek(fp) - 12Seek #fp, ARIf P0.ID <> "data" ThenGet #fp, , P2xHeadsize = 12 + 8 + P2.Size + 8 + P2x.Size + 8ElseHeadsize = 12 + 8 + P2.Size + 8End If
'            Get #fp, , P3.ID
'            Get #fp, , P3.SizeIf P2.BlockAlign = 1 Then'ReDim dataBlock(1 To P3.Size) As ByteElseIf P2.BlockAlign = 2 Then'ReDim dataBlock(1 To P3.Size / 2) As IntegerElse
'                Close #fp
'                MsgBox "不处理32位音频!"
'                Exit SubEnd IfClose #fp'------------------i = i + 1col = 1Worksheets("Sheet3").Cells(10 + i, col).Value = i: col = col + 1Worksheets("Sheet3").Cells(10 + i, col).Value = fn: col = col + 1With P2Worksheets("Sheet3").Cells(10 + i, col).Value = .AudioFormat: col = col + 1Worksheets("Sheet3").Cells(10 + i, col).Value = .NumChannels: col = col + 1Worksheets("Sheet3").Cells(10 + i, col).Value = .SampleRate: col = col + 1Worksheets("Sheet3").Cells(10 + i, col).Value = .ByteRate: col = col + 1Worksheets("Sheet3").Cells(10 + i, col).Value = .BlockAlign: col = col + 1Worksheets("Sheet3").Cells(10 + i, col).Value = .BitsPerSample: col = col + 1End WithWorksheets("Sheet3").Cells(10 + i, col).Value = Headsize: col = col + 1'——----------DoEventsfn = DirLoop Until Len(fn) < 4MsgBox i & "个文件处理完毕"
End Sub

而且发现所有文件采样率和我程序要求的都不一样。

所以想将其格式全部转换为我设定的一致,用 ffpmeg 试了一下,发现直接 wav 转 wav 转出来得到是 PCM 格式文件,并不能得到 wav 格式文件:

ffmpeg -y -i 12.wav -f s16le -ac 1 -ar 16000 -acodec pcm_s16le 12.ok.wav

图中可将,wav 文件头没了,将扩展名改为 PCM 用 goldwave 打开,填入之前转换的参数,播放正确:

说明格式采样率转换已经正确完成,只是 ffpmeg 只输出了数据部分,没带 wav 文件头,那么接下来就简单了,从 pcm 转为 wav 加上文件头,就可以得到完整的 wav 文件了:

ffmpeg -y -f s16le -ac 1 -ar 16000 -acodec pcm_s16le -i 12.ok.pcm test.wav

至此,转换方案可以确定,即,将各种不同格式的 wav 文件先转为 16位16K单声 pcm 格式,然后,在按这个格式转换为 wav 格式即可,加上批处理批量转换两次就完成了:

rem 不同格式的 wav 文件批量转换为 16 位 16K 单声道的 pcm 格式
e:
cd E:\Studio\web\xfttsWeb\DOC\基本语音
for %%a in (".\all\*.wav") do "ffmpeg.exe" -y -i "%%a" -f s16le -ac 1 -ar 16000 -acodec pcm_s16le ".\pcm\%%~na.pcm"
rem pcm 文件批量转换为 16 位 16K 单声道的 wav 格式
e:
cd E:\Studio\web\xfttsWeb\DOC\基本语音
for %%a in (".\pcm\*.pcm") do "ffmpeg.exe" -y -f s16le -ac 1 -ar 16000 -acodec pcm_s16le -i "%%a" ".\wav\%%~na.wav"

这样,几分钟就把一堆不同采样率的文件一起转换好了。

转换后的文件再次检测格式,都已经全部为制定格式:

此记!

ps:ffmpg 转换 wav 文件采样率时,不能直接转为 wav 格式,需要用 pcm 格式过渡一次。

用ffmpeg批量转换WAV文件采样率相关推荐

  1. mp3转换wav文件_如何将WAV文件转换为MP3

    mp3转换wav文件 WAV audio files are a great way to preserve the complete and accurate quality of a record ...

  2. FFmpeg批量转换视频格式

    FFmpeg 批量转换视频格式 1.新建一个.bat文件(如新建"视频转换.bat"),将下列代码复制进去后保存. 2.将该文件放在含有视频的文件夹类,双击运行即可.运行完成后视频 ...

  3. pdfkit批量转换html文件为pdf

    最简单的epub文件转换为pdf文件的方法为使用电子书管理工具calibre,但是calibre要将文件添加到书库才能进行转换,添加到书库时会创建冗余的文件夹和文件,让人多少有点不爽.calibre工 ...

  4. labelme 批量转换json文件 详细步骤

    在run maskrcnn代码时,训练自己数据需要批量转换json文件,下面是详细步骤: cd 到/usr/local/lib/python3.6/dist-packages/labelme/cli路 ...

  5. python编辑svg文件_使用Python批量转换SVG文件为PNG或PDF文件

    使用Python批量转换SVG文件为PNG或PDF文件 使用Python批量转换SVG文件为PNG或PDF文件 使用模块 1 模块单独使用 2 模块用于代码 实例 1 命令行方式 2 python脚本 ...

  6. python办公自动化实例(一):批量转换word文件为PDF

    场景:有大批word文件需要转PDF,手动word转pdf速度很慢,尤其当word文件很大的时候,这时候就可以使用程序高效批量转换word文件了. 实现效果如下图所示 代码如下: #!user/bin ...

  7. python爬虫+ffmpeg批量下载ts文件,解密合并成mp4

    标题 python爬虫+ffmpeg批量下载ts文件,解密合并成mp4 文章目录 标题 前言 一.分析目标 二.寻找url规律 三.写代码 总结 前言 (第一次写博客,写的不好请见谅哈~~) 目标是大 ...

  8. 【使用ChatGPT自动化】批量转换.csv文件为.xlsx文件

    第1次提问: 我:我想使用Python批量转换.csv文件为.xlsx文件,请你提供代码 它:好的,以下是使用Python批量转换.csv文件为.xlsx文件的代码: import os import ...

  9. FFmpeg批量转化wav为MP3

    批量转化当前文件夹内所有的wav文件,转化为MP3文件,-b:a 256k  256k是码率 for /R %v IN (*.wav) do ( ffmpeg -i "%v" -b ...

  10. 图片批量转换pdf文件

    文章目录 1. 依赖 2. 工具类抽取 1. 依赖 <!--图片转换pdf Start--><!-- https://mvnrepository.com/artifact/com.i ...

最新文章

  1. 要管理此计算机上的用户账户,win10用户账户控制 你要允许此应用 若要继续请输入管理员密码...
  2. (译)C++11中的Move语义和右值引用
  3. 用python编写密码安全性_密码安全性
  4. H5(仅仅是个地址)
  5. 拓端tecdat|用R语言模拟混合制排队随机服务排队系统
  6. Jfinal启动原理及源码简析
  7. IMETool 输入法设置工具 十问十答
  8. Android编译时技术(二)ASM 基础使用之代码生成
  9. 【易微信系列一】查找附近的人
  10. 华东师范 2018年 研究生复试上机题解合集
  11. thingJS模模搭(campusbuilder/momoda)及3dsmax插件遇到的坑
  12. 中兴交换机如何查看服务器设备,中兴交换机配置流程和配置命令(参考模板)...
  13. 华为交换机测试吞吐量软件,华为选择Spirent验证最新数据中心交换机的性能
  14. 儿童使用显微镜有好处吗?
  15. UVa 12112 - Iceman
  16. 【接口调用】EasyCVR获取直播流接口调用过程
  17. synaptics linux驱动程序,Synaptics
  18. 当 input 属性为 number,设置maxlength属性不生效的坑
  19. Oracle EBS GL日记账批“选定以过账”状态数据修复
  20. 人生不过是生老病死,我也是没活成想要的样子

热门文章

  1. JanusGraph Server
  2. android 获取路由器mac,android设备获取当前wifi下的路由器的mac和路由器的名称
  3. 最全的国内外电子书籍网站合集
  4. 鸟哥的linux基础学习实训教程
  5. 数值计算之 梯度向量和梯度矩阵,雅可比矩阵,海森矩阵
  6. SMT离线编程软件,SMT编程软件,最专业的SMT编程软件,首选JDS,smt... SMTI离线编程软件:适用于所有 SMT AI 设备。JDS编程软件是目前最专业最好用的SMT编程软件,具有“
  7. Android NDK开发基础
  8. 电子病历基本数据集_电子病历质控的三项是因素-病历质控系统助力提升电子病历质量...
  9. 关于kindle mobi词典解析
  10. Java 如何获取线程状态呢?