Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

B 站视频自动字幕脚本

一个基于 Tampermonkey 的用户脚本,为 B 站视频自动生成字幕。通过提取视频音频、调用 腾讯云录音识别极速版 API 进行语音识别,并自动将字幕渲染到视频播放器中。

功能特性

1. 智能音频提取

  • 高质量音源:优先解析 B 站 DASH 接口,直接获取无损 M4A 音频流,确保最佳识别效果。
  • 智能缓存:使用浏览器 IndexedDB 缓存音频文件和字幕数据(上限 100MB),避免重复下载和调用 API,节省流量和成本。

2. AI 极速识别

  • 腾讯云对接:集成腾讯云录音文件识别极速版 API,识别速度快(通常 30 分钟音频仅需 10 秒)。
  • 智能断句
    • 采用 词级重组算法,将长语音流拆分为适合阅读的短句。
    • 基于标点符号自然停顿 (>500ms)字符长度 (20字) 进行智能切分。
    • 确保每行字幕简短、语义完整,避免大段文字遮挡画面。

3. 原生级字幕渲染

  • 沉浸式体验:复刻 B 站原生 CC 字幕样式(半透明黑底、白色文字、阴影效果)。
  • 自适应布局:字幕大小随播放器宽度自动缩放,完美适配全屏、宽屏和小窗模式。
  • 精准同步:基于 requestAnimationFrame 实现毫秒级时间轴同步。

安装方法

前置要求

安装步骤

  1. 安装 Tampermonkey 扩展。
  2. 创建新脚本,将 bilibili-auto-subtitle.user.js 内容复制进去。
  3. 保存脚本并刷新 B 站视频页面。
  4. 首次使用配置
    • 脚本会自动弹出配置面板。
    • 填入您的腾讯云 APPID, SECRET_ID, SECRET_KEY
    • 点击"保存",密钥将安全存储在浏览器本地。
    • 注意:密钥仅存储在您的浏览器中,不会上传到任何服务器。

使用说明

  1. 打开视频:访问任意 B 站视频页,右侧会出现"B站自动字幕"悬浮面板。
  2. 配置密钥(首次使用):点击"⚙️ 设置"按钮,输入腾讯云 API 密钥并保存。
  3. 提取音频:点击"提取音频",脚本会自动下载并缓存音频。
  4. 生成字幕:下载完成后点击"生成字幕 (腾讯云 AI)",脚本将上传音频并获取字幕。
  5. 观看视频:字幕生成后会自动加载,随视频播放同步显示。
  6. 再次访问:已识别过的视频会显示"已缓存音频+字幕",点击"加载字幕 (使用缓存)"即可直接加载,无需重新调用 API。

配置说明

腾讯云 API 配置

脚本提供了可视化配置界面,无需修改代码:

  1. 点击悬浮面板上的"⚙️ 设置"按钮。
  2. 在弹出的配置窗口中填入以下信息:
    • APPID:腾讯云账号 APPID
    • SECRET_ID:API 密钥 ID
    • SECRET_KEY:API 密钥 Key(输入时会隐藏显示)
  3. 点击"保存"完成配置。

获取密钥

  1. 访问 腾讯云 API 密钥管理
  2. 新建密钥,获取 SecretIdSecretKey
  3. 访问 账号信息 获取 APPID

安全性说明

  • 密钥通过 Tampermonkey 的 GM_setValue API 存储在浏览器本地。
  • 数据不会上传到任何第三方服务器。
  • 您可以随时通过"设置"按钮修改或更新密钥。

技术架构

  • 音频提取:解析 window.__playinfo__ 获取 DASH 音频流。
  • 缓存层CacheManager 模块封装 IndexedDB,实现 FIFO 缓存淘汰策略,同时缓存音频文件和字幕数据。
  • 识别层TencentCloudProvider 实现 HMAC-SHA1 签名鉴权(纯 JS 实现,无外部依赖),直接调用腾讯云 REST API。
  • 字幕缓存:识别成功后自动保存字幕到 IndexedDB,再次访问时优先读取缓存,避免重复调用 API。
  • 解析层SRTParser 负责解析字幕,SubtitleRenderer 负责 DOM 渲染。

常见问题

Q: 为什么提示"签名错误 (4002)"?

A: 请检查脚本中的 APPID, SECRET_ID, SECRET_KEY 是否正确,且没有多余空格。确保您的腾讯云账号已开通语音识别服务。

Q: 字幕时间对不上?

A: 脚本已内置时间戳修正逻辑。如果仍有偏差,可能是网络延迟或音频文件版本问题,尝试点击"重新生成"或刷新页面。

Q: 字幕缓存存储在哪里?

A: 字幕和音频文件一起存储在浏览器的 IndexedDB 中,与视频 ID 关联。缓存总量超过 100MB 时会自动清理旧记录。

Q: 如何清除缓存的字幕?

A: 可以在浏览器开发者工具的 Application/Storage 标签中,找到 IndexedDB -> BilibiliSubtitleCache,手动删除记录。或者等待缓存自动清理。

许可证

MIT License

About

一个基于 Tampermonkey 的浏览器脚本,为 B 站视频自动生成字幕

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages