muzuiget / dualsub-support

Dualsub - Dual Subtitles for YouTube
https://www.dualsub.xyz/
277 stars 23 forks source link

测试基于 OpenAI Whisper 的语音识别功能 #538

Closed muzuiget closed 11 months ago

muzuiget commented 1 year ago

现在 Dualsub 的服务器 api.dualsub.xyz 添加了语音识别功能,基于开源的 OpenAI Whisper 模型。

就以识别英语来说,YouTube 的“自动生成”字幕是没有标点符号的,所以机器翻译质量极差,一个优化手段是根据每个单词的停顿时间来断句,事实证明确实有效地提高了一点翻译质量,还让我开辟了一个盈利点,竟然真的有人愿意花钱来提高一点翻译质量。

然而这种优化手段还是有限,因为不是所有人说话都像纪录片旁白那么标准的。现在有了 Whisper,不再需要这种奇技淫巧了,因为 Whisper 能直接输出标点符号,可以直接用标点符号来断句,极大提升了机器翻译质量。

现在最新版的 Dualsub 2.8.2 可以使用 Whisper 识别出来的字幕,仅仅是多了一个字幕菜单条目。

Screenshot_20230814_184736

就跟 YouTube 的“自动生成”字幕一样,但是带有标点符号,字幕整句显示,和画面声音没有延迟,机器翻译也是联系上下文的。

原理是这样的:

举个例子,当打开一个 YouTube 视频:

  1. 播放进度是 00:00 时,马上让服务器识别出 00:00 --> 01:00 之间的字幕,大约需要几秒钟时间。
  2. 播放进度是 00:30 时,提前让服务器识别出 01:00 --> 02:00 之间的字幕,只要在播放时间到 01:00 之前完成即可。

就是一边播放一边识别,字幕也需要“缓冲”,如果缓冲的数据不够,就暂停播放等待一会。如果缓冲数据足够,暂停播放也不会继续识别更多数据了,以节省服务器资源。

粗重活都是在服务器里完成的,你的浏览器只是和服务器收发一些文本数据,不需要做任何密集计算,也不需要“录音“权限。

目前的限制

显示“YouTube (auto-generated)“菜单条目

从 Dualsub 2.8.4 开始,默认情况下只显示 Whisper 的菜单条目,如果你要同时显示 YouTube 的菜单条目,需要手动开启。

开启条件:

按 F12 弹出 DevTools,在 Console 里运行:

localStorage.setItem('dualsub-ytbasr', '1')

Screenshot_20230814_190055

注意:当你要使用中英双语字幕时,建议使用 Whipser 的结果作为原文字幕,即字幕要这样设置:

Screenshot_20230814_185128

而不是这样:

Screenshot_20230814_185134

这样设置的话,第一行的译文字幕的原文字幕是 YouTube 的识别结果,而第二行的字幕又是 Whisper 的识别结果,两行字幕译文和原文就对应不上了。因为 Whisper 的识别结果带标点能够改进翻译,但又没有用来翻译就浪费了。

所以我决定在 Dualsub 2.8.4 下,默认情况下先只显示 Whisper 菜单条目。

Dualsub 2.8.5 开始不会自动选择 Whisper 的菜单条目。

NingJay commented 1 year ago

至少在我看来目前并不稳定也并不好使,90%的情况是no speech image

m1a2sep commented 1 year ago

请问怎么才能关掉这个WHISPER的英语选项,因为一些没有声音的视频或是非英语视频他也会显示两行字,除非我把DUALSUB的字幕语言关闭,但是这样的话我看不同的视频就要不停地开了关关了开,就很麻烦也很影响观看,谢谢

muzuiget commented 1 year ago

@NingJay 能否告知出现 no speech 的视频地址?

muzuiget commented 1 year ago

@m1a2sep 现在只能这样,因为未有很好的办法提前得知一个视频的语言,只能总是显示这个菜单了。

一个方法是看 YouTube 的“自动生成”字幕的语言,但这又不是 100% 对的,比如这个视频,识别为越南语了。同时也有一些视频没有“自动生成”字幕。

实际上我也建议你先关闭,如果你真的不是想正经看一个视频。

m1a2sep commented 1 year ago

@m1a2sep 现在只能这样,因为未有很好的办法提前得知一个视频的语言,只能总是显示这个菜单了。

一个方法是看 YouTube 的“自动生成”字幕的语言,但这又不是 100% 对的,比如这个视频,识别为越南语了。同时也有一些视频没有“自动生成”字幕。

