持续进化,快速转录,Faster-Whisper对视频进行双语字幕转录实践(Python3.10)

news2024/11/26 20:40:54

Faster-Whisper是Whisper开源后的第三方进化版本,它对原始的 Whisper 模型结构进行了改进和优化。这包括减少模型的层数、减少参数量、简化模型结构等,从而减少了计算量和内存消耗,提高了推理速度,与此同时,Faster-Whisper也改进了推理算法、优化计算过程、减少冗余计算等,用以提高模型的运行效率。

本次我们利用Faster-Whisper对日语视频进行双语(日语/国语)转录实践,看看效率如何。

构建Faster-Whisper转录环境

首先确保本地已经安装好Python3.10版本以上的开发环境,随后克隆项目:

git clone https://github.com/ycyy/faster-whisper-webui.git

进入项目的目录:

cd faster-whisper-webui

安装项目依赖:

pip3 install -r requirements.txt

这里需要注意的是,除了基础依赖,还得再装一下faster-whisper依赖:

pip3 install -r requirements-fasterWhisper.txt

如此,转录速度会更快。

模型的下载和配置

首先在项目的目录建立模型文件夹:

mkdir Models

faster-whisper项目内部已经整合了VAD算法,VAD是一种音频活动检测的算法,它可以准确的把音频中的每一句话分离开来,并且让whisper更精准的定位语音开始和结束的位置。

所有首先需要配置VAD模型:

git clone https://github.com/snakers4/silero-vad

然后将克隆下来的vad模型放入刚刚建立的Models文件夹中即可。

接着下载faster-whisper模型,下载地址:

https://huggingface.co/guillaumekln/faster-whisper-large-v2

这里建议只下载faster-whisper-large-v2模型,也就是大模型的第二版,因为faster-whisper本来就比whisper快,所以使用large模型优势就会更加的明显。

模型放入models文件夹的faster-whisper目录,最终目录结构如下:

models  
├─faster-whisper  
│  ├─large-v2  
└─silero-vad  
    ├─examples  
    │  ├─cpp  
    │  ├─microphone_and_webRTC_integration  
    │  └─pyaudio-streaming  
    ├─files  
    └─__pycache__

至此,模型就配置好了。

本地推理进行转录

现在,我们可以试一试faster-whisper的效果了,以「原神」神里绫华日语视频:《谁能拒绝一只蝴蝶忍呢?》为例子,原视频地址:

https://www.bilibili.com/video/BV1fG4y1b74e/

项目根目录运行命令:

python cli.py --model large-v2 --vad silero-vad --language Japanese --output_dir d:/whisper_model d:/Downloads/test.mp4

这里–model指定large-v2模型,–vad算法使用silero-vad,–language语言指定日语,输出目录为d:/whisper_model,转录视频是d:/Downloads/test.mp4。

程序输出:

D:\work\faster-whisper-webui>python cli.py --model large-v2 --vad silero-vad --language Japanese --output_dir d:/whisper_model d:/Downloads/test.mp4  
Using faster-whisper for Whisper  
[Auto parallel] Using GPU devices ['0'] and 8 CPU cores for VAD/transcription.  
Creating whisper container for faster-whisper  
Using parallel devices: ['0']  
Created Silerio model  
Parallel VAD: Executing chunk from 0 to 74.071224 on CPU device 0  
Loaded Silerio model from cache.  
Getting timestamps from audio file: d:/Downloads/test.mp4, start: 0, duration: 74.071224  
Processing VAD in chunk from 00:00.000 to 01:14.071  
C:\Users\zcxey\AppData\Roaming\Python\Python310\site-packages\torch\nn\modules\module.py:1501: UserWarning: operator () profile_node %669 : int[] = prim::profile_ivalue(%667)  
 does not have profile information (Triggered internally at ..\third_party\nvfuser\csrc\graph_fuser.cpp:108.)  
  return forward_call(*args, **kwargs)  
