Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250722.2
全站通知:

基于Whisper的批量语音听写示例

阅读

    

2025-01-05更新

    

最新编辑:本森级7号舰拉菲

阅读:

  

更新日期:2025-01-05

  

最新编辑:本森级7号舰拉菲

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
本森级7号舰拉菲

什么是Whisper

Whisper是由OpenAI开发的一个开源语音识别模型(Speech-to-Text)。它的目标是提供高效、准确的语音转文字服务,并且具有强大的多语言支持。Whisper 可以用于将音频文件中的语音转换为文本,并支持多种语言的语音识别,包括英语、中文、西班牙语、法语等多种语言。

项目地址:Github

Whisper的特点

  1. 多语言支持:Whisper 能够处理多种语言的语音输入,并识别其中的文本内容。它不仅支持主流语言(如英语、中文、西班牙语),还支持一些低资源语言和方言。
  2. 高准确率:Whisper 基于深度学习模型进行训练,能够处理不同的语音音质和噪音环境,因此在多种条件下表现得比较稳健。
  3. 自动语言检测:Whisper 可以自动检测语音的语言,而不需要你明确指定输入语言。
  4. 开源:Whisper 模型是开源的,任何人都可以使用和修改它。这使得 Whisper 成为开发语音识别应用的一个有力工具。
  5. 适用范围广泛:除了用于语音转文字,它还可以应用于字幕生成、语音搜索、语音命令等多个场景。
  6. 支持音频文件格式:Whisper 支持多种常见的音频格式,如 WAV、MP3、FLAC 等。

使用Whisper需了解

  • 硬件要求:Whisper是基于深度学习模型的,因此需要一定的计算资源。使用时,你需要保证有足够的CPU或GPU能力,尤其是在处理大规模音频时。对于普通用户来说,CPU也能运行模型,但听写速度会非常慢,通常情况下建议搭配英伟达或者英特尔的独立GPU会更高效。
  • 软件要求:Whisper提供了Python API,使用时系统需要配置好Python环境以及ffmpeg环境。


环境配置和安装

Python环境安装和配置

1.由于Whisper推荐使用Python3.8~3.11版本,这里我们下载64位3.11.9版本安装包,
2.下载好后双击安装包运行,在安装程序界面需勾选下方的Add Python 3.x to PATH将Python添加到系统变量中,然后点“Install Now”即可完成安装。

Python环境安装.jpg

3.使用键盘上的Windows + R启动运行窗口并输入cmd打开命令提示符,在命令提示符输入python后回车,如窗口内看到类似Python 3.xxx的输出,就说明Python安装成功!

Python环境安装2.jpg

ffmpeg环境安装和配置

1.首先下载ffmpeg-7.1版本压缩包,双击打开并将里面的文件夹解压到任意位置你能记住的地方就行
2.在桌面此电脑点击右键,选择属性,在弹出的窗口中选择高级系统设置,在高级选项卡下点击环境变量,

Ffmpeg环境配置.jpg

3.在上方的用户变量中点击Path再点击编辑按钮,

Ffmpeg环境配置2.jpg

4.在弹出的窗口中点击新建,并将刚刚解压的ffmpeg文件夹下的bin目录完整的目录地址粘贴上去并点击确定保存即可。

Ffmpeg环境配置3.jpg

4.同样打开命令提示符输入ffmpeg -version后回车,如窗口内看到类似版本输出信息,即说明配置成功。

Ffmpeg环境配置4.jpg

Whisper安装

1.由于使用Whisper需要安装各种依赖的Python库,这里可以使用官方建议的Git方式自动安装相关依赖,首先打开命令提示符输入pip install gitpython后回车安装GitPython库,如最后出现类似Successfully installed....的输出则表示安装成功。
2.在命令提示符中输入pip install git+https://github.com/openai/whisper.git开始安装Whisper和它的依赖库,这个过程相对较长,如果最后出现类似Successfully built openai-whisper的输出则表示安装成功,如果出现报错,有可能是网络问题,可以尝试挂梯子或者重新再输入一遍刚才的命令重试。

Whisper安装.jpg

3.当安装过程全部完成时我们可以尝试在命令提示符中输入whisper --help查看帮助信息,如果有类似下图输出则表明安装成功。

