Auto-Updater Skill
一个面向 Other 场景的 Agent 技能。原始说明:Automatically update Clawdbot and all installed skills once daily. Runs via cron, checks for updates, applies them, and messages the user with a summary of what changed.
name: bilibili-video-transcriber
description: 【B站字幕获取】专业处理 B 站视频字幕问题,支持语音转文字、字幕下载、内容分析。基于实际 B 站字幕系统错误问题开发,提供完整的解决方案。
metadata:
clawdbot:
emoji: "🎬"
requires:
anyBins:
os:
专业处理 B 站视频字幕问题,支持语音转文字、字幕下载、内容分析
存储路径(3重冗余):
1. 技能目录: ~/.openclaw/workspace/skills/.../.bilibili_cookie ← immutable 保护
2. 用户目录: ~/.bilibili_cookie_storage
3. 配置目录: ~/.config/bilibili_transcriber/cookie
运行引用: ~/.bilibili_cookie.txt(自动同步,600权限)
失效时: → 自动检测 → 生成二维码 → 通过飞书发送 → 用户扫码 → 自动保存
# 安装技能包
clawhub install bilibili-transcriber-pro
# 或手动安装依赖
pip install bilibili-api requests pydub faster-whisper vosk qrcode
# 扫码登录(会自动保存到冗余存储)
bilibili-transcribe --login
# 检查登录状态
bilibili-transcribe --check-cookie
# 处理单个视频(自动验证Cookie,含评论获取)
bilibili-transcribe BV1txQGByERW
# 指定Cookie文件
bilibili-transcribe BV1txQGByERW --cookie ~/.bilibili_cookie.txt
# 批量处理
bilibili-transcribe --batch bv_list.txt
# 处理视频时会自动获取热门评论(按点赞排序),包含:
# - 热评内容 + 点赞数
# - 热评下的回复
# - 评论写入 markdown 的 💬 评论区部分
# - CLI 直接展示前3条热评预览
# 扫码登录(推荐方式)
bilibili-transcribe --login
# 检查Cookie状态
bilibili-transcribe --check-cookie
# 输出示例:
# ✅ Cookie 有效
# 👤 用户: 你的B站用户名
# 🏆 大会员: ✅
# 📂 存储路径: ~/.bilibili_cookie.txt
# 手动更新Cookie
bilibili-transcribe --update-cookie "SESSDATA=xxx; bili_jct=xxx"
# 设置环境变量
export BILIBILI_COOKIE="SESSDATA=xxx; bili_jct=xxx"
from cookie_manager import (
save_cookie, load_cookie, check_cookie_valid,
needs_cookie_refresh, BilibiliQRLogin, send_qr_via_feishu
)
# 检查Cookie是否需要刷新
reason = needs_cookie_refresh()
if reason:
print(f"⚠️ Cookie 需要刷新: {reason}")
login = BilibiliQRLogin()
qr_path = login.generate_qr_code()
# 通过飞书发送二维码
send_qr_via_feishu(qr_path)
# 轮询等待扫码
result = login.poll_login()
if result['success']:
print(f"✅ 登录成功: {result['username']}")
else:
print("✅ Cookie 有效")
~/.config/bilibili_transcriber/config.yaml# Cookie 配置(增强版)
cookie:
file: "~/.bilibili_cookie.txt"
auto_refresh: true
refresh_interval: 86400 # 24 小时
redundant_storage: true # 启用冗余存储
storage_paths:
- "~/.openclaw/workspace/skills/bilibili-video-transcriber/.bilibili_cookie"
- "~/.bilibili_cookie_storage"
- "~/.config/bilibili_transcriber/cookie"
notify_on_expire: true # Cookie失效时通知
notify_channel: "feishu" # 通知通道
# 模型配置
model:
engine: "whisper"
name: "base"
device: "cpu"
compute_type: "int8"
language: "zh"
# 飞书通知配置
notify:
channel: "feishu" # 通知通道
qr_temp_dir: "/tmp"
处理视频时自动按点赞排序获取热门评论,最多 30 条热评 + 每条热评 3 条回复。
💬 热门评论 部分comments 数组transcript.txt)[0.00s -> 3.90s] 兄弟们 HermesAgent 刚刚发布了更新 4.13
[3.90s -> 5.76s] 那么这一次最大的一个升级呢
[5.76s -> 9.00s] 是它带来了本地的外部控制面板
...
transcript.json){
"video_info": {
"bvid": "BV1txQGByERW",
"title": "视频标题",
"duration": 210,
"up": "UP主名"
},
"transcript": [
{"start": 0.0, "end": 3.9, "text": "内容", "confidence": 0.95}
],
"cookie_status": {
"valid": true,
"user": "用户名",
"is_vip": true
}
}
summary.md)# 视频标题
**视频信息**
- BV 号:BV1xxx
- 时长:210 秒
- UP 主:xxx
- Cookie 状态:✅ 有效 (用户: xxx)
**核心内容**
1. 要点一
2. 要点二
**完整转录**
[0.00s -> 3.90s] 内容
...
cookie_manager.py 负责管理 Cookie 的存储和生命周期:
┌─────────────────────────────────────────────────┐
│ cookie_manager │
├─────────────────────────────────────────────────┤
│ 1. save_cookie(cookie_str) │
│ → 写入活跃文件 (~/.bilibili_cookie.txt) │
│ → 同步到3个冗余路径(含 immutable 保护) │
│ → 设置 600 权限 │
├─────────────────────────────────────────────────┤
│ 2. load_cookie() │
│ → 依次查找所有存储路径 │
│ → 如果从备份读到,自动补全到活跃路径 │
│ → 也检查环境变量 BILIBILI_COOKIE │
├─────────────────────────────────────────────────┤
│ 3. check_cookie_valid(cookie_str) │
│ → 调用 bilibili_api 验证有效期 │
│ → 返回 {valid, username, is_vip, error} │
├─────────────────────────────────────────────────┤
│ 4. needs_cookie_refresh() │
│ → 快速检查是否需要刷新 │
│ → 返回 None=有效, str=失效原因 │
├─────────────────────────────────────────────────┤
│ 5. BilibiliQRLogin │
│ → generate_qr_code() → 生成二维码图片 │
│ → poll_login() → 轮询扫码结果 │
│ → poll_once() → 单次检查(供外部调用) │
├─────────────────────────────────────────────────┤
│ 6. send_qr_via_feishu(image_path) │
│ → 写入信号文件(供代理处理器读取并发送) │
└─────────────────────────────────────────────────┘
1. 用户发送 B 站链接 or 调用 --login
2. cookie_manager 检测到 Cookie 不存在/失效
3. BilibiliQRLogin 生成二维码图片
4. send_qr_via_feishu 写入信号文件
5. [代理处理器] 读取信号 → 上传飞书图片 → 发送给用户
6. 用户扫码 → poll_login 轮询到成功
7. save_cookie 保存到冗余存储
8. 继续处理视频
# 在任何脚本中都可以使用
from cookie_manager import (
save_cookie, load_cookie, check_cookie_valid,
needs_cookie_refresh
)
# 获取当前 Cookie(自动加载、自动恢复)
cookie_str = load_cookie()
if cookie_str:
status = check_cookie_valid(cookie_str)
print(f"用户: {status['username']}, 有效: {status['valid']}")
# 重新扫码登录
bilibili-transcribe --login
# 或手动更新
bilibili-transcribe --update-cookie "SESSDATA=xxx; bili_jct=xxx"
不用担心,cookie_manager 会自动从备份路径恢复。
备份位置:
~/.openclaw/workspace/skills/bilibili-video-transcriber/.bilibili_cookie
~/.bilibili_cookie_storage
~/.config/bilibili_transcriber/cookie
技能目录内的备份设置了 immutable 保护,不可删除。
bilibili-transcribe --check-cookie
问题:lark-cli docs +create --markdown ./file.md 会错误地将文件名本身写入内容,而非文件内容。
解决方法:使用 pipe 方式传入 Markdown 内容:
cat content.md | lark-cli docs +create \
--title "[视频总结] UP主名 - 标题 - 日期" \
--markdown - \
--wiki-space "知识空间ID"
飞书返回的 doc_url 为 https://www.feishu.cn/wiki/...,但企业可能使用自定义域名(如 https://企业名.feishu.cn/wiki/...)。
直接点返回的 doc_url 可能跳转失败,需要在知识库内找到实际链接,用企业自定义域名格式发送给用户。
<lark-table> 标签格式,标准 Markdown 表格(| ... |)在飞书中可能不渲染<callout emoji="🎬" background-color="light-blue">...</callout> 标签<grid cols="2"><column>...</column></grid> 标签--title 参数设置,Markdown 内容中不要包含相同的一级标题(#)<callout> 标签的 emoji 属性中使用实际 emoji 字符(如 🎬),而非名称(如 clapper)文档结构模板:
1. <callout> 高亮块 — 说明文字
2. ## 📋 视频信息 — lark-table 行列式表格
3. ## 📝 结构化内容总结 — 分段详解(源自字幕/转写)
4. ## 🔑 核心要点 — 提炼的干货要点
5. ## 💬 热门评论 — 评论区精选
6. ## 🔗 字幕文件 — 原始文件说明
lark-cli 前需先完成 lark-cli auth loginlark-cli docs +create 可用--wiki-space 参数安装时自动检测系统配置(setup.py 中 check_system_capability 函数):
运行时自动路由(bilibili_transcriber.py 中 _detect_system_resources 函数):
| 方案 | 结果 | 说明 |
|------|------|------|
| Whisper tiny/base | ❌ OOM | 即使 tiny 也会被杀 |
| faster-whisper base | ❌ 被 kill | 39分钟后被 OOM kill |
| Vosk small (66MB) | ✅ 可行 | 16分钟视频214秒转写完成 |
| Vosk + chunk | ✅ 稳定 | 6×180秒分块处理,避免一次性加载 |
# 1. 下载音频(优先 dash audio)
# 2. ffmpeg 转 WAV(16kHz, mono, 16bit)
# 3. 分块处理(每块 ≤3 分钟)
# 4. Vosk 逐块识别 → 拼接
bilibili_transcripts/{UP主名称}_{视频标题}/ # 取代 BV号 格式
├── transcript.json # 含转写+评论的完整数据
├── transcript.txt # 纯文本
├── summary.md # 结构化总结
├── summary_full.md # 详细总结(含评论)
└── comments.json # 评论数据
MIT License
最后更新: 2026-05-17
本次更新内容:
get_comments() 方法:自动获取视频热门评论(按热度排序)ProcessingResult 新增 comments 字段save_transcript() markdown 格式新增 💬 热门评论 区块print_result() CLI 输出展示前 3 条热评lark-cli 1.0.18 --markdown bug 及 workaround{up_name}_{video_title} 而非 BV 号