音视频转文字不求人,OpenAI Whisper来帮您

2023年 10月 12日 105.2k 0

1、引言

😀平时上下班通勤,有听播客或看视频并做笔记的习惯,边听边记显然效率很低,而且会破坏学习的 连贯性。

所以笔者一般都是想办法捣鼓出 字幕,然后 对关键信息进行浏览和总结, 而且这种处理方式在遇到 进度慢 或 内容枯燥 的学习视频时,效率极高。

音视频字幕提取 或者说 语音识别,两年前写过一篇文章《好家伙 | 自己写一个视频字幕提取工具 - 掘金》,文中实现了三种字幕提取的方案:

  • ① 定时提取视频帧 + 裁剪特定区域 + OCR文字识别
  • ② 判断是否存在字幕流,是直接提取
  • ③ 破解第三方语音转文字APP的API,直接本地脚本批量调用

这里的破解并不是破解了付费接口白嫖!!!掏了98买了两年!!!不过前几个月过期了,按照我的使用频次,续费肯定是不可能的,需要找下替代品。

2、剪映

问了下做短视频的朋友,字幕怎么搞,给我推荐了 剪映专业版,使用方法很简单:把视频或者音频拖到下面,然后点击 识别字幕/歌词:

静待片刻,会出现字幕:

接着点击右上角的 导出,选中 字幕导出,还可以选择字幕的格式:

点击 导出,会生成对应的字幕文件:

能用,但是不支持多个视频的字幕提取(当然也可能是我使用方式不对),像这个冥想的专题视频有76个。一个个搞,得搞到啥时候,需要找一个支持批量提取的工具。

3、Buzz

网上搜了一圈,发现很多人安利了 chidiwilliams/buzz ,基于OpenAI 开源的 Whisper 自动语音识别模型,可以批量将音视频中的内容自动转换为带有时间的字幕,速度极快(模型离线存在本地,转换过程无需联网)。安装方法:

# macOS
brew install --cask buzz

# Windows
下载这个页面里的.exe文件安装:https://github.com/chidiwilliams/buzz/releases/latest

# Linux
sudo apt-get install libportaudio2
sudo snap install buzz

用法很简单,此处以winodws为例,打开软件后,点击 File → Import Media File... 选中要提取字幕的音视频文件:

打开目标目录没找到音视频的话,这里选择:

选完文件会弹窗,然后选择 模型(默认就好) ,视频语言,生成字幕的格式:

第一次转换需要下载模型 (后面不需要),建议打开 科学上网,不然速度会很慢!!!

模型下载完,静待片刻,等待字幕提取完毕:

可以看到速度很快,5个视频加起来1分钟不到就完成了,在视频所在目录下可以看到生成的字幕文件:

格式不喜欢或者要修改字幕内容,还可以双击,重新导出:

打开看下识别效果:

不能看出有部分 错字,以及 繁体字,试试换成更大的模型看看效果,比如这里从 tiny → small

可以看到时间长了不少,但是识别准确率却大幅提升:

如果觉得准确率还不够,可以试下更大的模型,不同级别模型的大小及需要的显存大小要求如下:

笔者的i7 6700k没外置显卡,使用medium卡得一匹,转换时长也延长到快3分钟:

另外,Buzz其实还支持其它模型:

不过Whisper模型基本够用了,感兴趣的读者可以试试其它几个,同类型的工具还有 WhisperDesktop、jhj0517/Whisper-WebUI (需要自己部署到本地,提供网页UI页面)

4、python 调 whisper库

上面的工具其实够用了,但我想打造一条批处理的流水线:

输入一条视频url → 批量下载视频 → 转音频 → 提取字幕 → 结果合并。

还是得用python调下 openai/whisper,使用它需要 python 3.8-3.10 间的版本,确认安装的python版本在此区间,使用 pip命令安装whisper库:

# 下述方式二选一

# ① 下载并安装(或更新到)最新版本的whisper,建议
pip install -U openai-whisper

# ② 从存储库中提取并安装最新的提交及其 Python 依赖项
pip install git+https://github.com/openai/whisper.git 

# 要将软件包更新到此存储库的最新版本
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

接着需要安装下 ffmpeg 配下环境变量,Windows系统可参考《ffmpeg的安装配置》

然后安装 pyTorch,打开官网 pytorch.org 选择cpu版本,最下面会生成一行pip命令用于安装,直接复制:

比如这里的命令:

pip3 install torch torchvision torchaudio

# 注:没科学上网会下载有可能很慢,可以替换成国内镜像加快下载速度
pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

openai-whisper、torch、ffmpeg 这三个东西都准备好了,接着就可以写代码提取字幕了,先看下命令语法:

参数讲解:

  • --task: 指定转录方式,默认使用 --task transcribe 转录模式,--task translate 则为 翻译模式,目前只支持翻译成英文。
  • --model:指定使用模型,默认使用 --model small,Whisper 还有 英文专用模型,就是在名称后加上 .en,这样速度更快。
  • --language:指定转录语言,默认会截取 30 秒来判断语种,但最好指定为某种语言,比如指定中文是 --language Chinese。
  • --device:指定硬件加速,默认使用 auto 自动选择,--device cuda 则为显卡,cpu 就是 CPU, mps 为苹果 M1 芯片。
  • --output_format:指定字幕文件的生成格式,txt,vtt,srt,tsv,json,all,指定多个可以用大括号{}包裹,不设置默认all。
  • -- output_dir: 指定字幕文件的输出目录,不设置默认输出到当前目录下。
  • --fp16:默认True,使用16位浮点数进行计算,可以在一定程度上减少计算和存储开销,可能存在精度丢失,笔者CPU不支持,会出现下述警告,指定它为False就不会出现了,即采用32位浮点数进行计算。

执行命令示例如下:

whisper.exe test.mp4 --language Chinese --model tiny --fp16 False

识别效果:

生成的字幕文件:

好,接着在python代码中调用:

import whisper

if __name__ == '__main__':
    model = whisper.load_model("tiny")
    result = model.transcribe("test.mp4", fp16=False, language="Chinese")
    print(result["text"])

运行结果如下:

Tip:如果运行出现下述错误:

if` '/' in name or '' in name: TypeError: argument of type 'NoneType' is not iterable

可以执行下述命令 卸载whisper 安装openai-whisper:

pip uninstall whisper
pip install openai-whisper

没找到直接生成字幕文件的方法,官方仓库给出的api非常简陋... 这部分估计得自己写代码生成,result的结构:

按需获取字段吧,另外还发现了一个两个有意思的库,感兴趣自取:

  • jianfch/stable-ts → 更准确的时间戳,一些常用工具方法封装,如:to_srt_vtt()
  • gumblex/zhconv → 中文简繁转换

🤡 对了,有个加快提取速度的小妙招:先用ffmpeg将视频批量转换为音频,再进行字幕提取~

🤣 另外,我还试了下霓虹语字幕提取,识别效果同样很不戳,😍如果再 配合ai翻译,以后看小电影岂不是不用在车牌号后面加上: 中字 了,AI YYDS!!!

参考文献及文中部分图片来源:5 分钟 Whisper 测评,看完没有人比你更懂「语音识别」

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论