一个基于 Tampermonkey 的用户脚本,为 B 站视频自动生成字幕。通过提取视频音频、调用 腾讯云录音识别极速版 API 进行语音识别,并自动将字幕渲染到视频播放器中。
- 高质量音源:优先解析 B 站 DASH 接口,直接获取无损 M4A 音频流,确保最佳识别效果。
- 智能缓存:使用浏览器 IndexedDB 缓存音频文件和字幕数据(上限 100MB),避免重复下载和调用 API,节省流量和成本。
- 腾讯云对接:集成腾讯云录音文件识别极速版 API,识别速度快(通常 30 分钟音频仅需 10 秒)。
- 智能断句:
- 采用 词级重组算法,将长语音流拆分为适合阅读的短句。
- 基于标点符号、自然停顿 (>500ms) 和字符长度 (20字) 进行智能切分。
- 确保每行字幕简短、语义完整,避免大段文字遮挡画面。
- 沉浸式体验:复刻 B 站原生 CC 字幕样式(半透明黑底、白色文字、阴影效果)。
- 自适应布局:字幕大小随播放器宽度自动缩放,完美适配全屏、宽屏和小窗模式。
- 精准同步:基于
requestAnimationFrame实现毫秒级时间轴同步。
- 安装 Tampermonkey 浏览器扩展。
- 注册 腾讯云账号 并开通 录音文件识别极速版(新用户通常有免费额度)。
- 安装 Tampermonkey 扩展。
- 创建新脚本,将
bilibili-auto-subtitle.user.js内容复制进去。 - 保存脚本并刷新 B 站视频页面。
- 首次使用配置:
- 脚本会自动弹出配置面板。
- 填入您的腾讯云
APPID,SECRET_ID,SECRET_KEY。 - 点击"保存",密钥将安全存储在浏览器本地。
- 注意:密钥仅存储在您的浏览器中,不会上传到任何服务器。
- 打开视频:访问任意 B 站视频页,右侧会出现"B站自动字幕"悬浮面板。
- 配置密钥(首次使用):点击"⚙️ 设置"按钮,输入腾讯云 API 密钥并保存。
- 提取音频:点击"提取音频",脚本会自动下载并缓存音频。
- 生成字幕:下载完成后点击"生成字幕 (腾讯云 AI)",脚本将上传音频并获取字幕。
- 观看视频:字幕生成后会自动加载,随视频播放同步显示。
- 再次访问:已识别过的视频会显示"已缓存音频+字幕",点击"加载字幕 (使用缓存)"即可直接加载,无需重新调用 API。
脚本提供了可视化配置界面,无需修改代码:
- 点击悬浮面板上的"⚙️ 设置"按钮。
- 在弹出的配置窗口中填入以下信息:
- APPID:腾讯云账号 APPID
- SECRET_ID:API 密钥 ID
- SECRET_KEY:API 密钥 Key(输入时会隐藏显示)
- 点击"保存"完成配置。
- 访问 腾讯云 API 密钥管理。
- 新建密钥,获取
SecretId和SecretKey。 - 访问 账号信息 获取
APPID。
- 密钥通过 Tampermonkey 的
GM_setValueAPI 存储在浏览器本地。 - 数据不会上传到任何第三方服务器。
- 您可以随时通过"设置"按钮修改或更新密钥。
- 音频提取:解析
window.__playinfo__获取 DASH 音频流。 - 缓存层:
CacheManager模块封装 IndexedDB,实现 FIFO 缓存淘汰策略,同时缓存音频文件和字幕数据。 - 识别层:
TencentCloudProvider实现 HMAC-SHA1 签名鉴权(纯 JS 实现,无外部依赖),直接调用腾讯云 REST API。 - 字幕缓存:识别成功后自动保存字幕到 IndexedDB,再次访问时优先读取缓存,避免重复调用 API。
- 解析层:
SRTParser负责解析字幕,SubtitleRenderer负责 DOM 渲染。
A: 请检查脚本中的 APPID, SECRET_ID, SECRET_KEY 是否正确,且没有多余空格。确保您的腾讯云账号已开通语音识别服务。
A: 脚本已内置时间戳修正逻辑。如果仍有偏差,可能是网络延迟或音频文件版本问题,尝试点击"重新生成"或刷新页面。
A: 字幕和音频文件一起存储在浏览器的 IndexedDB 中,与视频 ID 关联。缓存总量超过 100MB 时会自动清理旧记录。
A: 可以在浏览器开发者工具的 Application/Storage 标签中,找到 IndexedDB -> BilibiliSubtitleCache,手动删除记录。或者等待缓存自动清理。
MIT License