使用whisper批量生成字幕(whisper.cpp)
前言
最近发现了whisper这个语音生成字幕的本地工具,但是whisper速度不算快,然后在github上发现了whisper.cpp这个项目,执行速度更快,还可以在命令行使用,这样就可以自己定制了。
需要的东西
- 命令行工具
- 模型
- 脚本命令
命令行压缩包下载
命令行下载地址:https://github.com/Const-me/Whisper/releases
下载【cli.zip】,解压即可,笔者解压的目录为:D:\whisper_cli
为了在脚本中可以输入命令,需要把D:whisper_cli
的目录,放入了环境变量的Path。
模型下载
模型下载地址(下载速度挺快的): https://huggingface.co/ggerganov/whisper.cpp/tree/main
我下载的:ggml-medium.en.bin
这个模型,速度和转写正确率已经够用了(一小时的视频,经测试转写需要8-10分钟)。下载后,记住模型存放的位置
本命令的作用为:A目录下所有的视频,以及A目录下的子文件夹里的视频,都会依次生成字幕srt文件,同时会生成一份wav音频文件,音频文件等字幕转写完毕后,需要自己手动删除。
具体的命令
chcp 65001
@echo off
REM 设置 PATH 环境变量,包含whisper可执行文件
SET PATH=%PATH%;D:\python310\Scripts
REM 指定所有视频所在路径,支持多级目录。
SET "video_dir=S:gogo"
REM 循环遍历所有视频
FOR /R "%video_dir%" %%f IN (*.mp4,*.wav,*.avi,*.ts) DO (
REM 提取视频文件名
SET "file_name=%%~nf"
REM 切换到视频所在目录
cd /d "%%~dpf"
REM 为这个视频生成wav音频文件
ffmpeg.exe -i "%%f" -ar 32000 -acodec pcm_s16le "%%f.wav"
REM 为这个视频生成字幕,这里需要更改你的模型位置,我是直接放在S盘根目录下的。
main.exe -l zh -osrt -m S:\ggml-medium.bin "%%f.wav"
REM 返回原目录
cd /d "%video_dir%"
)
pause
将上述指令,新建记事本,赋值粘贴,保存为bat即可。
编码为UTF-8,如果目录里有中文,可能utf-8会不行,换成ANSI再试下。
保存编码示意
命令介绍:
main.exe -l zh -osrt -m S:\ggml-medium.bin "test.wav
-l zh
--选择语言为中文
-osrt
--输出srt字幕文件
-m
--指定模型位置,这里写你下载好的ggml-medium.en.bin的位置即可。
更多命令,可以访问:https://github.com/ggerganov/whisper.cpp
执行时会出现问号,为正常现象,最后生成的srt格式是正常的。
一些报错
如果一直提示failed to generate timestamp token - skipping one second
,则可以修改ffmpeg.exe -i "%%f" -ar 32000 -acodec pcm_s16le "%%f.wav"
中的-ar 32000为-ar 48000,用更高的采样率,会降低该报错提示。
ps:之所以搞这个命令行,还是因为安装faster-whisper安装一直不成功,卡在了安装CUDA那一步。
这款在转写某些文件时,会出现字幕重复的情况,据说faster-whisper有VAD FILTER选项可以减少字幕重复的情况。