
最近正在进行一项大工程:给Kimberly Akimbo这部音乐剧做全场字幕。由于精力有限,故研究了一下利用AI工具减少工作量的方法。于是找到了OpenAI(开发ChatGPT的那家公司)开源的语音识别模型whisper。该模型可以直接由音频文件识别生成包括srt字幕格式在内的多种文字稿。本教程主要提供基于官方的命令行工具的操作方法,如果嫌麻烦也可以用一些打包好的图形界面软件(B站有人投稿过相关的教程)。
下面是配置要求及步骤(项目仓库链接见文末):
NVIDIA GeForce 3090 GPU with 24GB VRAM
该模型理论上也能在CPU环境下运行,但极慢。GPU运行也需要占用较大显存。官方提供了多种规模的变体,所需显存从1GB-10GB不等(如下图)

Ubuntu 18.04
理论上来说Windows和MacOS也是支持的,不过我没有尝试过
PyTorch 1.11.1
官方说的是在1.10.1上训练的,不过这个影响不大
克隆项目仓库 git clone https://github.com/openai/whisper.git
从源码安装Python包 pip install .
命令行使用 whisper audio.aac --model large-v3 --device cuda
默认源语言(指的是音频所说的语言)是英语,也可以通过--language xxx来指定源语言。在后面加上--task translate的话还可以把字幕翻译为英语(目前只支持英语作为目标语言,不然机翻的功夫都省了)。
large-v3模型,2小时的音频总共耗时3h左右。
输出文件有一行一句的纯文本,也有包含时间轴信息的srt文件,还有其他几种。
测试了medium和large-v3的表现,差距不是很大,显存和时间紧张的同学可以选择medium试试。
语言的准确度非常棒,没有背景音乐的情况下基本可以做到90%的准确率,甚至还能识别轻度的多人同时说话场景。
但时间轴效果较差,大部分时候都只能勉强对上说话的时间,约有0.5s的偏差。
少部分背景音嘈杂的片段会导致模型输出大量无意义的重复文本,应该算是bug了。
2024.3.19
之前遇到的时间轴偏移的问题,可能是whisper在处理长音频上的能力不足,加上--word_timestamps True 可以改善该问题(参考https://github.com/openai/whisper/discussions/1811)
https://github.com/openai/whisper