Whisper+剪映制作精听材料

继续发Whisper的研究报告。这次推荐的是whisper-webui+whisper-timestamped的方案。
whisper-timestamped前面说过,直接推理来校准whisper生成的字幕,不需要另外的wav2vec,但是其解决不了whisper固有的hallucination的问题。由于large-v3的hallucination特别严重,所以基本上只能用large-v2。
whisper-webui的重点不在于webui,而是它是利用vad先对音频按30s进行切割,然后对切割后的片段各自用whisper处理后再合并字幕(是不是发现跟Whisperx很像),基本上将hallucination问题消除了一大半,即使偶尔碰到,也不会带到下一个30s去,不会出现whisper那种一大片重复一句话的严重问题。但是由于没有校准,所以whisper那种每句字幕的时间轴都有点偏差的问题依旧。
于是想着将两者结合,试了一下是可行的,具体做法就是改whisper-webui的代码(主要是src/whisper/whisperContainer.py,让它本来调用whisper改成调用whisper-timestamped。不过水平有限,改出来的小问题还是挺多的,代码就不放了,希望有高手能将两个项目合并。
两者结合之后,大幅减少了hallucination的出现,也能用large-v3了,总体结果能与Whisperx打得有来有回。(说起来Whisperx真是强,尽管已经停止开发,但是目前就是没有对手。唯一的按句子合并导致一大坨的问题,通过spacy也基本解决,是目前最佳方案了)
whisper-webui+whisper-timestamped作为备用方案也算是相当不错,尤其是对于小语种特别友好。不过由于whisper-timestamped没法用fast whisper,所以速度是相当的慢(慢5~6x)。

1 Like

whisper-timestamped速度慢的问题可以用distil-large-v3或large-v3-turbo模型来部分解决,distil-large-v3大概快6x,large-v3-turbo似乎更快点,不过差别不太大。准确率上好像是distil-large-v3更好,两者与large-v3相比都差不太多,不过distil-large-v3只有英语。

关于Whisper有时会没有标点没有首字母大写的问题,这个帖子有讨论

其中有人建议加提示词

–initial_prompt “Please do not forget the punctuations!”

试了试对于缺少标点的情况有用,但是对于一大坨没有断句的就没用。
又找到这个x.com
试了试有用,手头一个一大坨的就拆分得很干净了。
于是似乎是提示词写得越详细越有用。
目前打算抄这个

–initial_prompt “Whisper, as you transcribe speech into text, please ensure to include punctuation marks as accurately as possible. Additionally, when creating the timeline for the subtitles, try to split at the punctuation marks to ensure that sentences are not divided across different time segments. The goal is to have each sentence contained within a single time segment for clarity and coherence.”

不过应该只是缓解,不能完美解决。

喷了,我又试了一下,发现只要加prompt,就会大幅增加hallucination和丢句子的概率,而且prompt越长,出问题的概率越大。于是只有碰到大坨没断句的情况下才建议使用prompt。

一夜之间天翻地覆,NVIDIA搞出来的parakeet-tdt-0.6b-v2效果惊人,虽然好像目前只支持英语,但是准确率超过whisper large v3,时间轴更是甩whisper几条街,应该说时间轴根本就没有问题。

4 Likes

赞!!!在线体验:Parakeet-TDT-0.6b-V2 - a Hugging Face Space by nvidia

Key Features:

  • Automatic punctuation and capitalization
  • Accurate word-level timestamps (click on a segment in the table below to play it!)
  • Efficiently transcribes long audio segments (updated to support upto 3 hours) (For even longer audios, see this script)
  • Robust performance on spoken numbers, and song lyrics transcription

有相关的简易教程或指引吗?

没。目前就在线体验了一下,让AI写个脚本把csv转成srt。
csv2srt.py (2.0 KB)

win下安装nemo非常麻烦,各种报错装不上依赖,回头用WSL2的Linux试试。

1 Like

我写了个脚本用LLM来断句,做了一些测试分享一下。
我起先觉得这事情LLM来做应该是轻而易举,甚至小模型也能搞定,但实际测试了一下远远低估了它的难度,因为这事看起来简单但需要LLM具有非常高的指令遵循度,而这恰恰是LLM不具备的。
由于低估了它的难度,我定的指标可能过高,我按照Netflix的标准,甚至提示词都是抄的Netflix的说明,严格规定了每行不超过42个字符,还有一大堆哪里该断哪里不该断。测试结果是,小参数模型基本上搞不定。但是即便是小参数模型的效果,也远超SpaCy这样的预训练的工具。
我测试了一圈的结论是Gemini 2.5Pro的效果最佳,几乎完美遵循指令,但是缺点是又慢又贵。
由于Gemini Pro的经历我放弃了所有推理型,因为太慢。
GPT 4.1 和deepseek是不怎么理会42字符限制,断句的位置倒是没啥问题。
其他像是Gemini 2.5 flash、GPT 4.1mini都不太行。
Claude实在太贵连测都懒得测。
国产的像是豆包啥的根本不理你直接输出没断句的结果。
最终我还是选择了deepseek v3,速度快,便宜,还有大量的免费额度可以用。
你可以试试。

不同资源利用ai生成高质量的同声字幕。
上手门槛不低,希望未来有傻瓜式的便利的方法享受

视频生成字幕
音频生成字幕
在线视频生成字幕
文字生成同声字幕
剪贴板文字生成同声字幕
本地书本生成同声字幕
软件集成在线书库,书本直接生成同声字幕

我也试过各种大模型,根本不可靠,还是得结合人工。
我的解决方案特别简单粗暴,但感觉效率和效果都还能接受:

情形一(没有原始字幕):

  1. 先 whipserx 对多个视频、音频批量识别(带标点符号和自动断句),输出 abc.json abc.srt abc.txt
  2. 直接编辑 .txt 文本,先使用一些工具(如txt-resegment-by-rules.vim,写一堆常见断句的正则表达式),再人工断句,其实挺快的。
  3. 使用mpv/srt-resegment.lua,按照断句后的.txt 及 原始带word-level时间轴的.json,重新输出新的 abc.srt

情形二(有字幕来源):

  1. 直接下载,如youtube等网络来源的视频、电影等
  2. 使用mpv/srt-to-word-level-json.lua,通过srt字幕生成word level的 .json,虽然不够精确,但基本满足需求,若误差太大,那么就采用情形一的方案。
  3. 使用 subtitle-edit 将 srt 导出为.txt
  4. 直接编辑 .txt 文本,先使用一些工具(如txt-resegment-by-rules.vim,写一堆常见断句的正则表达式),再人工断句,其实挺快的。
  5. 使用mpv/srt-resegment.lua,按照断句后的.txt 及 原始带word-level时间轴的.json,重新输出新的 abc.srt

若需要双语,甚至是拼合的单一文件

  1. 使用 subtitle-edit,调用各种引擎自动翻译,并输出srt
  2. 使用 mpv/dualsubs-init.lua dualsubs-reload.lua dualsubs-swap.lua dualsubs-creat.lua 拼合双语为单个文件.ass
  3. 对于常见的翻译不满意的词汇,就调用 FixTranslation.vim 批量替换

若有需要,可以添加字幕到视频

  • 使用ffmpeg,直接添加、删除相关字幕。相关命令,直接找大模型。

然后就可以用电视+zidoo Z30 PRO 完美观看高清双语视频了。

上述提到的所有工具都是开源且免费的,其中很多小工具,你们没听说过的,就基本是我自己写的。

没必要这么麻烦,让AI写个脚本,调用LLM断句就行了。结果我已经写了,Gemini 2.5 pro可以非常完美地遵循指令,缺点是慢而贵;GPT4.1或deepseek除了不怎么理会42字符的限制,经常50、60以外,断句的位置毫无问题非常舒服;Claude我没测,按理说Claude是指令遵循度最好的,搞定这个毫无问题,只是价钱实在太贵。都AI时代了,这种事情用上人工不太值得。
至于传统的正则或者加上语料模型,我之前贴的SpaCy脚本已经做到了极致,效果就那么回事。

我之前使用大模型断句出现的最大问题,不是它断句的合理性,而是:大模型经常添删改原始文字,这个很要命,因为后续就没办发使用这个结果用于时间轴对应了。

这个问题不大,我没碰到过LLM随意改动的情况,不放心的话可以在提示词里限定。

没太记住你的源码地址,能不能发一下,学习一下。

对于字幕制作推荐:
WEIFENG2333/VideoCaptioner: :clapper_board: 卡卡字幕助手 | VideoCaptioner - 基于 LLM 的智能字幕助手 - 视频字幕生成、断句、校正、字幕翻译全流程处理!- A powered tool for easy and efficient video subtitling.

如果是英文推荐用以下项目生成字幕然后再做后序处理:
NINIYOYYO/parakeet-tdt-0.6b-v2-SRT-GUI: Parakeet-TDT-0.6B-V2-SRT-GUI - 自动生成视频/音频字幕工具 | Video/Audio Subtitle Generation Tool :small_blue_diamond: 支持从视频 (MP4, MKV, AVI) 和音频 (MP3, WAV, FLAC) 自动生成 SRT 字幕 :small_blue_diamond: 基于 NVIDIA NeMo Parakeet TDT 0.6B V2 :small_blue_diamond: Gradio 用户界面 :small_blue_diamond: GPU 加速和本地模型加载 | ASR-powered, user-friendly GUI with Gradio, supports GPU