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

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

这篇关于持续进化,快速转录,Faster-Whisper对视频进行双语字幕转录实践(Python3.10)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/343003

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi