【开源工具】使用Whisper将提取视频、语音的字幕

news2024/10/7 13:25:06

这里写目录标题

  • 一、语音转字幕操作步骤
    • 1、下载安装包Assets\WhisperDesktop.zip[^2]
    • 2、加载模型
      • 2.1 下载模型
        • 2.1.1 进入Hugging Face[^3]的仓库
        • 2.1.2 选择需要下载的模型
        • 2.1.3 配置模型路径
    • 3、语音转字幕
    • 4、实时语言转录功能
  • 二、相关简介[^1]
    • 特点
    • 开发人员指南
      • 构建说明
      • 其他注意事项
      • 绩效说明
      • 进一步优化
      • 缺少的功能
      • 结尾语

一、语音转字幕操作步骤

1、下载安装包Assets\WhisperDesktop.zip1

2、加载模型

运行WhisperDesktop.exe,
启动后加载模型“load model,please wait…”,等待其将模型加载到内存。

2.1 下载模型

刚开始是没有模型的,需要到Hugging Face2的仓库里面下载模型并配置相关路径

2.1.1 进入Hugging Face2的仓库

点击ggerganov/whisper.cpp进入Hugging Face仓库

2.1.2 选择需要下载的模型

在Hugging Face仓库,选择Files and versions,选择以下两种模型:

  • ggml-large.bin
  • ggml-medium.bin
    在这里插入图片描述

2.1.3 配置模型路径

在Load Whisper Model 页,Model Path选择好模型的路径D:\WhisperDestop\ggml-whisper.bin,点击OK,等待其将模型加载到内存。

3、语音转字幕

在Transcribe Audio File页面:

  1. Language:Chinese(视频或语音说话使用的语种)
  2. Translate: (把识别出来的文本给翻译成英文输出)
  3. Transcribe File:C:\xxx.mp4(选择你要提取字幕的视频、音频等)
  4. Output Format:SubRip subtitles(输出格式)
    • None:
    • Text file:纯文本
    • Text with timestamps
    • SubRip subtitles:字幕(标准的字幕格式 时段+文字)
      可以将后缀改为.srt格式,这样的文件可以直接拖放到剪辑软件里面,他会自动给你排列好,像这样的字幕是不需要咱们来对时间的
    • WebVTT subtitles

4、实时语言转录功能

开启实时语言转录之后,你对它说话的话,他会自动把你说的话转换成文字并记录下来

二、相关简介3

特点

  • 基于DirectCompute的供应商无关GPGPU;该技术的另一个名称是“Direct3D 11中的计算着色器”

  • 简单的C++实现,除了基本的操作系统组件之外没有运行时依赖项

  • OpenAI的实现快得多。
    在我的台式电脑上,使用GeForce 1080Ti GPU,中等型号,用PyTorchCUDA转录3:24分钟的语音需要45秒,但我的实现和DirectCompute只需要19秒。
    有趣的是:这是9.63 GB的运行时依赖项,而Whisper.dll431 KB

  • 混合F16/F32精度:自D3D v10.0版本起,Windows需要支持R16_FLOAT缓冲区

  • 内置性能探查器,用于测量单个计算着色器的执行时间

  • 内存使用率低

  • 用于音频处理的Media Foundation支持大多数音频和视频格式(Ogg Vorbis除外),以及大多数在Windows上工作的音频捕获设备(一些专业设备除外,它们只实现ASIO API)。

  • 用于音频捕获的语音活动检测。
    该实现基于Mohammad MoattarMahdi Homayoonpoor 2009年的文章“一种简单但高效的实时语音活动检测算法”。

  • 易于使用的COM型APInuget上提供了惯用的C#包装。1.10版引入了对PowerShell 5.1的脚本支持,这是Windows上预装的旧版本“Windows PowerShell”

  • 可用的预构建二进制文件

唯一支持的平台是64位 Windows
应该在Windows 8.1或更新版本上工作,但我只在Windows 10上测试过。
该库需要一个支持Direct3D 11.0GPU,在2023年,它的意思只是“任何硬件GPU”。最新的不支持D3D 11.0GPU2011年的Intel Sandy Bridge

CPU方面,库需要AVX1F16C支持。

开发人员指南

