首页龙虾技能列表 › VideoToText — subtitles & summary — VideoToText — 字幕提取与总结

VideoToText — subtitles & summary — VideoToText — 字幕提取与总结

v1.0.0

指导稳定拉取 B 站官方字幕(应对限流/登录可见轨道)、并用 OpenAI 兼容接口生成中文总结稿;技能包内含 code/ 镜像源码与 env 模板,可打 zip 给 OpenClaw 离线使用。适用于 Bilibili 链接解析、字幕提取失败排查、SESSDATA/Cookie、WBI player 字幕、字幕校验与多轮采样、以及 SUMMARY_LLM_* 总结配置。

1· 61·0 当前·0 累计
by @willguo715 (WillGuo)·MIT-0
下载技能包
License
MIT-0
最后更新
2026/4/5
安全扫描
VirusTotal
Pending
查看报告
OpenClaw
可疑
high confidence
技能的代码和 SKILL.md 与其声明的目的(B 站字幕提取和调用兼容 LLM)一致,但包元数据遗漏了其实际需要的敏感环境变量,在安装或提供密钥之前有一些实现细节需要注意。
评估建议
该技能似乎正好实现了其声称的功能(提取 B 站字幕并调用 LLM 进行总结),但在安装或提供密钥之前请考虑以下几点: - 透明度:注册表元数据未声明代码实际期望的环境变量。请与发布者确认需要哪些环境变量(SESSDATA、BILI_JCT、DEDEUSERID、SUMMARY_LLM_API_KEY / OPENAI_API_KEY、SUMMARY_LLM_BASE_URL/CHAT_COMPLETIONS_URL 等)。 - 密钥:请勿将您的主账户 SESSDATA/Cookie 提供给不受信任或未知来源。如果需要运行技能,请优先使用一次性/测试 B 账户。同样,使用临时的或受限的 LLM API 密钥或自托管 LLM 端点,而不是您的主要、高价值密钥。 - 数据泄露面:该技能会将字幕文本(可能是私密的)和视频标题发送到配置的 LLM 端点。请确保 SUMMARY_LLM_BASE_URL / SUMMARY_LLM_CHAT_COMPLETIONS_URL 指向可信服务,并且您了解该端点的隐私政策。 - .env 位置和路径解析:settings.py 包含用于定位 .env 文件...
详细分析 ▾
用途与能力
技能的名称和描述与包含的代码一致:它提取 B 站字幕并将其发送到 OpenAI 兼容端点进行总结。然而,注册表元数据未声明所需的环境变量或凭据,而代码和 SKILL.md 明确期望敏感的環境變量(SESSDATA、BILI_JCT、DEDEUSERID、OPENAI/SUMMARY_LLM_* 密钥)。注册表中的遗漏是一个降低透明度的不一致之处。
指令范围
SKILL.md 的运行时指令与代码一致:展开短链接,获取 view/player/subtitle JSON,可选使用用户提供的 Cookie 值,并将字幕文本 + 标题发送到配置的 LLM chat/completions 端点。指令不会指示代理读取无关文件,也不会向隐藏端点泄露任何内容。重要的操作行为:该技能会将完整字幕文本(可能是私密的)传输到配置的 SUMMARY_LLM_BASE_URL / CHAT_COMPLETIONS_URL,并使用 SUMMARY_LLM_API_KEY 或 OPENAI_API_KEY(如果设置)。
安装机制
没有安装规范,该技能是纯指令式的,包含代码镜像。这最大程度减少了不透明的安装步骤。包含的 requirements-code.txt 列出了 httpx、pydantic 和 yt-dlp(对于此功能是正常的)。清单中没有远程下载 URL 或归档提取。
凭证需求
代码确实需要 B 站登录令牌(SESSDATA 和可选的 BILI_JCT/DEDEUSERID...)来获取仅登录可见的字幕,以及用于总结的 LLM API 密钥或 base URL。这些是敏感的密钥。问题是:注册表元数据没有列出所需的环境变量,因此该技能未通过透明度测试——它在代码/指令中要求凭据但未提前声明。此外,settings.py 尝试通过路径启发式方法定位 .env 文件;根据代理运行的位置,可能会获取与用户预期的不同的 .env(请验证 .env 放置位置)。
持久化与权限
该技能不请求 'always: true',也不声称修改其他技能或代理级设置。它确实会执行网络调用,并且可能被自动调用(默认),这对于这种类型的集成是预期的。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/4/5

B 站字幕稳定提取与总结核心模块首发。 - 首发提供 Bilibili 官方字幕提取、稳定排错、Cookie 及轨道选择全流程说明 - 支持字幕抽取与多轮采样、轨道优先级判定、校验逻辑详解 - 内含 OpenAI 兼容总结服务调用与回退说明,环境变量详尽标注 - 附源码 code/ 目录镜像、requirements、参考文档组成完整技能包

● Pending

安装命令 点击复制

官方npx clawhub@latest install videototext
镜像加速npx clawhub@latest install videototext --registry https://cn.clawhub-mirror.com

技能文档

合规与前提

  • 仅使用用户本人账号导出的 Cookie;不协助绕过付费墙、地域限制或批量爬取。
  • 尊重站点频率限制:项目内已对 B 站 HTTP 做节流 + 重试退避,修改时不要去掉 _throttle / _request_with_retry 逻辑。
  • 详细环境变量与默认值见同目录 reference.md
  • 技能包内已附带与主流程一致的源码镜像:见 code/(导入方式见 code/README.md)。环境变量名与示例见 主仓库 根目录 .env.example,自行复制为技能包根目录的 .env 后填写。

