利用OpenAI技术使用开源项目whisper为视频增加字幕

Whisper是2022年9月被OpenAI开源了的自动语音识别系统。它除了可以用于语音识别,还能实现多种语言的转录,以及将这些语言翻译成英语。 transcribe(转录)可以将语音转为文字,Whisper会为音视频生成带时间轴的字幕文件,支持99种语言AI字幕工具。

Whisper项目地址:https://github.com/openai/whisper

Whisper 安装

虽然Whisper与Stable Diffusion同样归属AI工具,但Whisper安装非常简单,两行代码即可开箱使用。使用python3.9.9和PyTorch 1.10.1来训练模型,代码与Python3.8-3.10版本兼容

1
2
3
4
5
pip install git+https://github.com/openai/whisper.git 
brew install ffmpeg

# 更新至最新的版本
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

音频转录

1
whisper XXX.avi

Whisper进阶命令

task

--task 分为 transcribe(语音转录)和 translate。Whisper 默认使用 --task transcribe 模式,将语音转录为对应的语言字幕。--task translate 是所有语言翻译为英文,目前尚未支持翻译为其他语言。

language

--language 是设置语音转录的语种,支持语种范围查看 tokenizer.py,比如指定日语 --language japanese。如果你没指定语种,Whisper 会截取音频的前 30 秒来判断语种。

如果指定语种与文件中的语种并不相同,Whisper 会强制翻译,但 10 分钟以上的音视频会出现大量的重复无意义字幕。2假设你把日语视频的转录语言设为汉语,前 8 分钟 Whisper 会正确转录到中文,但 8 分钟后的转录字幕会一直重复,并与实际片段无关。

model

--model 指 Whisper 的转录模型,转录效果为 tiny < base < small < medium < large,默认使用 small。添加参数 --model medium--model large 可以切换到更大的模型,但转录时间也会变长。如果你是对英文视频进行转录,则在模型参数上添加后缀 .en,能提升转录速度。

幻听参数

非英语视频的转录有时会出现幻听,即静默片段被识别出语音,或是转录结果与该片段无关。这些问题是由语气停顿参数引起的。幻听的解决方案是引入 VAD,但 VAD 对动手能力要求较高。如果你的视频转录出现了严重幻听,建议先尝试调节参数阈值。

  • --no_speech_threshold 无声识别的阈值,默认为 0.6。当 no_speech_threshold 高于阈值且 logprob_threshold 低于预设时,该片段将被标记为静默。对于非英语长视频来说,建议将其调低,否则经常出现大段的重复识别。
  • --logprob_threshold 转录频次的阈值,默认为 -1.0。当 logprob_threshold 低于预设时,将不对该片段进行转录。建议修改为 None 或更低的值。
  • --compression_ratio_threshold 压缩比的阈值,默认为 2.4。当 compression_ratio_threshold 高于预设时,将不对该片段进行转录。

--no_speech_threshold 0.5 --logprob_threshold None --compression_ratio_threshold 2.2 是我常用的参数,你可以按视频情况来调节。