构建说明

  1. 克隆此存储库

  2. Visual Studio 2022中打开WhisperCpp.sln。我使用的是免费软件社区版,版本17.4.4

  3. 切换到Release 配置

  4. 在解决方案的Tools子文件夹中生成并运行CompressShaders C#项目。要运行该项目,请在visual studio中右键单击“设置为启动项目”,然后在VS的主菜单中单击“调试/启动而不调试”。成功完成后,您应该会看到一个控制台窗口,其中有一行如下所示:
    压缩的46个计算着色器,123.5 kb->18.0 kb

5.构建Whisper项目以获得本机DLL,或用于C#包装器和nuget包的WhisperNet或示例。

其他注意事项

如果你要在使用Visual C++2022或更新版本构建的软件中使用该库,你可能会以.msm合并模块或vc_redist.x64.exe二进制文件的形式重新分发Visual C++运行时DLL

如果你这样做,右键单击Whisper项目、属性、C/C++、代码生成,将“Runtime Library”设置从Multi-threaded (/MT)切换到Multi-threaded DLL (/MD),然后重建:二进制文件将变得更小。

该库包括RenderDoc GPU调试器集成。
RenderDoc启动程序时,按住F12键以捕获计算调用。

如果要调试HLSL着色器,请使用DLL的调试构建,其中包括着色器的调试构建。您将在调试器中获得更好的用户体验。
该存储库包括许多仅用于开发的代码:耦合替代模型实现、一些计算着色器的兼容FP64版本、调试跟踪和比较跟踪的工具等。

这些东西被预处理器宏constexpr标志禁用了,我希望保留在这里没问题。

绩效说明

我在办公地点选择了几款GPU进行有限的测试。

具体来说,我已经为英伟达 1080TiRyzen 7 5700G内部的Radeon Vega 8Ryzen 5 5600U内部的Radeon Vega 7进行了优化。

总结如下。

英伟达为大型型号提供了5.8的相对速度,为中型型号提供了10.6的相对速度。

AMD Ryzen 5 5600U APU为中型型号提供了约2.2的相对速度。不太好,但仍然比实时快得多。

我也在英伟达 1650上测试过:比1080Ti慢,但很好,比实时快得多。

我还测试了酷睿i7-3612QM内部的Intel HD Graphics 4000,中等型号的相对速度为0.14,小型型号为0.44。这比实时慢得多,但我很高兴发现我的软件即使在2012年推出的集成移动GPU上也能工作。

我不确定离散AMD GPU或集成Intel GPU的性能是否理想,它们没有专门针对它们进行优化。
理想情况下,它们可能需要两个最昂贵的计算着色器(mulMatTiled.hlslmulMatByRowTiled.hlsl)的稍微不同的构建。
也许还有其他调整,比如Whisper/D3D/device.h头文件中的useReshapedMatMul()值。

我不知道如何衡量,但我有一种感觉,瓶颈是内存,而不是计算。
黑客新闻上有人测试了3060Ti,即带有GDDR6内存的版本。与1080Ti相比,该GPU具有1.3倍FP32 FLOPS,但具有0.92倍VRAM带宽。该应用程序在3060Ti上慢了约10%。

进一步优化

我只花了几天时间优化这些着色器的性能。
也许可以做得更好,以下是一些想法。

  • 与FP32相比,Radeon Vega或nVidia 1650等较新的GPU具有更高的FP16性能,但我的计算着色器仅使用FP32数据类型。
    一半的细致,两倍的乐趣

  • 在当前版本中,FP16张量使用着色器资源视图向上转换加载的值,使用无序访问视图向下转换存储的值。
    切换到字节地址缓冲区,加载/存储完整的4字节值,并使用f16t32/f32-tof16内部函数在HLSL中进行上变频/下变频可能是个好主意。

  • 在当前版本中,所有着色器都是脱机编译的,Whisper.dll包含DXBC字节码。
    HLSL编译器D3DCompiler_47.dll是一个操作系统组件,速度非常快。对于昂贵的计算着色器,最好提供HLSL而不是DXBC,并在启动时使用宏的特定于环境的值进行编译。

  • 将整个东西从D3D11升级到D3D12可能是个好主意。
    较新的API更难使用,但它包含了D3D11没有的潜在有用功能:wave intrinsic和explicit FP16.。

