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

1、引言

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

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

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

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

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

2、剪映

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

静待片刻,会出现字幕:

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

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

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

3、Buzz

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

bash 复制代码
# 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模型基本够用了,感兴趣的读者可以试试其它几个,同类型的工具还有 WhisperDesktopjhj0517/Whisper-WebUI (需要自己部署到本地,提供网页UI页面)

4、python 调 whisper库

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

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

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

bash 复制代码
# 下述方式二选一

# ① 下载并安装(或更新到)最新版本的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命令用于安装,直接复制:

比如这里的命令:

bash 复制代码
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位浮点数进行计算。

执行命令示例如下:

bash 复制代码
whisper.exe test.mp4 --language Chinese --model tiny --fp16 False

识别效果:

生成的字幕文件:

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

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:

bash 复制代码
pip uninstall whisper
pip install openai-whisper

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

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

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

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

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

相关推荐
亚里士多没有德7755 分钟前
强制删除了windows自带的edge浏览器,重装不了怎么办【已解决】
前端·edge
micro2010148 分钟前
Microsoft Edge 离线安装包制作或获取方法和下载地址分享
前端·edge
.生产的驴13 分钟前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
awonw15 分钟前
[前端][easyui]easyui select 默认值
前端·javascript·easyui
爱学的小涛20 分钟前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛22 分钟前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪26 分钟前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
小雨cc5566ru26 分钟前
uniapp+Android智慧居家养老服务平台 0fjae微信小程序
android·微信小程序·uni-app
爱码少年32 分钟前
springboot工程中使用tcp协议
spring boot·后端·tcp/ip
九圣残炎36 分钟前
【Vue】vue-admin-template项目搭建
前端·vue.js·arcgis