【教程】利用whisper模型自动生成英文粗字幕
T-M-A
编辑于 2024年03月19日 11:44

引言

最近正在进行一项大工程:给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上训练的,不过这个影响不大

操作步骤

  1. 克隆项目仓库 git clone https://github.com/openai/whisper.git

  2. 从源码安装Python包 pip install .

  3. 命令行使用 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了。

Updates

2024.3.19

之前遇到的时间轴偏移的问题,可能是whisper在处理长音频上的能力不足,加上--word_timestamps True 可以改善该问题(参考https://github.com/openai/whisper/discussions/1811)

源码

https://github.com/openai/whisper