使用whisper批量生成字幕(whisper.cpp)

发布时间 2023-07-11 17:59:54作者: 亚历山大超级流浪者

前言

最近发现了whisper这个语音生成字幕的本地工具,但是whisper速度不算快,然后在github上发现了whisper.cpp这个项目,执行速度更快,还可以在命令行使用,这样就可以自己定制了。

命令行压缩包下载

命令行下载地址:https://github.com/Const-me/Whisper/releases
下载【cli.zip】,解压即可,笔者解压的目录为:D:\whisper_cli不过为了更方便的输入命令,我把D:whisper_cli的目录,放入了环境变量。
image

模型下载

模型下载地址(下载速度挺快的): https://huggingface.co/ggerganov/whisper.cpp/tree/main
我下载的:ggml-medium.en.bin这个模型,速度和转写正确率已经够用了(一小时的视频,经测试转写需要8-10分钟)。下载后,记住模型存放的位置

image

本命令的作用为:A目录下所有的视频,以及A目录下的子文件夹里的视频,都会依次生成字幕srt文件,同时会生成一份wav音频文件,音频文件等字幕转写完毕后,需要自己手动删除。

具体的命令

@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再试下。

保存编码示意

image

命令介绍:

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格式是正常的。

image

一些报错

如果一直提示failed to generate timestamp token - skipping one second,则可以修改ffmpeg.exe -i "%%f" -ar 32000 -acodec pcm_s16le "%%f.wav"中的-ar 32000为-ar 48000,用更高的采样率,会降低该报错提示。
image

ps:之所以搞这个命令行,还是因为安装faster-whisper安装一直不成功,卡在了安装CUDA那一步。
这款在转写某些文件时,会出现字幕重复的情况,据说faster-whisper有VAD FILTER选项可以减少字幕重复的情况。