亦束的头像

Whisper 使用教程-语音转字幕

Whisper
3
Whisper
Whisper的安装
3
Whisper的安装
安装WSL2
安装WSL2
安装Docker
安装Docker
安装Whisper
安装Whisper
Whisper使用
2
Whisper使用
幻听参数
幻听参数
自带的翻译功能
自带的翻译功能
后期处理工具
2
后期处理工具
基础工具
基础工具
高级工具
2
高级工具
ffsubsync
ffsubsync
Translation
Translation
系统环境
系统环境
查看系统版本
查看系统版本
注意事项
注意事项
管理员身份打开命令行
管理员身份打开命令行
启用WSL
启用WSL
启用虚拟机平台
启用虚拟机平台
更新WSL内核
更新WSL内核
设置WSL版本
设置WSL版本
安装一个Linux发行版
安装一个Linux发行版
Ubuntu
Ubuntu
下载Docker
下载Docker
下载所需文件
下载所需文件
显卡驱动
显卡驱动
部署
部署
Whisper
Whisper
路径
路径
选择模型
选择模型
ModelConfigs
ModelConfigs
device
device
英语视频
英语视频
幻听
幻听
compression_ratio_threshold
compression_ratio_threshold
logprob_threshold
logprob_threshold
no_speech_threshold
no_speech_threshold
nlp前后文
nlp前后文
视频例子
视频例子
大屿山
大屿山
参考
参考
task
task
中文
中文
设置
设置
后期处理工具
后期处理工具
settime
settime
设置时间
设置时间
Shift
Shift
整体偏移4秒
整体偏移4秒
ffsubsync
ffsubsync
工具原理
工具原理
功能
功能
VAD
VAD
时间戳设置
时间戳设置
音频帧率
音频帧率
视频帧率
视频帧率
输出编码
输出编码
跳过推断帧率
跳过推断帧率
不修复帧率
不修复帧率
序列化语音
序列化语音
序列化
序列化
numpy
numpy
转格式
转格式
gss
gss
ffsubsync使用
ffsubsync使用
同步
同步
其它功能例子
其它功能例子
translation
translation
batch_size
batch_size
其它参数
其它参数
翻译
翻译
英翻中
英翻中
推荐设置及流程
推荐设置及流程
单集封面
单集封面

Whisper 使用教程-语音转字幕

2023-11-12
925 人已看
11 讨论
亦束的头像
亦束
粉丝:150
主题:13
描述:38
例子:8
类比:2
其他:13
字数:5356
亦束的头像
亦束
粉丝:150

Whisper

开篇 序

各位好,我是亦束,本期内容讲 Whisper 的安装和使用教程。

Whisper的安装

安装WSL2

系统环境

首先要安装一个 WSL2 ,需要 win10 及上版本才能使用。对于 win10 要求:* x64 系统:版本 1903 或更高版本,内部版本为 18362 或更高版本。* ARM64 系统:版本 2004 或更高版本,内部版本为 19041 或更高版本。

查看系统版本

在此电脑右击,属性,在操作系统内部版本后可以看到对应的数字。或者用快捷键 win键 + r ,在运行里输入 winver,确定,然后可以在操作系统内部版本后面看到相应的数字。

备注 注意事项

低于 18362 的版本不支持 WSL 2。要使用 Windows Update 助手更新 Windows 版本。如果您的系统刚好是 Win10 的 18362 版本,那么次要版本号不能低于 1049 ,次要版本号为小数点后面的数字。

管理员身份打开命令行

Win键 + r,在运行框里输入 PowerShell然后在命令行里输入 start-process PowerShell -verb runas ,回车。此时便是用管理员身份打开的 PowerShell 。

启用WSL

在命令行里输入 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart便可以启用 WSL 。

启用虚拟机平台

在命令行里输入 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart ,回车。

如果是 win10 (版本号1903或1909)则输入 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart ,回车

更新WSL内核

重启系统后在命令行里输入 systeminfo找到 System Type 或者 系统类型 ,如果是 x64 的,则下载x64最新内核

如果是 ARM ,则下载ARM最新版内核下载完后双击安装。

设置WSL版本

再次用管理员身份打开命令行在命令行输入wsl --set-default-version 2,回车。

安装一个Linux发行版

从 Microsoft Store 中选择并安装 Linux 发行版。

Ubuntu 安装一个Linux发行版

这里你们随便选一个 Linux 就行,我用的 Ubuntu 。

安装Docker

下载Docker

官网地址下载一个 Docker ,按照引导程序一路点击安装就行。

安装Whisper

下载所需文件

点击链接,跳转到百度云盘下载,下载完之后找个地方放,这个是 Whisper 的安装位置。

注意 显卡驱动

需要注意显卡驱动最好是新版本的,否则可能会报错。可以根据相应厂商点击下面的链接去官网更新显卡驱动,英伟达AMD

部署

