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

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.mzph.cn/news/131452.shtml

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

相关文章

【LeetCode】第 370 场周赛

100115. 找到冠军 I 一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。 给你一个下标从 0 开始、大小为 n * n 的二维布尔矩阵 grid 。对于满足 0 < i, j < n - 1 且 i ! j 的所有 i, j &#xff1a;如果 grid[i][j] 1&#xff0c;那么 i 队比 j 队 强 &…

带斜杠的能读出来,不带斜杠的读不出来,为什么?

能读出来。 读不出来&#xff0c;为什么呢&#xff1f;

数据处理中的中心化

数据处理中的中心化&#xff0c;就是将原数据减去平均值&#xff0c;得到新的数据&#xff0c;新的数据的平均值为0。 假设原数据是x&#xff08;x可以是多维的&#xff09;&#xff0c;其平均值是&#xff0c;新的数据&#xff0c;那么新数据的平均值是为0的。下面证明下&…

计算机报错找不到msvcp110.dll无法继续执行代码怎么解决?

msvcp110.dll文件丢失是一个相当常见的问题&#xff0c;尤其是在运行某些程序或游戏时。这个问题可能会导致程序无法正常运行&#xff0c;甚至可能导致系统崩溃。那么&#xff0c;面对这样的问题&#xff0c;我们应该如何来解决呢&#xff1f;下面&#xff0c;我将分享我解决问…

【C/C++】C++中重载、重写和隐藏的区别

重载 函数重载满足条件&#xff1a; 同一个作用域下函数名称相同函数参数类型不同 或者 个数不同 或者 顺序不同 注意: 函数的返回值不可以作为函数重载的条件。 #include<bits/stdc.h>using namespace std;class A {void fun() {};void fun(int i) {};void fun(int …

Qt OpenGL相机系统

文章目录 一、简介二、实现代码三、实现效果参考资料效果展示 一、简介 一直偷懒没有学习OpenGL,乘着这段有点时间重新学习一下OpenGL,做一个简单的小工具,有助于后面理解OSG。我们都知道OpenGL中存在着下面几个坐标空间:模型空间(物体空间)、世界空间、观察空间(或者称…

基于单片机的智能拐杖软件设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、整体设计方案2.1本设计设计原理2.1.1单片机基本介绍 二、本设计方案选择三、软件设计AD原理图&#xff1a;原理图…

阿里云多款ECS产品全面升级 性能最多提升40%

“阿里云始终围绕‘稳定、安全、性能、成本、弹性’的目标不断创新&#xff0c;为客户创造业务价值。”10月31日&#xff0c;杭州云栖大会上&#xff0c;阿里云弹性计算计算产品线负责人张献涛表示&#xff0c;通过持续的产品和技术创新&#xff0c;阿里云发布了HPC优化实例等多…

基于Magma构建灵活、低成本无线接入网

传统蜂窝网络一般基于特定接入技术并针对大规模公共网络设计&#xff0c;无法灵活适配小规模网络以及异构无线技术。本文介绍了Magma在构建低成本异构无线接入方面的探索。原文: Building Flexible, Low-Cost Wireless Access Networks With Magma 摘要 当今仍然有数十亿人受限…

深度好文|听懂这些逻辑,你会越变越好。

哈喽&#xff0c;大家好&#xff0c;我是雷工。 最近看了一篇文章&#xff0c;噱头很大&#xff0c;说是手把手的教你&#xff0c;如何从一个普通人&#xff0c;成长为身价千万的中产。 这种话我肯定是不信的&#xff0c;要么标题党&#xff0c;要么割韭菜&#xff0c;千万的中…

Verilog HDL语言基础知识

目录 Verilog HDL语言基础知识 6.1.2 Verilog HDL模块的结构 6.1.3 逻辑功能定义 6.2.1 常量 6.3 运算符及表达式 6.4.2 条件语句 Verilog HDL语言基础知识 先来看两个Verilog HDL程序。 例6.1 一个8位全加器的 Verilog HDL源代码 module adder8(cout,sum,ina,…

企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?

企业服务总线ESB是什么 下面这张图&#xff0c;稍微了解些IT集成的朋友应该不陌生。 随着信息化发展不断深入&#xff0c;企业在不同的阶段引入了不同的应用、系统和软件。这些原始的应用系统互不连通&#xff0c;如同一根根独立的烟囱。 但是企业业务是流程化的&#xff0c;…

VulnHub jarbas

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

动态规划算法实现0-1背包问题Java语言实现

问题介绍&#xff1a; 动态规划算法&#xff1a; 动态规划&#xff08;Dynamic Programming&#xff09;是一种解决多阶段决策问题的优化算法。它通过将问题分解为一系列子问题&#xff0c;并利用子问题的解来构建更大规模问题的解&#xff0c;从而实现对整个问题的求解。 动态…

懒汉模式和饿汉模式

目录 单例模式 饿汉模式 懒汉模式 单例模式 所谓单例模式,就是在有些场景中,有些特定的类,只能创建一个实例(对象),当程序员不小心创建多个实例,就会出现编译报错. ★ 这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单个对象被创…

基于java+springboot+vue城市轨道交通线路查询系统-公交车线路查询

项目介绍 本系统是针对目前交通管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的市轨道交通线路查询系统存在的问题进行分析&#xff0c;完善用户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准确率…

go语言 | grpc原理介绍(二)

gRPC gRPC 是一个高性能、通用的开源 RPC 框架&#xff0c;其由 Google 2015 年主要面向移动应用开发并基于 HTTP/2 协议标准而设计&#xff0c;基于 ProtoBuf 序列化协议开发&#xff0c;且支持众多开发语言。 由于是开源框架&#xff0c;通信的双方可以进行二次开发&#x…

关于编程不得不说的事

这些年&#xff0c;互联网爆炸式的发展&#xff0c;促生了无数程序员&#xff0c;也促生了大量 IT培训机构。短短数年间&#xff0c;科班出生的程序员和培训机构出生的程序员呈指数增长。程序员的职业也不再是金饭碗。写了这么多代码&#xff0c;有些感触&#xff0c;所以写下来…

Python--快速入门二

Python--快速入门二 1.Python数据类型 1.可以通过索引获取字符串中特定位置的字符&#xff1a; a "Hello" print(a[3]) 2.len函数获取字符串的长度&#xff1a; a "Hello" print(a) print(len(a)) 3.空值类型表示完全没有值&#xff1a; 若不确定当…