Whisper 模型、WhisperDesktop 及模型 下载、使用
UAreGoing2nd
编辑于 2023年05月11日 22:01


        Whisper 是 OpenAI 发布的多模态语音识别网络,强大的功能实现了 99 种语言的语音识别转写及带有时间戳的字幕、歌词生成,并且支持 srt 文件在内的多种格式文件输出,是OpenAI 少有的开源产品。这里提供 Whisper Whisper.cpp 项目的模型文件下载及简单使用,后附 Whisper.cpp 的模型转换工具及一些其他必要组件等。

Whisper模型下载及使用

Whisper的安装方法:

        命令行安装,可以使用 pip 直接安装、更新:

(如果友友看不明白pip命令那么直接跳到Whisper.cpp吧,估计这个也用不明白)

代码块
Shell
自动换行
复制代码
pip install -U openai-whisper
复制成功

        也可以从github代码仓库pull安装(需要安装git)

代码块
Shell
自动换行
复制代码
pip install git+https://github.com/openai/whisper.git 
复制成功

        使用以下命令强制更新到当前代码仓库的版本

代码块
Shell
自动换行
复制代码
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
复制成功

 

        模型文件度盘链接:

代码块
JavaScript
自动换行
复制代码
链接:https://pan.baidu.com/s/1fIU-KqHVyJIZKpHSH3uELQ?pwd=j06q 
提取码:j06q 
--来自百度网盘超级会员V9的分享


官方下载地址
"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": "https://openaipublic.azureedge.net/main/whisper/models/81f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524/large-v2.pt",
复制成功

        全部模型文件:

全部模型文件

        该模型为 OpenAI 的原始模型格式 .pt 格式。模型下载之后可放在任意位置 例如:

代码块
Shell
自动换行
复制代码
D:\WhisperModels\models_OpenAI
复制成功

        在命令行运行相关命令时,可以使用 --model_dir 命令 来指定模型文件路径 ,具体命令如下:

代码块
Shell
自动换行
复制代码
Whisper xxxx.wav --model large-v2 --model_dir D:\WhisperModels\models_OpenAI --language Chinese --devicce cuda
复制成功

        以上命令指定了处理某个音频文件,指定模型为large-v2,指定了模型文件所在的目录,指定了语言为 中文,并指定了处理设备为 英伟达GPU(cuda)。但是我们并未指定输出文件,所以该命令运行后程序会输出所有格式,包括:json、srt字幕、txt等等,输出目录将会在当前工作目录下。

        不指定模型文件路径的时候,Whisper 会去下列路径寻找模型文件:

代码块
Shell
自动换行
复制代码
C:\user\xxxx\.cache\whisper
复制成功

        如果该路径下也没有模型文件,则 Whisper 将自行下载模型文件 (龟速警告)。

        如果不会使用命令行工具那么可能上述版本模型对友友来说没啥用。

        Whisper 网络的参数量已然很大,模型的大小本身也有 3G 上下,占用显存则更多,所以 10以下显存在运行 pytorch 版的 Whisper 时可能存在一定困难。下面介绍 Whisper 的 ggml 版本也就是 Whisper.cpp ,Whisper 的 C++ 实现,且进行了GUI封装,具备窗口界面(其实就是 WhisperDesktop 项目)。

       模型选择使用也放在下面板块进行说明。

Whisper.cpp 模型及使用

        由于以上版本的 Whisper 基本依赖于命令行运行,所以有了各种封装软件,比如 Buzz 等。我使用的是 WhisperDesktop,是使用 Whisper.cpp 项目所提供的 ggml 格式模型运行的 Whisper 版本。

       WhisperDesktop 主页:

代码块
Shell
自动换行
复制代码
https://github.com/Const-me/Whisper
复制成功

        

        WhisperDesktop v1.11 下载:

代码块
JavaScript
自动换行
复制代码
链接:https://pan.baidu.com/s/1pZdxZyk5oB2Bu0W5N8Dx8w?pwd=7m8s 
提取码:7m8s 
--来自百度网盘超级会员V9的分享
复制成功

        ggml格式模型下载:

代码块
JavaScript
自动换行
复制代码
链接:https://pan.baidu.com/s/1AcTRFJ3AhQCrHVolY_bSZw?pwd=r11f 
提取码:r11f 
--来自百度网盘超级会员V9的分享


