音视频字幕生成:基于 openai-whisper 提取音视频文件文字

摘要

Whisper 由 OpenAI 在2022年9月21日开源,号称其英文语音辨识能力已达到人类水准。Whisper 是一种通用的语音识别模型,它是在不同音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。

目录
[隐藏]

1 whisper 简介

Whisper 由 OpenAI 在2022年9月21日开源,号称其英文语音辨识能力已达到人类水准。Whisper 是一种通用的语音识别模型,它是在不同音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。

2 whisper 环境配置

2.1 安装 whisper

首先需要安装 python 环境。这里需要特别注意版本问题,Whisper 当前支持的版本范围为 python 3.8~3.10,版本过高会导致版本检测失败,过低则安装脚本执行过程各种报错。官方当前使用的是 3.9.9 版本。

# 指定通过 whisper 源安装
pip install -U whisper -i https://pypi.douban.com/simple  --trusted-host=pypi.douban.com

2.2 安装 ffmpeg

whisper 在视频和语音处理上依赖于 ffmpeg,所以需要安装 ffmpeg 并设置到环境变量中。

ffmpeg 作为一款开源基础工具,官方的 release 文件都在 github releases 上自动构建和发布,国内下载很容易失败。可以通过使用包管理工具等方式进行安装。示例:

# windows 使用 scoop
scoop install ffmpeg

# macbook 使用 brew
brew install ffmpeg

# Deban Linux 使用 apt
sudo apt install ffmpeg

# on Arch Linux
sudo pacman -S ffmpeg

2.3 安装 rust(按需可选)

如果是非常见的机型和操作系统(如信创类机型),可能官方没有直接提供基于 rust 开发分词器的预构建文件,此时就需要实时编译了,那么则安装 rust 编译环境,具体步骤请参考 rust 文档:

https://www.rust-lang.org/learn/get-started

# 使用 pip 安装 setuptools_rust
pip install setuptools-rust

3 Whisper 的使用

3.1 语言模型

Size Parameters English-only model Multilingual model Required VRAM Relative speed
tiny 39 M tiny.en tiny ~1 GB ~32x
base 74 M base.en base ~1 GB ~16x
small 244 M small.en small ~2 GB ~6x
medium 769 M medium.en medium ~5 GB ~2x
large 1550 M N/A large ~10 GB 1x

默认会使用 small 模型,可使用 --model [size] 指定。若模型数据不存在,则会先自动下载并保存在缓存目录下。缓存目录的默认位置为 ~/.cache/whisper,也可以通过参数 --model_dir 指定。

3.2 命令行中使用 whisper 示例

# 1. 首次执行会下载默认的语言模型(small)
# 2. 自动检测音频语言类型
# 3. 默认为将语音转录为文本和字幕,输出5种类型的文件:`txt`、`json`、`srt`、`tsv`、`vtt`。可通过 --output_format 参数指定输出格式
whisper test.mp3

# --model: 指定 模型类型。默认为 small
whisper test.mp3 --model tiny

# --language: 指定语言为中文
whisper test.mp3 --language Chinese

# --task: 指定音频语言为中文,输出翻译为英文 (默认为 transcribe 模式,仅将语音转录为对应的语言字幕)
whisper test.mp3 --language Chinese --task translate

对于英文类音视频输出的结果会是英文,可以借助在线工具或开源库、商业 API 等方式,将英文字幕翻译为中文,从而实现为无字幕视频自动生成字幕。一些相关参考:

对于中文资源可能会包含繁体字,这是没有参数可以支持调整的。我们可以借助第三方简繁体转换工具做一些转换。一些参考:

3.3 在 python 程序中使用 whisper

import whisper
model = whisper.load_model("base")
result = model.transcribe("test.mp3")
print(result["text"])

3.4 在 Node.js 等其他语言中使用 whisper

由于 whisper 安装配置完成后在全局环境变量中可用,可以直接以 shell 程序调用的方式在所有编程语言中使用。以 Node.js 为例:

import { execSync } from 'node:child_process';

execSync(`whisper test.mp3 --language Chinese --task translate`);

4 总结与参考

由于 whisper 能够提供比较准确的音视频语言识别与提取支持,它给音视频资源提供了程序化处理的支持。在此基础上,可以实现一些音视频资源处理的上层应用。

例如实现各种语言类型音视频资源的字幕生成。基于 whisper 翻译输出其原始语言或英文的字幕,再使用其他三方工具翻译为目标语言即可。

再例如实现对音频和视频的程序化检索。对于一些历史保存的没有文本介绍、文本介绍较少或错误的语音资料,都可以对其做程序化处理提取文本信息并归档入库,进而实现实时检索功能。

扩展参考:

点赞 (1)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code