实际上我也建议你先关闭,如果你真的不是想正经看一个视频。

谢谢回复,就是我考虑DUALSUB有一个功能是只显示想要的语言代码的字幕,这个WHISPER的语言是否也是有一个语言代码来代表的,我可以不显示这个语言代码的字幕,不知道方案是否可行

NingJay commented 1 year ago

@NingJay 能否告知出现 no speech 的视频地址?

服务器似乎已经对策略进行调整,现在不会出现no speech了, 但偶尔出现http:500 或 fail to fetch现象 原视频地址是:https://www.youtube.com/watch?v=WJM5augMSxc

muzuiget commented 1 year ago

@NingJay 你这个地址现在我测试 也是正常识别的。

m1a2sep commented 1 year ago

现在 Dualsub 的服务器 api.dualsub.xyz 添加了语音识别功能,基于开源的 OpenAI Whisper 模型。

就以识别英语来说,YouTube 的“自动生成”字幕是没有标点符号的,所以机器翻译质量极差,一个优化手段是根据每个单词的停顿时间来断句,事实证明确实有效地提高了一点翻译质量,还让我开辟了一个盈利点,竟然真的有人愿意花钱来提高一点翻译质量。

然而这种优化手段还是有限,因为不是所有人说话都像纪录片旁白那么标准的。现在有了 Whisper,不再需要这种奇技淫巧了,因为 Whisper 能直接输出标点符号,可以直接用标点符号来断句,极大提升了机器翻译质量。

现在最新版的 Dualsub 2.8.2 可以使用 Whisper 识别出来的字幕,仅仅是多了一个字幕菜单条目。

Screenshot_20230814_184736

  • English (auto-generated) :使用 YouTube 自带的语音识别
  • English (auto-generated) + : 使用 Dualsub 自建的 Whsiper 的语音识别

就跟 YouTube 的“自动生成”字幕一样,但是带有标点符号,字幕整句显示,和画面声音没有延迟,机器翻译也是联系上下文的。

原理是这样的:

  • 远程下载:发送音频地址给服务器,让服务器去下载音频文件,而不是上传音频文件。
  • 按需识别:根据播放进度,每次只识别一小段音频,而不是整段音频。

举个例子,当打开一个 YouTube 视频:

  1. 播放进度是 00:00 时,马上让服务器识别出 00:00 --> 01:00 之间的字幕,大约需要几秒钟时间。
  2. 播放进度是 00:30 时,提前让服务器识别出 01:00 --> 02:00 之间的字幕,只要在播放时间到 01:00 之前完成即可。

就是一边播放一边识别,字幕也需要“缓冲”,如果缓冲的数据不够,就暂停播放等待一会。如果缓冲数据足够,暂停播放也不会继续识别更多数据了,以节省服务器资源。

粗重活都是在服务器里完成的,你的浏览器只是和服务器收发一些文本数据,不需要做任何密集计算,也不需要“录音“权限。

目前的限制

  • 仅支持识别英语
  • 仅支持 YouTube
  • 不支持某些 YouTube 视频,例如直播的,加密的、需要付费的。

设置参数

从 Dualsub 2.8.4 开始,默认情况下只显示 Whisper 的菜单条目,如果你要同时显示 YouTube 的菜单条目,需要手动开启。

按 F12 弹出 DevTools,在 Console 里运行:

localStorage.setItem('dualsub-ytbasr', '1')

Screenshot_20230814_190055

如果要禁用 Whipser 的菜单条目,则可以运行:

localStorage.setItem('dualsub-whisper', '0')

注意,如果你两个菜单条目都开启了,当你要使用中英双语字幕时,建议使用 Whipser 的结果作为原文字幕,即字幕要这样设置:

Screenshot_20230814_185128

而不是这样:

Screenshot_20230814_185134

这样设置的话,第一行的译文字幕的原文字幕是 YouTube 的识别结果,而第二行的字幕又是 Whisper 的识别结果,两行字幕译文和原文就对应不上了。因为 Whisper 的识别结果带标点能够改进翻译,但又没有用来翻译就浪费了。

所以我决定在 Dualsub 2.8.4 下,默认情况下先只显示 Whisper 菜单条目。

Dualsub 2.8.5 开始不会自动选择 Whisper 的菜单条目。

