通过批处理脚本.bat实现音视频文件的批量语音识别_(:3」∠)_
功能如下
输入命令行(也可使用预设:令第一个字符为1或2)
使用通配符来选取文件
统计文件数量及类型
文件自动分组(避免命令行超出8191个字符的限制)
运行时间统计(24小时以内,如超出则自行计算天数即可)
上面第二张图片是Whisper-CTranslate2的运行结果,它基于Faster-Whisper项目,与旧OpenAI Whisper命令行兼容。在保证精度的同时,占用内存更少,运行速度更快,且支持用彩色显示单词置信度,非常推荐哦。仓库:https://github.com/Softcatala/whisper-ctranslate2
脚本使用方面,复制代码到文本文档,改后缀为.bat,将其与待处理文件放在同一个目录下,直接运行就可以了
如果嫌要把.bat文件移来移去太麻烦的话,可以把它放在一个固定的位置,比如D:\cmd_AutoRun\Process.bat,然后在cmd中用doskey命令给调用.bat的命令(call)设置一个别名,比如
这样就可以在cmd中输入“wbat”来直接调用脚本文件了,但是这个命令只对当前窗口有效。如果要每次打开cmd都可以使用别名的话,需要修改注册表,具体请搜索“cmd命令别名”
修改成功之后,在文件目录shift+右键,“在此处打开命令窗口”,再输入定义的别名可以调用了。当然,在资源管理器的地址栏输入“cmd”也是同样的效果
Process.bat
1.输入命令行
可以直接输入Whisper命令,并用%i来代替文件名,例如
也准备了两种预设,方法是使第一个输入的字符为1或2,脚本会将1或2替换为对应的不完整命令,所以后面还需要补充参数。如“1medium”、“2small -f txt”等等
2.通配符
*表示任意数量的字符,?表示单个字符
如*.wav表示所有的wav文件,??x.ogg表示所有结尾为x的三字符ogg文件
要选取多种文件,只需将表达式用半角逗号或空格隔开。如*.ogg,*.mp4 *.flac
如果当前目录下全部文件都需要处理,只要输入一个*就可以了
更详细的cmd通配符用法请搜索“cmd通配符”
3.临时文件
脚本在运行过程中会创建名为“process_output.txt”的文件来存放信息,并在运行完成后删除
如果当前目录下正好有同名文件,请一定一定要将其转移或备份,否则会被删掉的哦
4.脚本思路
核心思路来源于OpenAI Whisper官网的这句示例
一条whisper命令可以输入多个文件名,只要把他们用空格隔开就好了。脚本所做的事情其实就是将这些文件名整合到形式变量%i中。并且考虑到命令行有8191个字符限制,所以要将过多的文件分组。
看似比较繁琐,不如用for循环遍历所有文件,然后每个文件执行一次命令来得方便
但是经过测试,多文件合并输出的方法相较单文件,处理的速度要快上不少。尤其是在大模型、多个小文件的情况下。推测是每次执行命令就会加载一次模型,而后者将太多时间花在模型的加载上,所以速度较慢。
下面是验证过程
可以看出,在large-v2模型,5个短音频(galgame角色语音)的条件下
OpenAI Whisper合并输出能节省40%左右的时间
Whisper-CTranslate2合并输出甚至能节省73%左右的时间
当然,如果处理长音频,并且样本数量比较少的话,两者的差距并不会有上面这样显著。但无论如何,合并输出的速度都是比单独输出要快的