VAD processing took 2.474104000022635 seconds  
Transcribing non-speech:  
[{'end': 75.071224, 'start': 0.0}]  
Parallel VAD processing took 8.857761900057085 seconds  
Device 0 (index 0) has 1 segments  
Using device 0  
(get_merged_timestamps) Using override timestamps of size 1  
Processing timestamps:  
[{'end': 75.071224, 'start': 0.0}]  
Running whisper from  00:00.000  to  01:15.071 , duration:  75.071224 expanded:  0 prompt:  None language:  None  
Loading faster whisper model large-v2 for device None  
WARNING: fp16 option is ignored by faster-whisper - use compute_type instead.  
[00:00:00.000->00:00:03.200] 稲妻神里流 太刀術免許開伝  
[00:00:03.200->00:00:04.500] 神里綾香  
[00:00:04.500->00:00:05.500] 参ります!  
[00:00:06.600->00:00:08.200] よろしくお願いします  
[00:00:08.200->00:00:12.600] こののどかな時間がもっと増えると嬉しいのですが  
[00:00:13.600->00:00:15.900] 私って欲張りですね  
[00:00:15.900->00:00:18.100] 神里家の宿命や  
[00:00:18.100->00:00:19.900] 社部業の重りは  
[00:00:19.900->00:00:23.600] お兄様が一人で背負うべきものではありません  
[00:00:23.600->00:00:27.700] 多くの方々が私を継承してくださるのは  
[00:00:27.700->00:00:30.900] 私を白鷺の姫君や  
[00:00:30.900->00:00:34.600] 社部業神里家の霊嬢として見ているからです  
[00:00:34.600->00:00:38.500] 彼らが継承しているのは私の立場であって  
[00:00:38.500->00:00:41.700] 綾香という一戸人とは関係ございません  
[00:00:41.700->00:00:43.400] 今の私は  
[00:00:43.400->00:00:47.300] 皆さんから信頼される人になりたいと思っています  
[00:00:47.300->00:00:49.700] その気持ちを鼓舞するものは  
[00:00:49.700->00:00:52.300] 肩にのしかかる銃石でも  
[00:00:52.300->00:00:54.800] 他人からの期待でもございません  
[00:00:54.800->00:00:56.700] あなたがすでに  
[00:00:56.800->00:00:58.800] そのようなお方だからです  
[00:00:58.800->00:01:00.500] 今から言うことは  
[00:01:00.500->00:01:03.900] 稲妻幕府社部業神里家の肩書きに  
[00:01:03.900->00:01:06.200] ふさわしくないものかもしれません  
[00:01:06.200->00:01:11.100] あなたは私のわがままを受け入れてくださる方だと信じています  
[00:01:11.100->00:01:12.500] 神里流  
[00:01:12.500->00:01:14.000] 壮烈  
Whisper took 22.232674299972132 seconds  
Parallel transcription took 31.472856600070372 seconds  
Max line width 80  
Closing parallel contexts  
Closing pool of 1 processes  
Closing pool of 8 processes

可以看到,1分14秒的视频,vad用了8秒,whisper用了22秒,转录一共用了31秒。

注意,这里只是用了whisper原版的算法,现在我们添加–whisper_implementation faster-whisper参数来使用faster-whisper改进后的算法:

python cli.py --whisper_implementation faster-whisper --model large-v2 --vad silero-vad --language Japanese --output_dir d:/whisper_model d:/Downloads/test.mp4

程序返回:

Running whisper from  00:00.000  to  01:15.071 , duration:  75.071224 expanded:  0 prompt:  None language:  None  
Loading faster whisper model large-v2 for device None  
WARNING: fp16 option is ignored by faster-whisper - use compute_type instead.  
[00:00:00.000->00:00:03.200] 稲妻神里流 太刀術免許開伝  
[00:00:03.200->00:00:04.500] 神里綾香  
[00:00:04.500->00:00:05.500] 参ります!  
[00:00:06.600->00:00:08.200] よろしくお願いします  
[00:00:08.200->00:00:12.600] こののどかな時間がもっと増えると嬉しいのですが  
[00:00:13.600->00:00:15.900] 私って欲張りですね  
[00:00:15.900->00:00:18.100] 神里家の宿命や  
[00:00:18.100->00:00:19.900] 社部業の重りは  
[00:00:19.900->00:00:23.600] お兄様が一人で背負うべきものではありません  
[00:00:23.600->00:00:27.700] 多くの方々が私を継承してくださるのは  
[00:00:27.700->00:00:30.900] 私を白鷺の姫君や  
[00:00:30.900->00:00:34.600] 社部業神里家の霊嬢として見ているからです  
[00:00:34.600->00:00:38.500] 彼らが継承しているのは私の立場であって  
[00:00:38.500->00:00:41.700] 綾香という一戸人とは関係ございません  
[00:00:41.700->00:00:43.400] 今の私は  
[00:00:43.400->00:00:47.300] 皆さんから信頼される人になりたいと思っています  
[00:00:47.300->00:00:49.700] その気持ちを鼓舞するものは  
[00:00:49.700->00:00:52.300] 肩にのしかかる銃石でも  
[00:00:52.300->00:00:54.800] 他人からの期待でもございません  
[00:00:54.800->00:00:56.700] あなたがすでに  
[00:00:56.800->00:00:58.800] そのようなお方だからです  
[00:00:58.800->00:01:00.500] 今から言うことは  
[00:01:00.500->00:01:03.900] 稲妻幕府社部業神里家の肩書きに  
[00:01:03.900->00:01:06.200] ふさわしくないものかもしれません  
[00:01:06.200->00:01:11.100] あなたは私のわがままを受け入れてくださる方だと信じています  
[00:01:11.100->00:01:12.500] 神里流  
[00:01:12.500->00:01:14.000] 壮烈  
Whisper took 10.779123099986464 seconds  
Parallel transcription took 11.567014200030826 seconds