您好,想请教下,我现在同时开启了YouTube和whisper两种模式,我放到自动生成或是自动生成+模式并不会像以前的版本一样下次开新视频会记住我之前的选项,每次开新视频字幕都是空的要在dualsub那里重新选择字幕语言才行,请问是因为这两种自动生成冲突了还是?

muzuiget commented 1 year ago

没有冲突,新版本就是有意改成这样,目的是减少服务器请求。

因为不能假定某个视频是用什么语言,所以 English (auto-generated) + 这个菜单总是显示,总是会被自动选择。如果视频是个中文,就识别不出任何内容,用户不手动关闭,服务器就一直在做无用功。

原来的 YouTube是识别字幕 English (auto-generated) 都一样,因为大部分视频都会自动选择到这个菜单,打开一个新视频时,至少会发出一个翻译请求。但当用户在挑选视频时,也就是每个视频看几秒不感兴趣就跳到下一个视频了,但是服务器却翻译几分钟字幕,这些翻译好的字幕没有被用户看到,也就是浪费了。

所以一个视频值得用户认真重头看到尾,也就值得花几秒手动设置一下字幕。

现在只有“标准模式”是这样,我也考虑是不是在“简单模式”也改掉,因为 YouTube 也存在限流问题 #426,频繁打开新视频触发多余的请求,容易被限流,当用户想认真看某个视频时,反而加载不了字幕了,只能等一会。

marlowma commented 1 year ago

你好,在电脑端可以正常翻译,但是我用安卓手机的谷歌浏览器,当切换到whisper模式时,总是显示{no audio file},在youtube模式可以正常使用。 ![Uploading Screenshot_2023-08-19-16-28-32-006_com.kiwibrowser.browser.jpg…]()

muzuiget commented 1 year ago

我用 DevTools 的移动模式能重现,移动版的布局 m.youtube.com 似乎有些不同。

你试下强制使用桌面版布局行不行:

把地址从:

https://m.youtube.com/watch?v=VIDEO_ID

改成:

https://www.youtube.com/watch?app=desktop&v=VIDEO_ID
muzuiget commented 1 year ago

@marlowma v2.8.8 已经支持 m.youtube.com 了,虽然我没真机测试过。

marlowma commented 1 year ago

感谢你的回复,确实转到桌面版就可以使用了。

muzuiget @.***> 于 2023年8月21日周一 下午5:16写道:

@marlowma https://github.com/marlowma v2.8.8 已经支持 m.youtube.com 了,虽然我没真机测试过。

— Reply to this email directly, view it on GitHub https://github.com/muzuiget/dualsub-support/issues/538#issuecomment-1685956192, or unsubscribe https://github.com/notifications/unsubscribe-auth/APZCH5X763KQCMX4V2CHUKDXWMRPHANCNFSM6AAAAAA3JM65YQ . You are receiving this because you were mentioned.Message ID: @.***>

shuyaoyimei commented 11 months ago

有机会支持openai的Whisper API么

muzuiget commented 11 months ago

你说 OpenAI 官方服务器的 API 吗?不支持的,用了一些只能在 Python 里才有的接口,比如 word-level timestamp,官方服务器 API 没有这种接口。

5uy4n9 commented 11 months ago

你说 OpenAI 官方服务器的 API 吗?不支持的,用了一些只能在 Python 里才有的接口,比如 word-level timestamp,官方服务器 API 没有这种接口。

不知道有没有可能运行在 Cloudflare Workers AI 上的 Whisper https://developers.cloudflare.com/workers-ai/models/speech-to-text/

muzuiget commented 11 months ago

所以需求是什么呢?OpenAI Whisper 是开源的,完全可以自己在本地跑,如果不在意识别速度,还可以用 CPU 跑。

5uy4n9 commented 11 months ago

是想说服务端是不是可以完全运行在 Cloudflare Workers 上,我简单试了下 Workers 最近新推出的 whisper,运行速度还是挺快的,本身也有一定的免费额度,说不定可以利用得上

muzuiget commented 11 months ago

对我来说,这点钱暂时不用省,现在我都没有额外收费。

muzuiget commented 11 months ago

测试两个月,我觉得算是稳定了,可以算是标配功能了,有其它问题可以另帖讨论。

vecyang1 commented 10 months ago

目前视频需要手动点才会启用whiper,可否有方法设置为自动某个语言呢或者给予是否自动的选项/快捷键。

muzuiget commented 10 months ago

自动选择问题看 https://github.com/muzuiget/dualsub-support/issues/557