Whisper安装2.jpg

Whisper模型选择和下载

Whisper提供了6种模型可供选择,每种模型的大小、运行时对VRAM的需求、听写速度均有不同,这里可以按需选择。理论上越大的模型,听写准确率相对越高,但运行时VRAM的需求也会越大,听写速度也会越慢。

模型 模型大小 VRAM需求 相对速度
tiny 39 M ~1 GB ~10x
base 74 M ~1 GB ~7x
small 244 M ~2 GB ~4x
medium 769 M ~5 GB ~2x
large 1550 M ~10 GB 1x
turbo 809 M ~6 GB ~8x
tiny.en https://openaipublic.azureedge.net/main/whisper/models/d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03/tiny.en.pt
tiny https://openaipublic.azureedge.net/main/whisper/models/65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9/tiny.pt
base.en https://openaipublic.azureedge.net/main/whisper/models/25a8566e1d0c1e2231d1c762132cd20e0f96a85d16145c3a00adf5d1ac670ead/base.en.pt
base https://openaipublic.azureedge.net/main/whisper/models/ed3a0b6b1c0edf879ad9b11b1af5a0e6ab5db9205f891f668f8b0e6c6326e34e/base.pt
small.en https://openaipublic.azureedge.net/main/whisper/models/f953ad0fd29cacd07d5a9eda5624af0f6bcf2258be67c92b79389873d91e0872/small.en.pt
small https://openaipublic.azureedge.net/main/whisper/models/9ecf779972d90ba49c06d968637d720dd632c55bbf19d441fb42bf17a411e794/small.pt
medium.en https://openaipublic.azureedge.net/main/whisper/models/d7440d1dc186f76616474e0ff0b3b6b879abc9d1a4926b7adfa41db2d497ab4f/medium.en.pt
medium https://openaipublic.azureedge.net/main/whisper/models/345ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1/medium.pt
large-v1 https://openaipublic.azureedge.net/main/whisper/models/e4b87e7e0bf463eb8e6956e646f1e277e901512310def2c24bf0e11bd3c28e9a/large-v1.pt
large-v2 https://openaipublic.azureedge.net/main/whisper/models/81f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524/large-v2.pt
large-v3 https://openaipublic.azureedge.net/main/whisper/models/e5b1a55b89c1367dacf97e3e19bfd829a01529dbfdeefa8caeb59b3f1b81dadb/large-v3.pt
large-v3-turbo https://openaipublic.azureedge.net/main/whisper/models/aff26ae408abcba5fbf8813c21e62b0941638c5f6eebfb145be0c9839262a19a/large-v3-turbo.pt

Whisper会在你第一次运行脚本时自动下载你指定的模型,但是下载速度相对较慢,这里可以提前下载模型然后放到指定的目录内。上表提供了所有模型的下载地址,直接打开或复制到下载软件内即可下载。

  • 带.en后缀的模型为只支持听写英语的模型,如果你只用来听写英语可以选择此类模型。
  • turbo模型是large-v3的优化版本,可提供更快的转录速度和最小的准确性下降,可以理解为large-v3的青春版。

将下载好的.pt后缀的模型文件移动到C:\Users\用户名\.cache\whisper目录下即可。


Whisper使用

支持的语言

语言简写 语言名称
en english
zh chinese
ja japanese
de german
es spanish
ru russian
ko korean
fr french
pt portuguese
tr turkish
pl polish
ca catalan
nl dutch
ar arabic
sv swedish
it italian
id indonesian
hi hindi
fi finnish
vi vietnamese
he hebrew
uk ukrainian
el greek
ms malay
cs czech
ro romanian
da danish
hu hungarian
ta tamil
no norwegian
th thai
ur urdu
hr croatian
bg bulgarian
lt lithuanian
la latin
mi maori
ml malayalam
cy welsh
sk slovak
te telugu
fa persian
lv latvian
bn bengali
sr serbian
az azerbaijani
sl slovenian
kn kannada
et estonian
mk macedonian
br breton
eu basque
is icelandic
hy armenian
ne nepali
mn mongolian
bs bosnian
kk kazakh
sq albanian
sw swahili
gl galician
mr marathi
pa punjabi
si sinhala
km khmer
sn shona
yo yoruba
so somali
af afrikaans
oc occitan
ka georgian
be belarusian
tg tajik
sd sindhi
gu gujarati
am amharic
yi yiddish
lo lao
uz uzbek
fo faroese
ht haitian creole
ps pashto
tk turkmen
nn nynorsk
mt maltese
sa sanskrit
lb luxembourgish
my myanmar
bo tibetan
tl tagalog
mg malagasy
as assamese
tt tatar
haw hawaiian
ln lingala
ha hausa
ba bashkir
jw javanese
su sundanese
yue cantonese