端到端流程(与代码一致)

  • URLapp/utils/url_tools.py(包内 code/app/utils/url_tools.py)— 展开 b23.tv、解析 BV 与分 P ?p=
  • 编排(完整仓库):app/services/orchestrator.py — 先官方字幕;失败且开启 ASR 时再本机转写;正文就绪后调用总结服务。技能包未含 orchestrator/ASR,仅含抽取与总结核心模块。
  • B 站元数据与字幕app/extractors/bilibili.py + app/services/bilibili_subtitle.py(包内 code/app/...)。
  • 无字幕兜底(仅完整仓库):app/utils/audio_fetch.py + app/asr/local_faster_whisper.py(需 LOCAL_ASR_ENABLED 等)。
  • 总结app/services/summary.py — 优先 LLM(OpenAI 兼容 Chat Completions),失败则本地抽样回退。

字幕链路:反爬与稳定性要点

Cookie 策略(核心)

  • SESSDATA(及可选 BILI_JCTDEDEUSERIDDEDEUSERID__CKMD5)由 app/services/bilibili_subtitle.py_build_bilibili_cookie() 组装为 Cookie 请求头。
  • 优先带 Cookie 请求;若仍失败再尝试无 Cookie(同一套 view → player 流程)。
  • 需登录才返回的字幕need_login_subtitle):仅 SESSDATA 往往不够,应配齐四件套(见 .env.example 注释)。
  • yt-dlp 取信息与音频时复用同一 Cookie:get_bilibili_sessdata_cookie_header()app/extractors/bilibili.py)。

HTTP 行为

  • 统一 Referer https://www.bilibili.com/、桌面 Chrome User-Agent、Accept JSON(_client_headers)。
  • 全站最小请求间隔 BILIBILI_MIN_INTERVAL_SECONDS(默认约 0.8s),全局锁节流。
  • 重试:网络/412/429/5xx 等指数退避 + 抖动,次数由 BILIBILI_MAX_RETRIES 等控制。

接口顺序

  • GET https://api.bilibili.com/x/web-interface/view?bvid= — 取 aidpages、标题、时长等。
  • GET https://api.bilibili.com/x/player/wbi/v2?aid=&cid=&bvid=优先取字幕轨道列表(与 yt-dlp 一致,登录可见轨常在此)。
  • subtitles 为空,再回退 GET https://api.bilibili.com/x/player/v2(部分稿件仅旧接口有轨,如部分 AI 字幕)。
  • 对每条轨道的 subtitle_urlGET 拉 JSON,body[].content 拼正文(payload_to_text)。

轨道选择与质量

  • 轨道排序:中文类优先,其内简体/通用 zh 优先于繁体,再 AI 中文;同组内可匹配 prefer_lang_ordered_tracks)。
  • BILIBILI_SUBTITLE_VALIDATE=true 时:多轮采样可选;对每条下载结果做时长覆盖标题汉字二元组命中率过滤,防止 AI 串台;AI 轨使用更高阈值(BILIBILI_SUBTITLE_AI_MIN_TITLE_MATCH)。
  • BILIBILI_SUBTITLE_VALIDATE=false 时:更快,取首条非空;若开启 BILIBILI_SUBTITLE_AI_SANITY_WHEN_VALIDATE_OFF,仍可对 AI 轨做标题 sanity。
  • 用户在前端显式选语言时:走 only_lan 分支,不做标题命中率过滤(仍可在 validate 开启时做时长覆盖)。

排错清单

  • 轨道列表为空:检查 Cookie 是否完整、是否登录账号、分 P 是否正确。
  • 正文空或校验全失败:尝试开启/关闭 BILIBILI_SUBTITLE_VALIDATE、调整采样轮次与间隔,或让用户指定 lan
  • 频繁 412/429:增大 BILIBILI_MIN_INTERVAL_SECONDS,避免并发多请求。

总结链路(TextSummaryService)

  • 配置 SUMMARY_ENABLEDSUMMARY_LLM_BASE_URLSUMMARY_LLM_CHAT_COMPLETIONS_URLSUMMARY_LLM_MODEL;API Key 可用 SUMMARY_LLM_API_KEYOPENAI_API_KEY(见 app/core/settings.py 别名)。
  • 端点:若 BASE_URL 已以 /chat/completions 结尾则不再拼接;否则为 {base}/chat/completions
  • 请求体:OpenAI 兼容 chat/completionstemperature 来自 SUMMARY_LLM_TEMPERATURE
  • 短目标max_chars <= 200):单段电报体中文;长目标## 总标题 + 若干 主题: 块(见 summary.py 内 prompt)。
  • 正文入模上限约 60000 字符;响应解析支持 message.content 为字符串或多段 list;无有效 content 时回退 _summarize_fallback

回归与自检

  • 字幕大改后:在项目根执行 python scripts/verify_subtitle_canary.py(需 .envSESSDATA 等,见 CLAUDE.md)。
  • 全量测试:pytest

打包给 OpenClaw 使用

将本目录 videototext 整夹 打成 zip(含 SKILL.mdreference.mdcode/requirements-code.txt)。解压后:

  • Agent 阅读:SKILL.mdreference.mdcode/ 下源码。
  • 若需本地运行子集:pip install -r requirements-code.txtPYTHONPATH 指向 code/.env 放在与 SKILL.md 同级目录(见 code/README.md)。

延伸阅读

数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制

免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制

了解定制服务