官方下载地址:
https://huggingface.co/datasets/ggerganov/whisper.cpp/tree/main
复制成功

        该软件是 Whisper 的 ggml 版本。ggml 是一个用于机器学习的张量库,该机器学习库所使用的模型文件是 bin 格式的二进制文件,在 WhisperDesktop 软件中使用的模型直接由 OpenAI 的模型转换得到,故语音识别效果应当与 Whisper 相同。

使用:

        解压、双击打开软件:

打开程序

选择模型文件:

        在这里选择好从度盘下载下来的模型文件,模型文件后缀带有 “en” 的是纯英文模型,为单独英语模型,除英文外其余语言不应选用该种模型,而应该选择多模态模型(多模态模型也能处理英文)。

        模型越大对显存要求就也越大,速度也越慢:

        请根据自己的设备以及实际转换需求选择模型(Whisper.cpp 版本对显存的需求低得多,最大的 large 模型也只需要5个G左右显存,pytorch版本使用 large 模型则需要接近10G 显存!)。越大的模型加载越需要时间,一般一分钟左右即可。

        如果有多块显卡可以在 Advance 选项中进行设置

选好模型之后点 ok 我们进入下一步

音频转写设置界面

点击 Transcript 之后就会开始自动进行转写,转写结束之前不可中断!

关于各种模型:

        由于两种不同版本的 Whisper 只是实现不同,模型格式虽然不一样但是内容完全一样,因此在这里同一说明各种模型文件之间的差异。

        OpenAI 官方给出的各种模型的大小和性能比较:

图片来自: https://sspai.com/post/75953#!

        但事实上,官方没有对文档进行更新,目前的 large 模型已经达到了接近3GB 大小,其显存要求可能也会更高(原本的 large 模型预计的显存使用就已经达到10GB......),medium 模型的大小也已经达到 1.4GB。计算机性能有限的各位朋友还是优先考虑使用 Whisper.cpp 版本吧。

        中文环境下的各种模型比较

        对于新版 large-v2 模型的使用效果可以看这个

        识别用时等如下:

      

用时00:04:01 emmmmm

          效果还是可以的,因为这首中文音乐发音相对清楚,所以算是比较简单的识别内容了。

代码块
JavaScript
自动换行
复制代码
large-v2

1
00:00:00,000 --> 00:00:02,000
第十一集
2
00:00:02,000 --> 00:00:27,000
我爱你
3
00:00:27,000 --> 00:00:30,000
词曲:李宗盛
4
00:00:30,000 --> 00:00:35,000
月光把天空照亮
5
00:00:35,000 --> 00:00:41,000
洒下一片光芒点缀海洋
6
00:00:41,000 --> 00:00:47,000
每当流星从天而降
7
00:00:47,000 --> 00:00:53,000
心中的梦想都随风飘扬
8
00:00:53,000 --> 00:00:56,000
展开透明翅膀
9
00:00:56,000 --> 00:01:00,000
飞出天窗
10
00:01:00,000 --> 00:01:05,000
找寻一个最美丽的希望
11
00:01:05,000 --> 00:01:11,000
每当天空泛起彩色霞光
12
00:01:11,000 --> 00:01:21,000
带着回忆和梦想一起飞翔
13
00:01:21,000 --> 00:01:26,000
月光把天空照亮
14
00:01:26,000 --> 00:01:32,000
洒下一片光芒点缀海洋
15
00:01:32,000 --> 00:01:38,000
每当流星从天而降
16
00:01:38,000 --> 00:01:44,000
心中的梦想都随风飘扬
17
00:01:44,000 --> 00:01:47,000
展开透明翅膀
18
00:01:47,000 --> 00:01:49,000
飞出天窗
19
00:01:49,000 --> 00:01:55,000
找寻一个最美丽的希望
20
00:01:55,000 --> 00:02:01,000
每当天空泛起彩色霞光
21
00:02:01,000 --> 00:02:08,000
带着回忆和梦想一起飞翔
22
00:02:28,000 --> 00:02:33,000
啦啦 啦啦
23
00:02:34,000 --> 00:02:36,000
字幕:小玥
24
00:02:36,000 --> 00:02:41,000
【伦桑原创】Lun Sang 伦桑原创
复制成功

        开头的“第十一集 我爱你” 我估计是它幻听了......

        成功识别出了音乐内容,并自动添加了 “词曲:李宗盛” 这样的音乐信息,虽然是错的。

        

        其他模型的效果也一并放在下面

代码块
JavaScript
自动换行
复制代码
large-v1
1
00:00:00,000 --> 00:00:02,000
作曲:陈晓明
2
00:00:02,000 --> 00:00:04,000
作词:陈晓明
3
00:00:04,000 --> 00:00:06,000
作曲:陈晓明
4
00:00:06,000 --> 00:00:08,000
编曲:陈晓明
5
00:00:08,000 --> 00:00:10,000
和声:陈晓明
6
00:00:10,000 --> 00:00:12,000
混音:陈晓明
7
00:00:12,000 --> 00:00:14,000
母带:陈晓明
8
00:00:14,000 --> 00:00:16,000
和声:陈晓明
9
00:00:16,000 --> 00:00:18,000
和声:陈晓明
10
00:00:18,000 --> 00:00:20,000
和声:陈晓明
11
00:00:20,000 --> 00:00:22,000
和声:陈晓明
12
00:00:22,000 --> 00:00:24,000
和声:陈晓明
13
00:00:24,000 --> 00:00:26,000
和声:陈晓明
14
00:00:26,000 --> 00:00:28,000
和声:陈晓明
15
00:00:28,000 --> 00:00:30,000
和声:陈晓明
16
00:00:30,000 --> 00:00:35,000
月光把天空照亮
17
00:00:35,000 --> 00:00:41,000
洒下一片光芒点缀海洋
18
00:00:41,000 --> 00:00:47,000
每当流星从天而降
19
00:00:47,000 --> 00:00:53,000
心中的梦想都随风飘扬
20
00:00:53,000 --> 00:00:58,000
展开透明翅膀的终点中
21
00:00:58,000 --> 00:01:04,000
找寻一个最美丽的希望
22
00:01:04,000 --> 00:01:10,000
每当天空泛起彩色下光
23
00:01:10,000 --> 00:01:21,000
带着回忆和梦想一起飞翔
24
00:01:21,000 --> 00:01:26,000
月光把天空照亮
25
00:01:26,000 --> 00:01:32,000
洒下一片光芒点缀海洋
26
00:01:32,000 --> 00:01:38,000
每当流星从天而降
27
00:01:38,000 --> 00:01:44,000
心中的梦想都随风飘扬
28
00:01:44,000 --> 00:01:49,000
展开透明翅膀的终点中
29
00:01:49,000 --> 00:01:55,000
找寻一个最美丽的希望
30
00:01:55,000 --> 00:02:01,000
每当天空泛起彩色下光
31
00:02:01,000 --> 00:02:08,000
带着回忆和梦想一起飞翔
32
00:02:15,000 --> 00:02:33,000
啦……
33
00:02:33,000 --> 00:02:39,000
啦……
34
00:02:39,000 --> 00:02:43,000
啦……
复制成功

        陈晓明又是谁。。。。

        medium 中等模型转写效果如下:

代码块
JavaScript
自动换行
复制代码
medium

1
00:00:00,000 --> 00:00:05,000
作词:李宗盛 作曲:李宗盛
2
00:00:05,000 --> 00:00:30,000
编曲:李宗盛
3
00:00:30,000 --> 00:00:36,000
月光把天空照亮
4
00:00:36,000 --> 00:00:42,000
洒下一片光芒点缀海涯
5
00:00:42,000 --> 00:00:47,000
每当流星从天而降
6
00:00:47,000 --> 00:00:53,000
心中的梦想都随风飘扬
7
00:00:53,000 --> 00:00:59,000
展开透明翅膀的中天窗
8
00:00:59,000 --> 00:01:05,000
找寻一个最美丽的希望
9
00:01:05,000 --> 00:01:10,000
每把天空翻起再洒下光
10
00:01:10,000 --> 00:01:21,000
带着回忆和梦想一起飞翔
11
00:01:21,000 --> 00:01:26,000
月光把天空照亮
12
00:01:26,000 --> 00:01:32,000
洒下一片光芒点缀海涯
13
00:01:32,000 --> 00:01:38,000
每当流星从天而降
14
00:01:38,000 --> 00:01:43,000
心中的梦想都随风飘扬
15
00:01:43,000 --> 00:01:49,000
展开透明翅膀的中天窗
16
00:01:49,000 --> 00:01:55,000
找寻一个最美丽的希望
17
00:01:55,000 --> 00:02:01,000
每把天空翻起再洒下光
18
00:02:01,000 --> 00:02:07,000
带着回忆和梦想一起飞翔
19
00:02:08,000 --> 00:02:12,000
啦啦啦啦啦啦啦啦
20
00:02:12,000 --> 00:02:18,000
啦啦啦啦啦啦啦啦
21
00:02:18,000 --> 00:02:24,000
啦啦啦啦啦啦啦啦啦
22
00:02:24,000 --> 00:02:29,000
啦啦啦啦啦啦啦啦
23
00:02:29,000 --> 00:02:33,000
啦啦啦啦啦
24
00:02:33,000 --> 00:02:38,000
啦啦啦啦啦啦
25
00:02:40,000 --> 00:02:45,000
作词:李宗盛 作曲:李宗盛
复制成功

        同样成功识别出了音乐场景,并添加了相关信息,虽然还是瞎编的,错别字逐渐增多,但是却成功识别出了所以的 “啦啦啦”.....甚至 larger-v2 模型都没做到。。。。。。

        