缺少的功能

未实现自动语言检测。
在当前版本中,实时音频捕获的延迟很高。
具体而言,根据语音检测,该数字约为5-10秒。
至少在我的测试中,当我提供的音频片段太短时,模型并不满意。

我已经增加了延迟并结束了这一天,但理想情况下,这需要一个更好的解决方案来优化用户体验。

结尾语

在我看来,这是一个无偿的业余项目,我在2022-23年的寒假里完成了。

代码可能有一些bug。

软件是“原封不动”提供的,没有任何形式的担保。

感谢Georgi Gerganov实现了whisper.cpp以及GGML二进制格式的模型。

我不会编写Python程序,也对ML生态系统一无所知。

如果没有一个好的C++参考实现来测试我的版本,我甚至不会启动这个项目。

whisper.cpp项目有一个例子,它使用相同的GGML实现来运行另一个OpenAI的模型GPT-2。

用这个项目中已经实现的计算着色器和相关基础设施来支持ML模型应该不难。

如果你觉得这很有用,如果你考虑向“Come Back Alive”基金会捐款,我将不胜感激。


  1. http://github.xiaoc.cn/Const-me/Whisper/releases/tag/1.11.0 ↩︎

  2. https://www.huggingface.co/ggerganov/whisper.cpp ↩︎ ↩︎

  3. http://github.xiaoc.cn/Const-me/Whisper ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模拟退火(SA)算法

目录 模拟退火算法 主要代码 Mutate Sphere 模拟退火算法 主要代码 repmat 重复数组副本 B repmat(A,n) 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n。 unifrnd 生成连续统一的随机数 sort 对数组进行…

抖音百科词条创建在哪里?

抖音作为中国火爆的短视频平台,拥有相当庞大的用户群体,用户在抖音上创建百科词条就可以获得非常可观的曝光和展现,抖音百科词条是通过哪种方式创建的呢?想要创建一个抖音百科怎么做?接下来伯乐网络传媒就来给大家讲一…

Linux之进程信号(上)

