用ffmpeg批量转换WAV文件采样率
问题由来:有一批客服提供的配音文件,好几千个,需要用作我写的程序合成,发现其尺寸差异较大,遂检查了一遍,发现果然里面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文件采样率相关推荐
- mp3转换wav文件_如何将WAV文件转换为MP3
mp3转换wav文件 WAV audio files are a great way to preserve the complete and accurate quality of a record ...
- FFmpeg批量转换视频格式
FFmpeg 批量转换视频格式 1.新建一个.bat文件(如新建"视频转换.bat"),将下列代码复制进去后保存. 2.将该文件放在含有视频的文件夹类,双击运行即可.运行完成后视频 ...
- pdfkit批量转换html文件为pdf
最简单的epub文件转换为pdf文件的方法为使用电子书管理工具calibre,但是calibre要将文件添加到书库才能进行转换,添加到书库时会创建冗余的文件夹和文件,让人多少有点不爽.calibre工 ...
- labelme 批量转换json文件 详细步骤
在run maskrcnn代码时,训练自己数据需要批量转换json文件,下面是详细步骤: cd 到/usr/local/lib/python3.6/dist-packages/labelme/cli路 ...
- python编辑svg文件_使用Python批量转换SVG文件为PNG或PDF文件
使用Python批量转换SVG文件为PNG或PDF文件 使用Python批量转换SVG文件为PNG或PDF文件 使用模块 1 模块单独使用 2 模块用于代码 实例 1 命令行方式 2 python脚本 ...
- python办公自动化实例(一):批量转换word文件为PDF
场景:有大批word文件需要转PDF,手动word转pdf速度很慢,尤其当word文件很大的时候,这时候就可以使用程序高效批量转换word文件了. 实现效果如下图所示 代码如下: #!user/bin ...
- python爬虫+ffmpeg批量下载ts文件,解密合并成mp4
标题 python爬虫+ffmpeg批量下载ts文件,解密合并成mp4 文章目录 标题 前言 一.分析目标 二.寻找url规律 三.写代码 总结 前言 (第一次写博客,写的不好请见谅哈~~) 目标是大 ...
- 【使用ChatGPT自动化】批量转换.csv文件为.xlsx文件
第1次提问: 我:我想使用Python批量转换.csv文件为.xlsx文件,请你提供代码 它:好的,以下是使用Python批量转换.csv文件为.xlsx文件的代码: import os import ...
- FFmpeg批量转化wav为MP3
批量转化当前文件夹内所有的wav文件,转化为MP3文件,-b:a 256k 256k是码率 for /R %v IN (*.wav) do ( ffmpeg -i "%v" -b ...
- 图片批量转换pdf文件
文章目录 1. 依赖 2. 工具类抽取 1. 依赖 <!--图片转换pdf Start--><!-- https://mvnrepository.com/artifact/com.i ...
最新文章
- 要管理此计算机上的用户账户,win10用户账户控制 你要允许此应用 若要继续请输入管理员密码...
- (译)C++11中的Move语义和右值引用
- 用python编写密码安全性_密码安全性
- H5(仅仅是个地址)
- 拓端tecdat|用R语言模拟混合制排队随机服务排队系统
- Jfinal启动原理及源码简析
- IMETool 输入法设置工具 十问十答
- Android编译时技术(二)ASM 基础使用之代码生成
- 【易微信系列一】查找附近的人
- 华东师范 2018年 研究生复试上机题解合集
- thingJS模模搭(campusbuilder/momoda)及3dsmax插件遇到的坑
- 中兴交换机如何查看服务器设备,中兴交换机配置流程和配置命令(参考模板)...
- 华为交换机测试吞吐量软件,华为选择Spirent验证最新数据中心交换机的性能
- 儿童使用显微镜有好处吗?
- UVa 12112 - Iceman
- 【接口调用】EasyCVR获取直播流接口调用过程
- synaptics linux驱动程序,Synaptics
- 当 input 属性为 number,设置maxlength属性不生效的坑
- Oracle EBS GL日记账批“选定以过账”状态数据修复
- 人生不过是生老病死,我也是没活成想要的样子
热门文章
- JanusGraph Server
- android 获取路由器mac,android设备获取当前wifi下的路由器的mac和路由器的名称
- 最全的国内外电子书籍网站合集
- 鸟哥的linux基础学习实训教程
- 数值计算之 梯度向量和梯度矩阵,雅可比矩阵,海森矩阵
- SMT离线编程软件,SMT编程软件,最专业的SMT编程软件,首选JDS,smt... SMTI离线编程软件:适用于所有 SMT AI 设备。JDS编程软件是目前最专业最好用的SMT编程软件,具有“
- Android NDK开发基础
- 电子病历基本数据集_电子病历质控的三项是因素-病历质控系统助力提升电子病历质量...
- 关于kindle mobi词典解析
- Java 如何获取线程状态呢?