Dualsub 新功能:在 YouTube 里使用 Whisper 实时生成和显示双语字幕

Dualsub 是一个 Chrome 字幕翻译扩展,四年前在这里发帖推广过

有些人可能知道 Dualsub 有收费功能了,在你想差评之前,让我先说明一下,其实你没必要付费。

YouTube 自带机器翻译功能

有些人可能不知道,YouTube 自带机器翻译功能,只是开启方法不直观而已:

  1. 打开字幕菜单,选择字幕语言,相当于选择“原文字幕文件”。
  2. 再打开一次字幕菜单,会多了个“自动翻译”菜单条目。

1

  1. 在“自动翻译”的二级菜单,选择机器翻译的语言,最后字幕状态会是这样。

2

这样,单语字幕不用安装浏览器扩展就能实现,自然也不需要给任何人付费。

原文字幕和译文字幕都是由 YouTube 服务器提供的。

如果你用 DevTools 来查看网络请求,你会看到字幕文件地址:

https://www.youtube.com/api/timedtext?v=VIDEOID&lang=en&tlang=
https://www.youtube.com/api/timedtext?v=VIDEOID&lang=en&tlang=zh

参数 langtlang 分别对应原文和译文语言,YouTube 服务器会返回 JSON 格式的字幕文件。

实现双语字幕

原理很简单,拦截播放器的字幕文件的网络请求,另外下载原文和译文两个字幕文件,合并成一个新的字幕文件,传回给播放器。

这样需要用户选择 2 x 2 = 4 个字幕语言,对应 Dualsub 的“简单模式“。

3

这样设置后 YouTube 的字幕语言菜单就临时失效了,但是字幕样式菜单依然有效。

因为使用的还是 YouTube 服务器提供的字幕文件,纯浏览器本地实现的功能,自然也不会有人想给第三方服务器付费。

可能“简单模式”这个叫法有点问题,或者叫”原生模式“,或者干脆“免费模式”更好。

新功能:Whisper 语音识别

Dualsub 有个“标准模式”,简单说就是插一个新的 HTML 节点到网页上,以实现更精细的字幕控制和渲染功能。使用方法和“简单模式”一样,只是多了一些设置选项。

OpenAI 开源了 Whisper 后,我自搭了个 Whisper 服务器来识别 YouTube 视频。

Whisper 比 YouTube 的识别结果好的地方:带标点符号,能提升机器翻译质量。

使用方法也很简单,只需要在“字幕语言里”选择 (auto-generated) + 这个菜单条目即可。

5

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

原理是一边播放一边识别,每次只识别播放时间后面的 30-90 秒钟,提前处理好要未来要显示的字幕数据,除了一开始无字幕数据时要等待一会(类似音视频数据的“缓冲”)。

6

两种模式可以同时启用,可以做个对比。

可以看到,因为有了标点,断句和翻译更合理。

目前的限制

  • 仅支持识别英语
  • 仅支持 YouTube
  • 不支持加密的、私有的、需要付费的等不能在服务器下载的视频。

亲自试用一下

现在测试期间,不需要注册,也不需要邀请,开箱即用,免费识别和翻译每个视频的前 30 分钟

另外一些技术问题也可以看看 Github Issue 这个帖子

可以用下面视频测试:
https://www.youtube.com/watch?v=kEyTV-x7cDo
https://www.youtube.com/watch?v=H_VH8yRaT70

youtube那个字幕似乎不是每个都有,有时候是没有这个字幕选项的,这种有搞头吗?

没有cc的话,这种翻译也不会生效

soga,今天再看一个视频时候,看他他请求了个字幕文件,但是那个文件没有,然后就一直显示no xxxx什么的

楼主这个我用过,不习惯
我一直都是用https://www.dual-subtitles.com/

这个似乎好久没更新了,今天试了下也是要本身有字幕才行,有啥本身没字幕也可以自动加个的吗

找过,没发现能这样内嵌到视频里的,除非你改用那些新出ai外挂字幕
win自带的也行,但是翻译差点意思

也是浏览器插件?需要自己的key还是装上就行了?wind还自带了字幕这个真不晓得。比没有强啊

这篇帖子就是说了,YouTube 没有自动生成字幕的话,Dualsub 就用 Whisper 来识别,仅支持英语,出现 no speech 可能这个视频不是说英语。

好像每看一个视频都要点击一次设置

有意这么做的,不这么做的话,不然每打开一个视频都会自动触发识别请求,那些“闲逛”用户会触发很多请求,也就是服务器识别了几分钟字幕,但是用户看了几秒秒觉得没意思就切下一个视频了。

至少手动选择一下菜单,会限制这种情况。