大模型只用了10秒,这效率,绝了。

中文字幕

在以往的Whisper模型中,如果我们需要中文字幕,需要通过参数–task translate翻译成英文,然后再通过第三方的翻译接口将英文翻译成中文,再手动匹配字幕效果,比较麻烦。

现在,我们只需要将语言直接设置为中文即可,程序会进行自动翻译:

python cli.py --whisper_implementation faster-whisper --model large-v2 --vad silero-vad --language Chinese --output_dir d:/whisper_model d:/Downloads/test.mp4

这里的–language参数改为Chinese。

程序返回:

Running whisper from  00:00.000  to  01:15.071 , duration:  75.071224 expanded:  0 prompt:  None language:  None  
Loading faster whisper model large-v2 for device None  
WARNING: fp16 option is ignored by faster-whisper - use compute_type instead.  
[00:00:00.000->00:00:03.200] 稲妻神里流太刀術免許改練  
[00:00:03.200->00:00:04.400] 神里綾香  
[00:00:04.400->00:00:05.400] 來吧  
[00:00:06.600->00:00:08.200] 請多多指教  
[00:00:08.200->00:00:12.600] 希望能有更多的這段寂靜的時間  
[00:00:13.600->00:00:15.800] 我真是太有興趣了  
[00:00:15.800->00:00:20.000] 神里家的宿命和社部行的重量  
[00:00:20.000->00:00:23.600] 不應該由哥哥一個人承擔  
[00:00:23.600->00:00:27.400] 很多人都敬重我  
[00:00:27.600->00:00:28.800] 是因為他們把我視為  
[00:00:28.800->00:00:34.600] 神里家的宿命和社部行的重量  
[00:00:34.600->00:00:38.600] 他們敬重的是我的立場  
[00:00:38.600->00:00:41.800] 與我自己的身分無關  
[00:00:41.800->00:00:43.400] 現在的我  
[00:00:43.400->00:00:47.400] 是想成為大家信任的一個人  
[00:00:47.400->00:00:49.800] 那些敬重我的人  
[00:00:49.800->00:00:52.400] 無論是肩上的重石  
[00:00:52.400->00:00:54.800] 或是別人的機器  
[00:00:54.800->00:00:58.800] 都是因為你已經是這樣的一個人  
[00:00:58.800->00:01:00.400] 我現在要說的話  
[00:01:00.400->00:01:03.800] 可能不適合  
[00:01:03.800->00:01:06.200] 神里家的宿命和社部行  
[00:01:06.200->00:01:11.000] 但我相信你能接受我的自私  
[00:01:11.000->00:01:12.400] 神里流  
[00:01:12.400->00:01:14.000] 消滅  
Whisper took 18.85215839999728 seconds

字幕就已经是中文了,注意转录+翻译一共花了18秒,时间成本比直接转录要高。

双语字幕效果:

结语

由于 Faster-Whisper 的速度更快,它可以扩展到更多的应用领域,包括实时场景和大规模的数据处理任务。这使得 Faster-Whisper 在语音识别、自然语言处理、机器翻译、智能对话等领域中具有更广泛的应用潜力,当然了,更重要的是,当您的电脑里D盘中的爱情片还没有中文字幕时,您当然知道现在该做些什么了。

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

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

相关文章

如何查看WiFi密码

本文分享一下手机和电脑上如何查看已经连接过的WiFi的密码,然后好分享给他人。 手机上分享wifi密码很简单,步骤如下: 生成二维码,读取WiFi密码 1、首先,在“设置”中找到“无线网络”,点击需要查找密码的Wi…

旅游业为什么要选择VR全景,VR全景在景区旅游上有哪些应用

引言: VR全景技术的引入为旅游业带来了一场变革。这项先进技术不仅提供了前所未有的互动体验,还为景区旅游文化注入了新的生机。 一.VR全景技术:革新旅游体验 1.什么是VR全景技术? VR全景技术是一种虚拟现实技术&am…

VB.NET—窗体引起的乌龙事件

目录 前言: 过程: 总结: 升华: 前言: 分享一个VB.NET遇到的一个问题,开始一直没有解决,这个问题阻碍了很长时间,成功的变成我路上的绊脚石,千方百计的想要绕过去,但事与愿违怎么也绕不过去,因为运行不了…

HiveSQL中last_value函数的应用

