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

持续进化,快速转录,Faster-Whisper对视频进行双语字幕转录实践(Python3.10)的更多相关文章

  1. .NET:持续进化的统一开发平台

    阅读文本大概需要 8 分钟. 标题使用的是进化这个词语,是因为 .NET 在不断的努力,也在不断的重构. 这篇文章的更多目的和意义在于科普,俗称"传教". # 持续进化的 .NET ...

  2. Golang在视频直播平台的高性能实践

    http://toutiao.com/i6256894054273909249/ 熊猫 TV 是一家视频直播平台,先介绍下我们系统运行的环境,下面这 6 大服务只是我们几十个服务中的一部分,由于并发量 ...

  3. Android视频应用去广告学习实践

    注意:本文仅仅供学习研究用途 第一步 素材搜集 腾讯视频应用:http://download.csdn.net/detail/itleaks/7991795      反汇编工具:           ...

  4. 闻其声而知雅意,基于Pytorch(mps/cpu/cuda)的人工智能AI本地语音识别库Whisper(Python3.10)

    前文回溯,之前一篇:含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入),利用AI技术将文本合成语音,现在反过来,利用开源库Whisper再将语音转 ...

  5. linqPad快速学习LINQ(含视频)

    在这里我向大家推荐的一个具是LinqPad有了这个工具并熟练使用就可以很快学习并掌握linq 安装步骤: 使用LINQPad可以很方便的调试linq以及lambda表达式.其中自带了linq以及F#简 ...

  6. CI Weekly #21 | iOS 持续集成快速入门指南

    搭建 iOS 持续集成环境要多久?每个 iOSer 都有不同的答案.这次我们整理了 flow.ci 的 iOS 持续集成的相关文档和最佳实践,希望帮你更快地完成构建.更新文档见: flow.ci iO ...

  7. [web建站] 优课急送《零基础快速学习建站》视频+课件【价值399元】

    [课程介绍]你想快速建一个网站出来吗?你想从什么都不懂到一两天出一个漂漂亮亮的站吗?你想完成领导交给你的任务找人建站吗?你想自己建站来创业吗?你想学会建站之后,利用给别人建站来赚钱吗?你想建一个跟某个 ...

  8. Jenkins+MSbuild+SVN实现dotnet持续集成 快速搭建持续集成环境

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面开始搭建dotnet持续集成环境 一.准备工作 1.系统管理-->管理插件-->可选插件中找到MS ...

  9. Android音视频点/直播模块开发实践总结-zz

    随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及 ...

  10. 快速web开发中的前后端框架选型最佳实践

    这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...

随机推荐

  1. Mybatis(配置解析解读(核心))

    核心配置文件 mybaits-confing.xml *properties(属性) *settring(设置) *typeAliases(类型别名) *typeHandlers(类型处理器) *ob ...

  2. Linux实现双击自动安装deb文件

    在Linux中,有几个常用的软件可以实现双击自动安装.deb文件的功能.以下是一些推荐的软件: 1. GDebi:GDebi是一个轻量级的图形化工具,专门用于安装.deb文件.它可以解决依赖关系,并提 ...

  3. shell 编程变量使用心得

    类型 示例 用途 大写的变量名 IP 表示常量,比如,用来记录输入和输出文件名 小写变量名 mac 一般变量 左边下划线 _mac 临时的中间变量,只引用一次的变量 右边下划线 tmpfile_ 临时 ...

  4. 【go语言】2.1.1 变量,常量和数据类型

    Go 语言中,变量是存储数据的基本单位,常量则是固定不变的数据.每个变量和常量都有其对应的数据类型. 变量 在 Go 语言中,你可以使用 var 关键字来声明一个变量: var name string ...

  5. Redis 主从同步原理

    一.什么是主从同步? 主从同步,就是将数据冗余备份,主库(Master)将自己库中的数据,同步给从库(Slave). 从库可以一个,也可以多个,如图所示: 二.为什么需要主从同步? Redis 虽然有 ...

  6. Django reset framework: 序列化

    序列化与反序列化 将模型转换为json 称之为 序列化 将json转换为模型 称之为 反序列化 何时进行序列化与反序列化 序列化:当后端将数据库中信息取出返回给前端时,要进行序列化操作 反序列化:当需 ...

  7. (转)[Android测试] Android Studio+Appium+Java+Windows 自动化测试之二:Appium环境安装搭建

    一.需要下载安装的东西 1. 文件下载 网上也有挺多安装教程的,这里我提供我的安装方法.Win10 64位.一些文件我在后面打包. 2016.9.12号本人安装记录. SDK: 由于我是搞Androi ...

  8. [db2]缓冲池管理

    简介 缓冲池指的是从硬盘读取表和索引数据时,数据库管理器分配的用于高速缓存这些表和索引数据的内存区域.每个数据库都必须具有至少一个缓冲池,创建数据库时会自动创建一个名为IBMDEFAULTBP的缓冲池 ...

  9. 当小白遇到FullGC

    起初没有人在意这场GC,直到它影响到了每一天! 前言 本文记录了一次排查FullGC导致的TP99过高过程,介绍了一些排查时思路,线索以及工具的使用,希望能够帮助一些新手在排查问题没有很好的思路时,提 ...

  10. Django项目缓存优化

    一.为什么要使用缓存 大家可以想一下Django的请求响应流程: → 用户浏览器输入URL地址 → Web服务器将HTTP请求转发给uWSGI服务器 → uWSGI服务器将Request请求转发给Dj ...