用 whisper 时发现识别的时间戳不准,用 whisperx 识别的字幕又太长,设置切段后发现效果更差,尝试用语言理解模型按句意切段后匹配字符级时间戳,结果发现时间戳根本不准,麻了
只能靠自己来解决问题了,先说一下代码的逻辑:
1 、用 ffmpeg 提取视频中的音频,切成 20 分钟的段,用 UVR5 分离人声,再拼成完整音频。
2 、对音频进行 VAD 识别,标出有人声活动的部分,得到 VAD 时间戳,这也是最终字幕的时间戳。
3 、按照 VAD 结果切段音频,每 30 分钟一组,每组内的音频用 2 秒的静音段隔开,得到新的音频段。并按照上述逻辑计算出一组新的时间戳。
4 、将合成后的新音频送入 whisper 识别,得到带时间戳的识别结果,用计算后的时间戳和识别结果进行匹配,得到字幕。
5 、匹配后的结果时间戳是错误的,按照对应关系把字幕同步到 VAD 时间戳,得到最终的字幕结果。
6 、分批把字幕喂给 Gemini 进行翻译,每次喂 100 行熟悉上下文,之后分 10 次获取翻译。
目前最大的问题是 whisper 识别容易出错,不知道如何设置 hotwords 和 prompt ,翻译逻辑也有问题,识别结果包含很多单独成行的语气词,每次翻译 100 行无法提供足够的上下文,应该考虑用滑动窗口或者过滤掉字符量小的行。
代码在 github.com/4evergr8/ASMRASR ,欢迎大家批评指正,谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.