持续进化,快速转录,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盘中的爱情片还没有中文字幕时,您当然知道现在该做些什么了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tmux工具

B站学习地址:tmux教程

vue封装独立组件:实现手写签名功能

目录 第一章 效果展示 第二章 准备工作 2.1 使用的工具vue-sign 2.1.1 安装 2.1.2 了解 2.1.3 参数说明 第三章 源代码 第一章 效果展示 第二章 准备工作 2.1 使用的工具vue-esign 2.1.1 安装 npm install vue-esign --save 2.1.2 了解 兼容pc端和移动端有对应的参…

Redis的四种部署方案

这篇文章介绍Reids最为常见的四种部署模式,其实Reids和数据库的集群模式差不多,可以分为 Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署,其他的部署方式基本都是围绕以下几种方式在进行调整到适应的生产环境…

@RunWith(SpringRunner.class)注解的作用

通俗点: RunWith(SpringRunner.class)的作用表明Test测试类要使用注入的类,比如Autowired注入的类,有了RunWith(SpringRunner.class)这些类才能实例化到spring容器中,自动注入才能生效 官方点: RunWith 注解是JUnit测…

构建mono-repo风格的脚手架库

前段时间阅读了 https://juejin.cn/post/7260144602471776311#heading-25 这篇文章;本文做一个梳理和笔记; 主要聚焦的知识点如下: 如何搭建脚手架工程如何开发调试如何处理命令行参数如何实现用户交互如何拷贝文件夹或文件如何动态生成文件…

Android工具栏ToolBar

主流APP除了底部有一排标签栏外,通常顶部还有一排导航栏。在Android5.0之前,这个顶部导航栏以ActionBar控件的形式出现,但AcionBar存在不灵活、难以扩展等毛病,所以Android5.0之后推出了ToolBar工具栏控件,意在取代Aci…

Python 获取cpu、内存利用率

获取cpu、内存利用率 # -*- coding: latin1 -*- import psutil cpuPercent 0 psutil.cpu_percent() while True:vm psutil.virtual_memory()memoryPercent vm.percentcpuPercent psutil.cpu_percent(1) *10print("cpuPercent:"str(cpuPercent)" %")prin…

TiDB 7.4 发版:正式兼容 MySQL 8.0

MySQL 是全球最受欢迎的开源数据库,长期位于 DB-Engines Ranking 排行榜第二名,在世界范围内拥有数量庞大的企业用户和开发者。然而,随着时间的推移,MySQL 用户正面临新挑战。Oracle 官宣将在 2023 年 10 月终止 MySQL 5.7 版本的…

【小白福音】手把手教学搭建Vue+SpringBoot开发环境完整教程

前言:在很多新手小白在准备开发一个属于自己的前后端分离项目的时候需要准备一些例如Java环境配置、Node.Js配置、Maven配置以及软件安装等等,于本次博主亲自录制了一套完整的安装配置教程,提供到最后给大家进行下载。 注:本教程仅适用于小白,每一节课都是博主原创录制的,…

学 Java 怎么进外企?

作者:**苍何,CSDN 2023 年 实力新星,前大厂高级 Java 工程师,阿里云专家博主,土木转码,现任部门技术 leader,专注于互联网技术分享,职场经验分享。 🔥热门文章推荐&#…

《黑客帝国:破解编程密码》——探索编程世界的奥秘

文章目录 前言黑客帝国代码雨UbuntuLinux世界的奥秘如何在Ubuntu中查看系统信息科普推荐书籍后记 前言 在电影《黑客帝国》问世后,它不仅带来了震撼视觉体验,更在技术和编程领域产生了深远的影响。这部电影,让人们对计算机和编程的认识进一步…

0-1矩阵列互斥问题——回溯法 Python实现

三、 0-1 矩阵的列集互斥问题。给定一个 m n m \times n mn 的 0-1 矩阵 A \mathrm{A} A 。定义列互斥为: 对于矩阵 A A A 中的任意两列 i i i 和 j j j, 如果在对应的每一行上, i i i 和 j j j 不存在同时为 1 的情况, 则称列 i \mathrm{i} i 和 j \mathrm{j} j 互斥…

[动态规划] (四) LeetCode 91.解码方法

[动态规划] (四) LeetCode 91.解码方法 91. 解码方法 题目解析 (1) 对字母A - Z进行编码1-26 (2)11106可以解码为1-1-10-6或者11-10-6, 但是11-1-06不能解码 (3) 0n不能解码 (4) 字符串非空,返回解码方法的总数 解题思路 状态表示 dp[i]:以i为结…

Echats-自定义图表1

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh-cmn-Hans"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>…

手机知识:手机“飞行模式”你真的会用吗,看完你就懂了

目录 “飞行模式”的实用技能 关于手机的谣言 回想一下&#xff0c;当你第一次知道手机上的“飞行模式”时&#xff0c;你认为这是一个怎样的功能&#xff1f; 普通青年&#xff1a;在飞机上要使用的模式。 文艺青年&#xff1a;手机终日忙忙碌碌&#xff0c;偶尔也需要放飞…

Java入门篇 之 逻辑控制(练习题篇)

博主碎碎念: 练习题是需要大家自己打的请在自己尝试后再看答案哦&#xff1b; 个人认为&#xff0c;只要自己努力在将来的某一天一定会看到回报&#xff0c;在看这篇博客的你&#xff0c;不就是在努力吗&#xff0c;所以啊&#xff0c;不要放弃&#xff0c;路上必定坎坷&#x…

宏观角度认识递归之汉诺塔问题

宏观角度认识递归 听到递归&#xff0c;不少人都会对此充满些迷惑&#xff0c;今天我们就从不同的角度来认识递归&#xff0c;消除恐惧。 递归&#xff0c;简单来说&#xff0c;就是函数自己调用自己的情况&#xff0c;也就是在一个主问题中&#xff0c;我们会引申出一个相同的…

STM32-电源管理(实现低功耗)

电源管理 STM32 HAL库对电源管理提供了完善的函数和命令。 工作模式&#xff08;高功耗->低功耗&#xff09;&#xff1a;运行、睡眠、停止、待机。 若备份域电源正常供电&#xff0c;备份域内的RTC都可以正常运行&#xff0c;备份域内的寄存器的数据会被保存&#xff0c;不…

家用洗地机哪个牌子质量最好?家用洗地机推荐

洗地机也就是集吸尘器&#xff0c;拖地&#xff0c;洗地&#xff0c;功能于一体的家电&#xff0c;无论干湿垃圾都能清理的干干净净&#xff0c;而且还不用弯腰&#xff0c;有的只用换个头&#xff0c;就从拖地变成了吸尘器和除螨仪简直就是清洁家里卫生的打扫神器啦!那么面对市…

Spring-Spring 之底层架构核心概念解析

BeanDefinition BeanDefinition表示Bean定义&#xff0c;BeanDefinition中存在很多属性用来描述一个Bean的特点。比如&#xff1a; class&#xff0c;表示Bean类型scope&#xff0c;表示Bean作用域&#xff0c;单例或原型等lazyInit&#xff1a;表示Bean是否是懒加载initMeth…