怎么样让电脑读字幕快一些(持续进化,快速转录,Faster-Whisper对视频进行双语字幕转录)
Faster-Whisper是Whisper开源后的第三方进化版本,它对原始的Whisper模型结构进行了改进和优化。这包括减少模型的层数、减少参数量、简化模型结构等,从而减少了计算量和内存消耗,提高了推理速度,与此同时,Faster-Whisper也改进了推理算法、优化计算过程、减少冗余计算等,用以提高模型的运行效率。
本次我们利用Faster-Whisper对日语视频进行双语(日语/国语)转录实践,看看效率如何。
构建Faster-Whisper转录环境
首先确保本地已经安装好Python3.10版本以上的开发环境,随后克隆项目:
gitclonehttps://github.com/ycyy/faster-whisper-webui.git
进入项目的目录:
cdfaster-whisper-webui
安装项目依赖:
pip3install-rrequirements.txt
这里需要注意的是,除了基础依赖,还得再装一下faster-whisper依赖:
pip3install-rrequirements-fasterWhisper.txt
如此,转录速度会更快。
模型的下载和配置
首先在项目的目录建立模型文件夹:
mkdirModels
faster-whisper项目内部已经整合了VAD算法,VAD是一种音频活动检测的算法,它可以准确的把音频中的每一句话分离开来,并且让whisper更精准的定位语音开始和结束的位置。
所有首先需要配置VAD模型:
gitclonehttps://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/
项目根目录运行命令:
pythoncli.py--modellarge-v2--vadsilero-vad--languageJapanese--output_dird:/whisper_modeld:/Downloads/test.mp4
这里--model指定large-v2模型,--vad算法使用silero-vad,--language语言指定日语,输出目录为d:/whisper_model,转录视频是d:/Downloads/test.mp4。
程序输出:
D:\work\faster-whisper-webui>pythoncli.py--modellarge-v2--vadsilero-vad--languageJapanese--output_dird:/whisper_modeld:/Downloads/test.mp4Usingfaster-whisperforWhisper[Autoparallel]UsingGPUdevices['0']and8CPUcoresforVAD/transcription.Creatingwhispercontainerforfaster-whisperUsingparalleldevices:['0']CreatedSileriomodelParallelVAD:Executingchunkfrom0to74.071224onCPUdevice0LoadedSileriomodelfromcache.Gettingtimestampsfromaudiofile:d:/Downloads/test.mp4,start:0,duration:74.071224ProcessingVADinchunkfrom00:00.000to01:14.071C:\Users\zcxey\AppData\Roaming\Python\Python310\site-packages\torch\nn\modules\module.py:1501:UserWarning:operator()profile_node%669:int[]=prim::profile_ivalue(%667)doesnothaveprofileinformation(Triggeredinternallyat..\third_party\nvfuser\csrc\graph_fuser.cpp:108.)returnforward_call(*args,**kwargs)VADprocessingtook2.474104000022635secondsTranscribingnon-speech:[{'end':75.071224,'start':0.0}]ParallelVADprocessingtook8.857761900057085secondsDevice0(index0)has1segmentsUsingdevice0(get_merged_timestamps)Usingoverridetimestampsofsize1Processingtimestamps:[{'end':75.071224,'start':0.0}]Runningwhisperfrom00:00.000to01:15.071,duration:75.071224expanded:0prompt:Nonelanguage:NoneLoadingfasterwhispermodellarge-v2fordeviceNoneWARNING:fp16optionisignoredbyfaster-whisper-usecompute_typeinstead.[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]壮烈Whispertook22.232674299972132secondsParalleltranscriptiontook31.472856600070372secondsMaxlinewidth80ClosingparallelcontextsClosingpoolof1processesClosingpoolof8processes
可以看到,1分14秒的视频,vad用了8秒,whisper用了22秒,转录一共用了31秒。
注意,这里只是用了whisper原版的算法,现在我们添加--whisper_implementationfaster-whisper参数来使用faster-whisper改进后的算法:
pythoncli.py--whisper_implementationfaster-whisper--modellarge-v2--vadsilero-vad--languageJapanese--output_dird:/whisper_modeld:/Downloads/test.mp4
程序返回:
Runningwhisperfrom00:00.000to01:15.071,duration:75.071224expanded:0prompt:Nonelanguage:NoneLoadingfasterwhispermodellarge-v2fordeviceNoneWARNING:fp16optionisignoredbyfaster-whisper-usecompute_typeinstead.[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]壮烈Whispertook10.779123099986464secondsParalleltranscriptiontook11.567014200030826seconds
大模型只用了10秒,这效率,绝了。
中文字幕
在以往的Whisper模型中,如果我们需要中文字幕,需要通过参数--tasktranslate翻译成英文,然后再通过第三方的翻译接口将英文翻译成中文,再手动匹配字幕效果,比较麻烦。
现在,我们只需要将语言直接设置为中文即可,程序会进行自动翻译:
pythoncli.py--whisper_implementationfaster-whisper--modellarge-v2--vadsilero-vad--languageChinese--output_dird:/whisper_modeld:/Downloads/test.mp4
这里的--language参数改为Chinese。
程序返回:
Runningwhisperfrom00:00.000to01:15.071,duration:75.071224expanded:0prompt:Nonelanguage:NoneLoadingfasterwhispermodellarge-v2fordeviceNoneWARNING:fp16optionisignoredbyfaster-whisper-usecompute_typeinstead.[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]消滅Whispertook18.85215839999728seconds
字幕就已经是中文了,注意转录+翻译一共花了18秒,时间成本比直接转录要高。
双语字幕效果:
结语
由于Faster-Whisper的速度更快,它可以扩展到更多的应用领域,包括实时场景和大规模的数据处理任务。这使得Faster-Whisper在语音识别、自然语言处理、机器翻译、智能对话等领域中具有更广泛的应用潜力,当然了,更重要的是,当您的电脑里D盘中的爱情片还没有中文字幕时,您当然知道现在该做些什么了。