先保证你的 docker 是打开的状态,到你下载的文件夹内,shift + 右键 点击空白处,选择启动 powershell,输入 docker-compose up -d然后等待下载完毕。

Whisper使用

开启 Whisper

首先我们打开 docker ,在 Containers 栏里我们可以看到 Whisper-ui 。我们在右边点击这个开关可以开启,然后在里面点击这个 Port 下面的数字进入网页。

路径

在右边第一个框内就是填你媒体文件的路径。

选择模型

下面选择转录的模型,我们选 OpenAI/Whisper 。当然你们也可以选择其它的模型尝试,关于不同模型作用在下面都有解释。

ModelConfigs

在 Model Configs 里,model_type 决定了你转录的质量。我一般都用 large-v2 ,它是最大的模型,目前对多种语言支持最好。当然有关其它模型区别,我们也可以到相关页面查看。

device

驱动有 GPU 的话就选择 cuda 。

设置 英语视频

前面这些设置路径,预加载到内存什么的就不讲了,我们把对转录质量有影响的参数讲一下。如果你用来转录英文,都使用默认设置就行。当你如果用来转录其它语言时,可能会出现“幻听”,这个时候我们要对其中一些参数进行调整。

幻听参数

幻听

幻听,意思是没有声音的片段被识别出了语音,或者是转录结果与片段无关。查了相关资料说是引入 [VAD] 能解决,这个在后面的高级工具会讲,另一个办法就是尝试调整相关参数。

compression_ratio_threshold

压缩比的阈值,默认为 2.4 。当这个值高于预设时,就不对这个片段进行转录,也可以降低数值来调整效果。

logprob_threshold

转录频次的阈值,默认 -1.0 。当这个值低于预设时,将不对该片段进行转录。推荐修改为 None 或更低的值。

no_speech_threshold

这个是无声识别的阈值,默认为 0.6 。当这个值高于阈值且转录频次(logprob_threshold)的阈值低于预设时,这个片段会被标记为静默。将它调低可以降低它大段的重复识别。

nlp前后文

condition_on_previous_text ,能联系前后文的一个功能。

对象 视频例子

我这里找了一个张晋的 vlog 视频,因为视频有上下文相关,也有大段没有讲话的部分,方便用来作为例子展示会出现的问题以及如何调整。

大屿山 nlp前后文

我们先将这个关联前后文的功能关闭,然后转录,可以看到字幕里有两处读了“大屿山”,但是 Whisper 给出来的文字不一样,第二次识别成了另外一个字。我们勾上后,它会关联上文,在第二遍的时候将它翻译成了一个词。

参考 幻听

我们继续用这个视频降低一下相关参数,来对比一下结果,会发现他的幻听解决了,但因为数值低了导致文字转录的效果非常差,这个参数得自己根据对应视频尝试一下,如果音频是纯语音的效果会好很多。

自带的翻译功能

task

task 是 Whisper 自带一个 AI 翻译功能,但是只能其它语言翻译成英文。当然它翻译成英文的效果是比较好的,如果有相关需求可以用这个功能来翻译,在选项栏里有转录和翻译两个选项。

中文 task

例如我用一个中文的音频,然后选项选择翻译,出来的就是英文。

其它 设置

其它部分的设置我没弄明白能起到什么作用就不讲了。

后期处理工具

注意 后期处理工具

后期处理工具,需要先有转录的字幕才能使用,否则会报错。

基础工具

settime

set time,设置时间用的工具。字幕索引(subtitle index),设置作用于在字幕的哪一段。下面两个选项则是设置每段字幕开始或结束的时间戳。再往下就是设置时间了。

设置时间 settime

我们把字幕索引改成 2 ,设置为结束时间,把秒设置为 4 ,点击 Modify 。可以看到第三段的结束时间戳变成了 4 秒。因为字幕是从 0 段开始的,所以索引为 2 时,就是第三段字幕。然后我们再调整一个,把字幕索引调整为 0 ,设置开始时间,可以看到第一段开始时间变成了 4 秒,之前设置过的也会保持不变,所以要重置的话只能重新转录或者自己用这个工具改回来。

Shift

Shift ,时间戳整体偏移。

整体偏移4秒 Shift

我们把秒改成 4 ,点击偏移,会看到底下所有的时间戳都增加了 4 秒。

高级工具

ffsubsync

ffsubsync

在高级工具里的第一个选项是字幕同步工具(ffsubsync),能使语言无关的字幕与视频自动同步,使字幕与视频中的时间戳起始点相一致。

工具原理

同步算法分 3 个步骤操作:* 将视频文件的音频流和字幕都分解成10ms 的窗口。* 对于每个 10ms 的窗口,确定该窗口是否包含语音。对于字幕来说,只需确定在每个时间窗口中是否有任何字幕是 "打开 "的;对于音频流,使用现成的语音活动检测器(VAD)。* 现在有两个二进制字符串:一个是字幕,另一个是视频。通过将 0 与 0 、1 与 1 的匹配来对齐这些字符串。我们对这些排列进行评分,计算公式:(#视频 1 与字幕 1 的匹配)-(#视频 1 与字幕 0 的匹配)。

然后通过利用得分高的结果,来对齐字幕和视频。为了提高效率用了卷积操作来计算得分,即用傅里叶变换计算所有对齐方式的得分。

过渡 功能

如果之前调整了幻听参数效果还是不理想,我们可以继续用这个字幕同步工具来优化结果。

VAD

VAD ,中文翻译叫语音端点检测。作用是从声音信号流里识别和消除长时间的静音期。这些选项是选择 VAD 的Python 接口,webRTC 是谷歌的接口,专门检测语音;auditok 检测所有的音频,但是噪音越大效果也越差;silero 训练过很多种语言,应该是效果最好的,但我这里用不了,也没法测试了。

时间戳设置

其它的参数大部分按照名字来理解就行。第一个字幕最大秒数(max-subtitle-seconds),就是字幕停留的最大时间。第二个开始秒数(start-seconds),就是从哪个时间开始转录字幕。第三个字幕最大偏移秒数(max-offset-seconds),就是给每段字幕允许的秒数偏移范围。第四个应用偏移秒数(apply-offset-seconds),就是你预先给每段时间戳设定一个偏移量,整体时间偏移。第五个是当偏移量小于你设定的数则抑制输出(suppress-output-if-offset-less-than)。

音频帧率

音频的帧率(frame-rate),单位时间内对声音信号的采样次数,采样频率越高,声音越自然。不过在这里,是指输入媒体文件的音频采样率。

视频帧率 音频帧率

可以用视频帧率来理解,视频帧率是每秒钟画面的帧数,帧数越高,视频会越流畅,音频也是同理。

输出编码

输出编码(output-encoding),就是输出字幕的字符编码,相关概念比较繁杂,讲多了容易偏题,用默认的 utf-8 就行。

跳过推断帧率

跳过推断帧率(skip-infer-framerate- ratio),不尝试自动识别媒体的帧率。

不修复帧率

不修复帧率(no-fix-framerate),不会纠正媒体的帧率。

序列化语音

序列化语音(serialize-speech),将参考语音序列化为一个 numpy 数组,便于算法更快速的评分。

序列化

序列化(serialize)是指将一种数据结构或对象转化为可存储或传输的格式的过程。

numpy

numpy 是一种常用的 Python 库,用于处理科学计算和数值运算。

转格式 序列化语音

其实和转格式一个意思,比如剪辑软件 PR无法读取 MKV 格式的视频,所以我们要把这个格式转换成 MP4 给 PR使用。

gss

gss,使用黄金分割搜索来尝试找到视频和字幕之间的最佳帧率。

效果 ffsubsync使用

在这里我只是把这个工具的功能都介绍了一遍,这个工具主要还是用它的 VAD检测静音段配合字幕对齐,效果非常受转录时间戳的影响。

同步 ffsubsync

举个例子,我用我以前录制的音频来测试,先用 Whisper 转录,看看直接转录的效果,然后我们来同步字幕,再来看看效果,会发现只有前 30 秒的时间起点同步是正确的,后面的很多都是乱的,原因是这个工具它只能偏移字幕,而不能更改时间戳起始点。

其它 其它功能例子

其它功能的例子我就不展示了,等之后这个工具更完善了再来补充例子。

Translation

translation

翻译工具,模型选择这个(facebook/mbart-large-50-many-to-many-mmt),这个模型是多语言机器翻译微调的模型,驱动有 GPU 的还是选择 cuda 。

batch_size

批大小,一次加载的样本数,看你显存够不够用,不够用就降低数值。

其它参数

这个(verbose)是进度条显示;第二个是下载和创建模型,这个必须勾选上才会有下面的语言选项;一个是源语言,就是字幕本身的语言,另一个目标语言,就是要翻译成的语言。设置完之后点击翻译就能生成。

效果 翻译

这个模型的翻译效果是不及谷歌翻译的,优点是保持了字幕的结构进行了翻译且能离线翻译。

英翻中 translation

我们用一个英文的音频来测试,先转录,然后我们用翻译工具进行翻译,可以看看翻译的结果,我们用谷歌来对比一下翻译结果。

##快速使用流程及推荐设置

总结 推荐设置及流程

总结一下:

英文类视频,填写路径,选择尾缀 .en 的中型模型( .en 专门针对英文优化),直接转录就能得到很不错的字幕文件,如果需要翻译,按照上面讲的翻译参数对着调整,点击翻译,再到最下面导出,时间戳不够精确可以用同步字幕工具进行字幕的同步。

其它语言,模型换成 large-V2 ,然后尝试调整到一个合适的幻听相关参数再进行转录,也可以继续用同步字幕工具进行字幕的同步。

[BGM]:Roa - Winter 【Official】

讨论
随记