用时23秒,相当的快了

        接下来是 small 模型

代码块
JavaScript
自动换行
复制代码
small

1
00:00:00,000 --> 00:00:02,000
(字幕制作:贝尔)
2
00:00:02,000 --> 00:00:14,000
(字幕制作:贝尔)
3
00:00:30,000 --> 00:00:35,000
月光把天空照亮
4
00:00:35,000 --> 00:00:41,000
撒下一片光 盲点坠海洋
5
00:00:41,000 --> 00:00:47,000
美的流 心从天而降
6
00:00:47,000 --> 00:00:53,000
心中的梦想都随风飘扬
7
00:00:53,000 --> 00:00:59,000
展开透明翅膀的重点场
8
00:00:59,000 --> 00:01:05,000
找寻一个最美丽的希望
9
00:01:05,000 --> 00:01:10,000
美吧 天空翻起彩色下光
10
00:01:10,000 --> 00:01:18,000
带着回忆梦想一起悲伤
11
00:01:18,000 --> 00:01:26,000
月光把天空照亮
12
00:01:26,000 --> 00:01:32,000
撒下一片光 盲点坠海洋
13
00:01:32,000 --> 00:01:38,000
美的流 心从天而降
14
00:01:38,000 --> 00:01:44,000
心中的梦想都随风飘扬
15
00:01:44,000 --> 00:01:49,000
展开透明翅膀的重点场
16
00:01:49,000 --> 00:01:55,000
找寻一个最美丽的希望
17
00:01:55,000 --> 00:02:00,000
美吧 天空翻起彩色下光
18
00:02:00,000 --> 00:02:07,000
带着回忆梦想一起悲伤
19
00:02:14,000 --> 00:02:34,000
(字幕制作:贝尔)
20
00:02:34,000 --> 00:02:43,000
(字幕制作:贝尔)
复制成功

        没有添加音频信息,说明已经不再对场景和语义做考虑,质量逐渐粗糙。可能针对纯英文内容效果会好很多。

        时间居然和 medium 模型差不多

时间 22秒

        然后是base模型:

代码块
JavaScript
自动换行
复制代码
base
1
00:00:00,000 --> 00:00:02,000
作词:李宇作曲:李宇
2
00:00:03,000 --> 00:00:04,000
作词:李宇
3
00:00:04,000 --> 00:00:06,000
作词:李宇
4
00:00:30,000 --> 00:00:35,000
月光把天空照亮
5
00:00:35,000 --> 00:00:41,000
撒下一片光 忙点 追海洋
6
00:00:41,000 --> 00:00:47,000
泪灯流 心从天而降
7
00:00:47,000 --> 00:00:53,000
心中的梦想 都随风表扬
8
00:00:53,000 --> 00:00:58,000
展开 透明翅膀的窗
9
00:00:58,000 --> 00:01:05,000
照须一个最美丁的希望 美丽
10
00:01:05,000 --> 00:01:10,000
包 天空翻起彩色 下光
11
00:01:10,000 --> 00:01:18,000
待着回忆 梦想 也去背下
12
00:01:21,000 --> 00:01:26,000
月光把天空照亮
13
00:01:26,000 --> 00:01:32,000
撒下一片光 忙点 追海洋
14
00:01:32,000 --> 00:01:38,000
泪灯流 心从天而降
15
00:01:38,000 --> 00:01:45,000
心中的梦想 都随风表扬
16
00:01:45,000 --> 00:01:53,000
发明翅膀的窗 照须一个最美丽
17
00:01:53,000 --> 00:02:00,000
包 天空翻起彩色 下光
18
00:02:00,000 --> 00:02:08,000
待着回忆 梦想 也去背下
19
00:02:09,000 --> 00:02:33,000
Lalala
20
00:02:33,000 --> 00:02:40,000
Lalala
21
00:02:40,000 --> 00:02:47,000
Lalala
复制成功