文章目录 前言一、进程信号二、查看命令kill -l与信号解释man 7 signal1.kill -l2.man 7 signal 三、信号的产生1.按键ctrl cctrl zctrl \ 2.系统调用kill——向任意进程发送信号raise——进程给自己发送任意信号abort——进程给自己指定的信号(6号信号&#xff…

主流解压缩软件有哪些?这四款可以满足你的所有需求

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 第一款:bandizip(推荐) 第二款:7-zip 第三款:Nanazip 第四款&#xff1a…

Vue中如何进行表单自定义验证

Vue中如何进行表单自定义验证 在Vue应用中,表单验证是非常重要的一部分。Vue提供了一些内置的验证规则,比如required、min、max等。但是有时候我们需要对表单进行自定义验证,以满足特定的业务需求。本文将介绍如何在Vue中进行表单自定义验证…

第十章 数学相关

第十章 数学相关 第一节 集合 真题(2010-53)-数学相关-集合-画饼集能力-朴素逻辑 53.参加某国际学术研讨会的 60 名学者中,亚裔学者 31 人,博士 33 人,非亚裔学者中无博士学位的 4 人。根据上述陈述,参…

Java16:集合

一:Collecction接口 1.单列集合框架结构 》Collection接口:单列集合,用来存储一个一个的对象 》 List接口:存储有序的,可重复的数据---》动态数组,实现类:ArrayList,LinkedList,…

【深蓝学院】手写VIO第3章--基于优化的 IMU 与视觉信息融合--作业

0. 题目 1. T1 T1.1 绘制阻尼因子曲线 将尝试次数和lambda保存为csv,绘制成曲线如下图 iter, lambda 1, 0.002000 2, 0.008000 3, 0.064000 4, 1.024000 5, 32.768000 6, 2097.152000 7, 699.050667 8, 1398.101333 9, 5592.405333 10, 1864.135111 11, 1242.7567…

【书影观后感 十四】左晖-做难而正确的事

距离上一本完整读完的书《李自成》及据此而作的读后感【书影观后感 十三】甲申三百七十八年祭已经接近一年时间了,最近心血来潮读了李翔的访谈形式系列《详谈》的第一本《左晖-做难而正确的事》。 虽然这本薄薄的书只有171页,访谈的形式也看似比较随意…

因果推断18--估计个体治疗效果:泛化界和算法CRF(个人笔记)

目录 1. 介绍 2. 相关工作 3.估计ITE:误差界 4. 估计ITE的算法 5.实验 5.1. 模拟结果:IHDP 5.2. 现实世界的结果:工作 5.3. 结果 6.结论 参考 英文题目:Estimating individual treatment effect: generalization bounds…

【Python plotly】零基础也能轻松掌握的学习路线与参考资料

Python plotly是一个优秀的数据可视化工具,通过使用Python语言和Plotly的图表支持库,可以轻松地创建交互式和动态图表,Python plotly的可视化效果美观且易于实现。 学习路线: Python基础语法和Numpy、Pandas基础学习 Python是一…

碳排放预测模型 | Python实现基于LSTM长短期记忆神经网络的碳排放预测模型(预测未来发展趋势)

文章目录 效果一览文章概述研究内容环境准备源码设计学习总结参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于LSTM长短期记忆神经网络的碳排放预测模型(预测未来发展趋势) 研究内容 这是数据集的链接:https://github.com/owid/co2-data/blob/master/owid-co2-da…

windows一键安装redis3.2.100

下载 下载地址:https://gitcode.net/zengliguang/windows_redis_offline_install.git 使用git进行进行clone下载 在电脑桌面或者其他文件夹下 ,鼠标右键点击 选择git clone ,下图中url为下载地址,Directory为本地存储路径,点击…

ORB_SLAM3 闭环检测

ORB SLAM3系统初始化ORB SLAM3 构建FrameORB_SLAM3 单目初始化ORB_SLAM3 双目匹配ORB_SLAM3_IMU预积分理论推导(预积分项)ORB_SLAM3_IMU预积分理论推导(噪声分析)ORB_SLAM3_IMU预积分理论推导(更新)ORB_SLAM3_IMU预积分理论推导(残差)ORB_SLAM3_优化方法 Pose优化ORB_SLAM3 闭环…

【量化交易笔记】8.基于深度学习(LSTM)预测股票价格

前言 前一章节,已作随机森林来预测股票价格,也是一种比较常见的方法,本章基于深度学习算法来处理时间序列,来预测股票未来的价格。LSTM是一种特殊类型的循环神经网络(RNN),在自然语言处理和时间…

【C语言之函数栈帧】(动态图—巨细)一文带你了解局部变量随机值及栈区上的函数调用

🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:C语言 局部变量为什么是随机值?函数是如何调用的? ✉️ 该篇将使用该编译器,通过介绍栈帧的创建和销毁来深入了解局…

计算机网络开荒3-传输层

文章目录 一、传输层概述1.1 网络层 vs 传输层 二、多路复用 多路分用三、UDP3.1 RDT3.1.1 Rdt3.1.1.1 Rdt1.03.1.1.2 Rdt2.03.1.1.3 Rdt2.13.1.1.4 Rdt2.23.11.5 Rdt 3.0 四、滑动窗口协议4.1 流水线机制4.1.2 滑动窗口协议GBNSR 五、TCP5.1 可靠数据传输5.1.1 RTT和超时 5.2 …

Vue中如何进行图表绘制

Vue中如何进行图表绘制 数据可视化是Web应用中非常重要的一部分,其中图表绘制是其中的重要环节。Vue作为一款流行的前端框架,提供了很多优秀的图表库,以满足不同业务场景下的需求。本文将介绍如何在Vue中进行图表绘制,包括使用Vu…

MM32F3273G8P火龙果开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置

MM32F3273G8P火龙果开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置 1、Systick寄存器 Systick是ARM内核的一个外设,所以在不同芯片的代码上移植比较方便,他总共有4个寄存器, 从Systick定义中可以看到: typedef struct {__I…

一文看懂Java中的锁

阅读本文你可以获得 Synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock、Condition、Semaphore、CountDownLatch、CyclicBarrier、JMM、Volatile、Happens-Before。 全文共16000字左右(包含示例代码)、欢迎收藏、在看、转发分批食用 一…