示例脚本1

import os
import json
import whisper
from pathlib import Path

# 定义语音文件和输出文件夹
script_dir = os.path.dirname(os.path.abspath(__file__))
in_folder = Path(script_dir) / 'in'
p = Path(in_folder)

# 加载Whisper模型
model = whisper.load_model("large-v3")  # 这里可以根据你的需要更换不同的模型

# 创建一个新的文件用于汇总输出
output_file = Path(script_dir) / "output.json"     # 这里可以指定输出json文件文件名

# 用于存储所有文件的转录结果
transcription_results = []

# 遍历语音文件夹下的所有.mp3文件
for f in p.glob("*.mp3"):     # 这里可以根据需要修改为不同的音频文件后缀,比如.wav
    # 转录音频文件
    result = model.transcribe(str(f), language="ja")  # 这里可以指定听写的语言

    # 将每个文件的转录结果以字典形式存储
    transcription_results.append({
        "File": f.name,
        "Text": result['text']
    })

# 将所有结果保存为JSON文件
with open(output_file, "w", encoding="utf-8") as json_out:
    json.dump(transcription_results, json_out, ensure_ascii=False, indent=4)

print(f"转录结果已保存为: {output_file}")

这是一个最简单的示例,脚本会读取同级目录下的in文件夹内所有mp3文件并使用large-v3模型进行听写,这里指定了听写的语言为日语,并将听写后的结果以json的形式保存到脚本所在目录,文件名为output.json。

示例脚本2

import os
import json
import whisper
from pathlib import Path

# 加载提示词文件
def load_initial_prompt(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            prompts = f.read().splitlines()
        return ",".join(prompts)
    except FileNotFoundError:
        print(f"错误: 文件 {file_path} 未找到")
        return ""
    except Exception as e:
        print(f"错误: 读取文件时出现问题: {e}")
        return ""

# 定义语音文件和输出文件夹
script_dir = os.path.dirname(os.path.abspath(__file__))
in_folder = Path(script_dir) / 'in' 
p = Path(in_folder)
prompts_file = Path(script_dir) / "prompt_ja.txt"  # 这里可以指定提示词文件

# 加载Whisper模型
model = whisper.load_model("large-v3")  # 这里可以根据你的需要更换不同的模型

# 读取提示词并转换为字符串
initial_prompt = load_initial_prompt(prompts_file)

# 创建一个新的文件用于汇总输出
output_file = Path(script_dir) / "output.json"     # 这里可以指定输出json文件文件名

# 用于存储所有文件的转录结果
transcription_results = []

# 遍历语音文件夹下的所有.mp3文件
for f in p.glob("*.mp3"):     # 这里可以根据需要修改为不同的音频文件后缀,比如.wav
    # 转录音频文件
    result = model.transcribe(str(f), initial_prompt=initial_prompt, language="ja")  # 这里可以指定听写语言

    # 将每个文件的转录结果以字典形式存储
    transcription_results.append({
        "File": f.name,
        "Text": result['text']
    })

# 将所有结果保存为JSON文件
with open(output_file, "w", encoding="utf-8") as json_out:
    json.dump(transcription_results, json_out, ensure_ascii=False, indent=4)

print(f"转录结果已保存为: {output_file}")

该示例是在前一个示例的基础上添加了提示词,whisper在听写时支持加载提示词,在某些特定场景下会提高特有词汇的准确率,比如游戏的一些特有词汇,该示例中脚本会读取同级目录下的prompt_ja.txt提示词文件,prompt_ja.txt文件的格式如下。建议可以将不同语言的提示词保存成不同的txt文件,并在听写时加载对应语言的提示词文件。

Whisper提示词文件格式示例.jpg