一、背景 在以下数据中如何实现对每一个列按照更新时间取最新的非null值? 1 a a null 202301 202301 1 b b null null 202302 1 null c null null 202303 1 d null null null 202304如何实现…

速学数据结构 | (超级干货)业界程序员公认的实现栈最简单的方法!太简单了

🎬 鸽芷咕:个人主页 🔥个人专栏:《Linux深造日志》《C干货基地》 ⛺️生活的理想,就是为了理想的生活! 📋 前言 🌈hello! 各位铁铁们大家好啊,今天来给大家更新一下栈这个数据结构,…

【六、http】go的http的客户端重定向

一、http的重定向 重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻…

3.4_Linux-浏览文件系统

1.Linux 文件系统 如果你刚接触Linux系统,可能就很难弄清楚Linux如何引用文件和目录,对已经习惯Microsoft Windows操作系统方式的人来说更是如此。在继续探索Linux系统之前,先了解一下它的布局是有好处的。 你将注意到的第一个不同点是&…

高级 Python:函数

伊利亚拉扎列维奇 一、说明 读完标题后,你可能会问自己一些类似的事情,“Python 中的函数是一个高级概念?如何?所有课程都引入了功能作为语言的基本块。你既是对的,也是错的。 大多数关于 Python 的课程都将函数作为基…

3.21每日一题(区间在现求定积分)

当发现一个定积分,原函数根本找不出来时,可以用变量代换:区间再现!!!

nodejs+vue高校食堂物流管理系统-毕业设计

1.本课题的研发内容是:研制开发一个基于 的高校食堂物流管理系统,使用B/S架构,使用MVC模式开发,实现对高校食堂物流各流程的统一管理。 2.课题的研发要求:实现一个基于 的高校食堂物流管理系统的基本功能和主要流程&am…

【STL】:list的模拟实现

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关list的模拟实现,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据…

【报错-已解决】Resource tagsets not found.

最近在接触nltk,已经在电脑里download nltk.data了,但程序还是报错Resource tagsets not found. 在电脑里查找tagset,发现tagset文件没有解压。 对tagset压缩包进行解压,并确认解压后的文件夹文件路径没有重复(tagsets)&#xf…

深入了解 CPU 的型号、代际架构与微架构

大家好,我是飞哥! 在 10 月 16 号的时候,Intel 正式发布了第 14 代的酷睿处理器。但还有很多同学看不懂这种发布会上发布的各种 CPU 参数。借着这个时机,我给大家深入地讲讲 CPU 的型号规则、代际架构与微架构方面的知识。 CPU 在…

redis教程 一 redis中的常用命令

文章目录 redis常见命令Redis数据结构介绍redis通用命令String类型String的常见命令Key结构 Hash类型List类型Set类型SortedSet类型 redis常见命令 Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样&…

IIS中间件漏洞----DotNetScan 工具

用DotNetScan 工具把目标网站IP,端口填写下。找到IIS的网站后就可进行操作上传。 也可以使用IISPutScanner工具 上传文件 利用解析漏洞 利用漏洞的前提条件:网站根目录可写入

教培行业的创新:微信CRM系统带来高效管理

在当今快速发展的科技环境下,教育培训行业面临着越来越多的挑战和机遇。如何提高管理效率、扩大市场份额、提升客户满意度,成为了教培行业亟待解决的问题。而微信CRM系统的出现,为教培行业带来了创新性的解决方案。 一些教育培训行业存在的问…

布雷斯悖论和借贷式拥塞控制

先看布雷斯悖论,新增一条路不但没减少交通延滞,反而降低了服务水准,下面一个简单的例子: 关于布雷斯悖论的讨论已经太多,我给出个新解释,这和我引出 借贷式拥塞控制 (差论证和编码)有关。 看一个不严谨但更…

在SpringBoot 中集成Swagger

前提&#xff1a;我的SpringBoot 项目的版本是 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18-SNAPSHOT</version><relativePath /> <!-- l…

使用Bazel构建高效的Android应用程序

使用Bazel构建高效的Android应用程序 1. 引言 在现代软件开发中&#xff0c;构建工具是至关重要的一环。Bazel是一个开源的构建工具&#xff0c;由Google开发并用于其内部项目多年。它旨在提供高效、可扩展和可靠的构建解决方案。Bazel最初专注于构建大规模软件项目&#xff…

约数之和 (普通快速幂求逆元做法)

假设现在有两个自然数 A 和 B&#xff0c;S 是 AB 的所有约数之和。 请你求出 Smod9901 的值是多少。 输入格式 在一行中输入用空格隔开的两个整数 A 和 B 。 输出格式 输出一个整数&#xff0c;代表 Smod9901 的值。 数据范围 0≤A,B≤5107 输入样例&#xff1a; …