用时:

用时 4.5秒

        最后是 tiny 模型:

        emmm tiny 模型在 WhisperDesktop 上的运行未输出结果,我们去命令行进行识别:

代码块
JavaScript
自动换行
复制代码
tiny

[00:30.000 --> 00:35.700] 愿光 把天空照亮
[00:35.700 --> 00:41.600] 撒下一片光 黄天 却海洋
[00:41.600 --> 00:47.300] 每等流 心痛天而降
[00:47.300 --> 00:53.100] 心中的梦想到随风飘阳
[00:53.100 --> 00:58.900] 展开 靠命直播 打出天窗
[00:58.900 --> 01:04.700] 招续一个最美的幸福
[01:04.700 --> 01:09.100] 美后 天空烦起海锁
[01:09.100 --> 01:12.900] 下光 带着回忆
[01:12.900 --> 01:21.000] 我想一 起飞沙
[01:21.000 --> 01:26.200] 愿光 把天空照亮
[01:26.200 --> 01:32.000] 撒下一片光 黄天 却海洋
[01:32.000 --> 01:37.800] 每等流 心痛天而降
[01:37.800 --> 01:43.600] 心中的梦想到随风飘阳
[01:43.600 --> 01:49.300] 展开 靠命直播 打出天窗
[01:49.300 --> 01:54.900] 招续一个最美的幸福
[01:54.900 --> 01:59.300] 美后 天空烦起海锁
[01:59.300 --> 02:03.100] 下光 带着回忆
[02:03.100 --> 02:08.200] 我想一 起飞沙
[02:08.200 --> 02:15.200] 下光 带着回忆
[02:15.200 --> 02:23.200] 下光 带着回忆
[02:23.200 --> 02:32.200] 下光 带着回忆
[02:38.200 --> 02:45.200] 下光 带着回忆
复制成功

        总之质量一言难尽。用时4秒。

各种组件

        首先,不论是 Whisper 还是 WhisperDesktop 都需要 ffmpeg 。

代码块
JavaScript
自动换行
复制代码
链接:https://pan.baidu.com/s/10SWo1iRiViPg3Q40duKWfw?pwd=ljhm 
提取码:ljhm 
--来自百度网盘超级会员V9的分享
复制成功

        这里提供一个 ffmpeg 的文件,不需要安装,解压之后将 ffmpeg 文件夹放到某个路径下,然后将 “XXXX\ffmpeg\bin” 目录添加到系统环境变量中去即可。

        在控制台输入:

代码块
Shell
自动换行
复制代码
ffmpeg -version
复制成功

        看到以下信息,即表示成功:

ffmpeg 版本信息

        

        音视频转换工具:

        这里面还包含一个可以用来进行视频音频格式转换的工具,可以使用这个工具将视频中的音频提取出来然后再放进 Whisper 中进行识别转写,从而实现字幕制作。这个工具也是依赖于 ffmpeg 的。

        

        OpenAI 和 Whisper.cpp 的模型格式转换工具:

代码块
JavaScript
自动换行
复制代码
该工具被提供在 Whisper.cpp 的项目源码中,是 python 脚本
https://github.com/ggerganov/whisper.cpp/blob/master/models/convert-pt-to-ggml.py
复制成功

        这里再提供封装版本:

代码块
JavaScript
自动换行
复制代码
链接:https://pan.baidu.com/s/13XUxrTSC2sRrMSHxqvIOCQ?pwd=b652 
提取码:b652 
--来自百度网盘超级会员V9的分享

https://github.com/CheshireCC/convert_pt_to_ggml_GUI
复制成功

        修正了一些原始代码中的命名逻辑,使之更方便。并添加了GUI

GUI版转换工具 

        

        简繁体转换工具

复制这段内容后打开百度网盘APP,操作更方便哦。 链接:https://pan.baidu.com/s/10vjWtdUytWqcnvOZdfZ7KA?pwd=162j 

提取码:162j--来自百度网盘超级会员V9的分享

        最后再扯一点,在使用中我发现, WhisperDesktop 可能是没有加参数而直接默认方式调用 Whisper , 在处理部分非英语音频时,模型往往出现严重的幻听,常用语言中尤其是日语最为严重,这个时候往往需要引入 VAD 或者修改模型参数,但很遗憾,在 WhisperDesktop 中似乎并没有提供修改运行参数的方式。。。。。(也可能是我没有发现而已)