{"id":"1471ed91-d5e1-4cbf-81bd-641a4832b99f","entityType":"agent","slug":"clawhub-54lynnn-bilibili-auto-transcript","name":"Bilibili Auto Transcript","canonicalUrl":"https://www.xpersona.co/agent/clawhub-54lynnn-bilibili-auto-transcript","canonicalPath":"/agent/clawhub-54lynnn-bilibili-auto-transcript","generatedAt":"2026-10-10T07:40:02.571Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T23:41:04.354Z","emptyReason":null},"description":"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。 Skill: Bilibili Auto Transcript Owner: 54lynnn Summary: B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。 Tags: 54lynnn:3.3.0, auto:3.1.0, bilibili:3.3.9, chinese:3.3.9, latest:5.2.0, scanner:3.1.0, subtitles:3.3.9, transcript:3.3.9 Version history: v5.2.0 | 2026-06-12T16:25:11.501Z | user 修复Cookie检测bug + 标题自动校验 v5.0.1 | 2026-06-07T12:18:40.725Z | auto - Documentation improvements: Expanded SKILL.md with a detailed rationale","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.9K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17eg5gndg4q9p16rk2nqbpje183gv2k:bilibili-auto-transcript","sourceUrl":"https://clawhub.ai/54lynnn/bilibili-auto-transcript","homepage":"https://clawhub.ai/54lynnn/skills/bilibili-auto-transcript","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/54lynnn/bilibili-auto-transcript","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/54lynnn/skills/bilibili-auto-transcript","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":65,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。 Skill: Bilibili Auto Transcript Owner: 54lynnn Summary: B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。 Tags: 54lynnn:3.3.0, a"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:41:04.354Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:41:04.354Z","emptyReason":null},"stars":null,"forks":null,"downloads":1877,"packageName":null,"latestVersion":"5.2.0","tractionLabel":"1.9K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:41:04.354Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T23:41:04.354Z","lastCrawledAt":"2026-10-09T23:41:04.354Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T23:41:04.354Z","lastVerifiedAt":null,"highlights":[{"version":"5.2.0","createdAt":"2026-06-12T16:25:11.501Z","changelog":"修复Cookie检测bug + 标题自动校验","fileCount":14,"zipByteSize":35430},{"version":"5.0.1","createdAt":"2026-06-07T12:18:40.725Z","changelog":"- Documentation improvements: Expanded SKILL.md with a detailed rationale for switching from Qwen3-ASR back to Whisper as the primary speech-to-text backend, clarifying advantages, resource usage, and installation differences. - Removed the obsolete skill-card.md file. - No functional or code changes; this update is focused on clearer usage guidance and technical background in documentation.","fileCount":10,"zipByteSize":24057},{"version":"5.0.0","createdAt":"2026-06-04T07:33:42.343Z","changelog":"v5.0.0: 切换到 Whisper 引擎，修复 avid/bvid 去重 bug，全面更新文档和依赖","fileCount":10,"zipByteSize":23259},{"version":"4.0.0","createdAt":"2026-06-04T07:33:01.263Z","changelog":"v5.0.0: 切换到 Whisper 引擎，修复 avid/bvid 去重 bug，全面更新文档和依赖","fileCount":10,"zipByteSize":23075},{"version":"3.5.1","createdAt":"2026-06-03T08:50:54.851Z","changelog":"bilibili-auto-transcript 4.0.0 — now with Qwen3-ASR for faster, more accurate speech-to-text - Whisper 语音转文字已全面替换为 Qwen3-ASR，自动检测设备，按需优选 1.7B (GPU/Mac) 或 0.6B (CPU) 模型，准确率大幅提升 - 新增 scripts/qwen3_transcribe.py 脚本，统一辅助语音转写，简化多平台兼容 - 安装/依赖全面切换为虚拟环境 + qwen-asr，自动适配 CUDA/ROCm/MPS/CPU，移除 openai-whisper 相关依赖说明 - README、SKILL.md 全面更新，详细描述新版三步优先级、用法与模型选择 - 所有批量/自动脚本兼容新版依赖，运行方式调整为 .venv 下 python3 - 删除旧 skill-card.md，保持文档一致性","fileCount":10,"zipByteSize":22457},{"version":"3.5.0","createdAt":"2026-06-01T08:57:44.748Z","changelog":"v3.5.0: CUDA检测、智能Whisper模型选择、16kHz音频优化、Cookie过期提醒、AI字幕兜底增强；新增批量转录脚本(batch_transcribe.py)，支持断点续传、自动重试、CSV报告、AI摘要生成；输出文件按年/月分目录组织；修复临时文件清理、分页只取第一页等bug","fileCount":9,"zipByteSize":20342},{"version":"3.4.0","createdAt":"2026-06-01T03:33:35.031Z","changelog":"SQLite存储引擎升级 + 混合打分优化 + 8B默认模型","fileCount":9,"zipByteSize":17513},{"version":"3.3.10","createdAt":"2026-05-31T18:13:25.111Z","changelog":"添加GitHub开源链接、QQ群信息，文档更新","fileCount":9,"zipByteSize":17664}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17eg5gndg4q9p16rk2nqbpje183gv2k:bilibili-auto-transcript","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T07:40:02.569Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-54lynnn-bilibili-auto-transcript/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T23:41:04.354Z","emptyReason":null},"readme":"Skill: Bilibili Auto Transcript\n\nOwner: 54lynnn\n\nSummary: B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。\n\nTags: 54lynnn:3.3.0, auto:3.1.0, bilibili:3.3.9, chinese:3.3.9, latest:5.2.0, scanner:3.1.0, subtitles:3.3.9, transcript:3.3.9\n\nVersion history:\n\nv5.2.0 | 2026-06-12T16:25:11.501Z | user\n\n修复Cookie检测bug + 标题自动校验\n\nv5.0.1 | 2026-06-07T12:18:40.725Z | auto\n\n- Documentation improvements: Expanded SKILL.md with a detailed rationale for switching from Qwen3-ASR back to Whisper as the primary speech-to-text backend, clarifying advantages, resource usage, and installation differences.\n- Removed the obsolete skill-card.md file.\n- No functional or code changes; this update is focused on clearer usage guidance and technical background in documentation.\n\nv5.0.0 | 2026-06-04T07:33:42.343Z | user\n\nv5.0.0: 切换到 Whisper 引擎，修复 avid/bvid 去重 bug，全面更新文档和依赖\n\nv4.0.0 | 2026-06-04T07:33:01.263Z | user\n\nv5.0.0: 切换到 Whisper 引擎，修复 avid/bvid 去重 bug，全面更新文档和依赖\n\nv3.5.1 | 2026-06-03T08:50:54.851Z | auto\n\nbilibili-auto-transcript 4.0.0 — now with Qwen3-ASR for faster, more accurate speech-to-text\n\n- Whisper 语音转文字已全面替换为 Qwen3-ASR，自动检测设备，按需优选 1.7B (GPU/Mac) 或 0.6B (CPU) 模型，准确率大幅提升\n- 新增 scripts/qwen3_transcribe.py 脚本，统一辅助语音转写，简化多平台兼容\n- 安装/依赖全面切换为虚拟环境 + qwen-asr，自动适配 CUDA/ROCm/MPS/CPU，移除 openai-whisper 相关依赖说明\n- README、SKILL.md 全面更新，详细描述新版三步优先级、用法与模型选择\n- 所有批量/自动脚本兼容新版依赖，运行方式调整为 .venv 下 python3\n- 删除旧 skill-card.md，保持文档一致性\n\nv3.5.0 | 2026-06-01T08:57:44.748Z | user\n\nv3.5.0: CUDA检测、智能Whisper模型选择、16kHz音频优化、Cookie过期提醒、AI字幕兜底增强；新增批量转录脚本(batch_transcribe.py)，支持断点续传、自动重试、CSV报告、AI摘要生成；输出文件按年/月分目录组织；修复临时文件清理、分页只取第一页等bug\n\nv3.4.0 | 2026-06-01T03:33:35.031Z | user\n\nSQLite存储引擎升级 + 混合打分优化 + 8B默认模型\n\nv3.3.10 | 2026-05-31T18:13:25.111Z | user\n\n添加GitHub开源链接、QQ群信息，文档更新\n\nv3.3.9 | 2026-05-31T04:08:00.151Z | user\n\n修复 Whisper 模式 bug：find命令捡错.txt文件导致转录内容错乱+误删别人的文件；改为直接指定 bilibili_audio.txt，不乱拿目录里其他文件\n\nv3.3.8 | 2026-05-31T02:29:05.460Z | user\n\n彻底解耦：移除转录脚本中所有knowledge-rag引用，只负责转录出文件，不管索引\n\nv3.3.7 | 2026-05-31T02:27:00.133Z | user\n\n解耦两个skill：写摘要是强制步骤（独立于knowledge-rag），索引同步改为可选（仅装了knowledge-rag时执行）\n\nv3.3.6 | 2026-05-31T02:25:26.659Z | user\n\n修复摘要生成流程：脚本输出后 AI 必须 read 全文→edit 替换摘要占位符→重新索引，再向用户报告完成；占位符改为明确标记\n\nv3.3.5 | 2026-05-31T01:19:16.728Z | user\n\n修复 SKILL.md 输出目录描述与脚本不一致的问题\n\nv3.3.4 | 2026-05-31T01:12:06.003Z | user\n\n小版本修复\n\nv3.3.3 | 2026-05-31T00:46:28.272Z | user\n\n兼容 knowledge-rag 1.5.0 架构（FastAPI + TS Express）。\n\nv3.3.2 | 2026-05-29T23:44:03.303Z | user\n\n描述更新：推荐搭配 Knowledge RAG 使用。\n\nv3.3.1 | 2026-05-29T23:43:03.672Z | user\n\n还原干净显示名称。\n\nv3.3.0 | 2026-05-29T23:34:25.882Z | user\n\n品牌更新：显示名称加入 54Lynnn 个人标识；推荐搭配 knowledge-rag。\n\nv3.2.0 | 2026-05-29T23:31:18.872Z | user\n\n输出路径改为 ~/workspace/knowledge/bilibili/，与 knowledge-rag skill 开箱即匹配；转录后自动更新知识库索引；SKILL.md 增加推荐搭配 knowledge-rag 说明。\n\nv3.1.0 | 2026-05-28T04:20:30.906Z | user\n\nv3.1.0 - 双模式合并版：手动转录+自动扫描收藏夹二合一\n\nArchive index:\n\nArchive v5.2.0: 14 files, 35430 bytes\n\nFiles: README.md (3712b), references/architecture.md (2641b), references/bilibili-fav-api.md (3116b), scripts/batch_transcribe.py (12475b), scripts/bilibili_scanner.py (3292b), scripts/bilibili_transcript.sh (16747b), scripts/fill_summaries.py (3739b), scripts/generate_summary.py (7662b), scripts/logger.py (1218b), scripts/migrate_to_db.py (7631b), scripts/transcript_db.py (8380b), skill-card.md (2236b), SKILL.md (11540b), _meta.json (143b)\n\nFile v5.2.0:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"5.2.0\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"venv\",\n              \"kind\": \"shell\",\n              \"command\": \"cd {{SKILL_DIR}} && python3 -m venv .venv && .venv/bin/pip install openai-whisper requests python-dotenv\",\n              \"label\": \"Setup virtual env & install Whisper\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **OpenAI Whisper 语音转文字**（智能选模型）→ 有独显≥6GB 用 medium，<6GB 用 small；无独显用 base/tiny\n\n**Whisper 智能模型选择：**\n\n| 条件 | 模型 | 速度参考 |\n|:----:|:----:|:--------:|\n| **有 GPU，显存 ≥6GB** | medium | 高质量，~0.3x 实时 |\n| **有 GPU，显存 <6GB** | small | 平衡，~0.5x 实时 |\n| **无 GPU，视频 ≤30 分钟** | base | 质量与速度平衡 |\n| **无 GPU，视频 >30 分钟** | tiny | 避免等待过久 |\n\n- 自动检测 CUDA / nvidia-smi 获取显存\n- 音频自动转为 16kHz 单声道 WAV（统一格式）\n\n### 设计决策：为什么从 Qwen3-ASR 换回 Whisper？\n\nv4.x 引入了 Qwen3-ASR 作为本地转录引擎，v5.0 换回了 Whisper。核心原因：\n\n1. **架构差异巨大** — Qwen3-ASR 是 **LLM 做语音转文字**，把音频整段送进大语言模型做推理，1.7B 模型要完整加载 LLM 权重，显存占用大、推理慢。Whisper 是**纯语音识别模型**，音频切成 30 秒一段做声学特征识别，不需要 LLM 推理，速度快得多\n2. **资源占用** — Qwen3-ASR-1.7B 需要 4-6GB 显存且推理时间长（LLM 的 O(n²) attention），Whisper medium 虽然也要 ~5GB 显存但处理方式轻量，且有更小的模型可选（tiny 仅 ~39MB）\n3. **安装省心** — `pip install openai-whisper` 一行搞定，模型首次使用时自动下载。Qwen3-ASR 需从 HuggingFace 下载 2-5GB 权重，国内网络经常失败\n4. **够用即可** — 语音转文字在这个 skill 里是**三级降级的最后一环**，大多数视频走 CC 或 AI 字幕就完了。为这个兜底场景扛一个 LLM 级别的模型，不值当\n\n**⚠️ 关于摘要：** 设置了 `OPENAI_API_KEY` 时，转录完成后脚本会自动调用 `generate_summary.py` 生成 AI 摘要。未设置 API key 时 TXT 中保留占位符，可后续运行 `fill_summaries.py` 批量补全。\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → （可选）AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录bvid到已处理列表\n  → 生成转录报告CSV\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 批量转录（推荐）\n\n```bash\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n自动扫描收藏夹全部视频，逐个转录，支持：\n- **断点续传** — 中断后重跑自动跳过已处理视频\n- **自动重试** — 失败任务自动重试2次\n- **转录报告** — 生成 CSV 报告，含来源分布统计\n- **AI摘要** — 有 API key 时自动生成（三种模式统一调用 `scripts/generate_summary.py`）\n- **目录组织** — 按视频发布年月自动分目录存储\n- **标题校验** — 转录完成后自动对比B站最新标题，UP主改标题时自动修正\n\n### 首次设置\n\n#### 1. 安装依赖\n在技能目录下创建虚拟环境并安装依赖：\n```bash\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests python-dotenv\n```\n\n#### 2. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 3. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 4. 配置 AI 摘要（可选）\n```bash\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\ncp .env.example .env\n# 编辑 .env，填入你的 API Key\n```\n支持任何 OpenAI 兼容 API（DeepSeek、OpenCode Go、OpenRouter 等），详见 `.env.example`。\n编辑 `.env`，设置 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 5. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 6. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\n.venv/bin/python3 -c \"import whisper; print('Whisper OK')\"  # 必需\nopencc --version    # 可选，繁转简\n```\n\n#### 7. 配置定时任务（推荐每6小时扫描，有新内容则转录）\n```bash\nopenclaw cron add \\\n  --name bilibili-auto-transcribe \\\n  --every 21600000 \\\n  --message \"先用扫描脚本快速检查：cd ~/.openclaw/workspace/skills/bilibili-auto-transcript/scripts && .venv/bin/python3 bilibili_scanner.py。如果有新视频（NEW_ITEMS不为0），再用转录脚本：.venv/bin/python3 batch_transcribe.py。如果没新视频，直接说'无新内容'。如果有转完的视频，汇报成功/失败数量和标题。\"\n```\n\n#### 8. 补全遗漏摘要（推荐每12小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-fill-summaries \\\n  --every 43200000 \\\n  --message \"cd ~/.openclaw/workspace/skills/bilibili-auto-transcript && .venv/bin/python3 scripts/fill_summaries.py\"\n```\n确保所有转录视频都有AI摘要。即使即时转录时API调用失败，也会被自动补上。\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎（v5.0）。转录完自动写入 SQLite 数据库。\n`scripts/generate_summary.py` — AI摘要生成器，三种模式统一调用（转录完自动触发）。\n`scripts/transcript_db.py` — SQLite 数据库管理层（建表、写入、查询、更新摘要）。\n`scripts/fill_summaries.py` — 批量补摘要：扫描数据库中摘要为空的条目，逐个调API填充。适合 cronjob 定时运行。\n`scripts/logger.py` — 共享日志模块，所有脚本关键操作写入 `~/.openclaw/workspace/.auto-transcript-state/logs/`。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- `python-dotenv` — 加载 `.env` 文件（通过 `.venv/bin/pip install python-dotenv` 安装）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper medium（GPU加速）\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n（设置 OPENAI_API_KEY 后自动生成）\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径，自动按年/月分子目录 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个bvid） |\n| 转录数据库 | `bilibili-auto-transcript/.db/transcripts.db` | SQLite 数据库（bvid、标题、作者、转录来源、摘要等） |\n| 转录报告 | `~/.openclaw/workspace/.auto-transcript-state/transcript_report.csv` | 每次批量转录的详细报告 |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n| OPENAI_API_KEY | （可选） | 设置后自动生成AI摘要，支持 `.env` 文件 |\n| SUMMARY_API_URL | `https://api.openai.com/v1/chat/completions` | API地址，支持任何 OpenAI 兼容 API |\n| SUMMARY_API_MODEL | `gpt-4o-mini` | 模型名，如 `deepseek-v4-flash`、`gpt-4o-mini` 等 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### bvid\n- `bvid` / `bv_id` = BV号 → 构建转录URL、去重追踪用\n- `id` = avid（数字）→ 备用标识\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录；Cookie快过期时脚本会提示\n3. **Whisper 首次运行** — 首次使用时自动下载模型权重（tiny ~39MB / base ~74MB / small ~244MB / medium ~769MB），后续使用无需下载\n4. **Whisper 耗时** — GPU模式约实时 0.3x-0.5x 倍速，CPU模式约实时 0.5x-2x 倍速（依模型大小）\n5. **虚拟环境** — 所有 Python 脚本需在 `.venv` 中运行：`.venv/bin/python3 scripts/xxx.py`；`bilibili_transcript.sh` 会自动检测并提示安装\n6. **B站API ps上限20** — 超过需分页\n7. **AI摘要自动生成** — 设置 `OPENAI_API_KEY`（或 `.env` 文件），转录完成后自动生成结构化摘要；未设置则保留占位符待 Agent 手动处理\n8. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情\n9. **输出目录** — 自 v3.0 起按视频发布年月自动组织目录（如 `bilibili/2026/06/`）\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\n---\n\n## 📦 开源 & 交流\n\n- **GitHub**：[github.com/54Lynnn/bilibili-auto-transcript](https://github.com/54Lynnn/bilibili-auto-transcript)（⭐️ Star 支持）\n- **ClawHub**：[clawhub.ai/54lynnn/bilibili-auto-transcript](https://clawhub.ai/54lynnn/bilibili-auto-transcript)\n- **QQ 群**：120363664（欢迎扫码加入交流）\n\nFile v5.2.0:README.md\n\n# 📼 Bilibili Auto Transcript\n\n**B站视频自动转录 & 收藏夹扫描技能**\n\n三级降级策略：CC字幕 → B站AI字幕 → OpenAI Whisper 语音转文字，自动获取 B站视频的文字内容。\n\n## 功能\n\n- **三级字幕降级**：人工CC字幕 → AI字幕(9种语言) → Whisper 本地转录，逐级自动降级\n- **智能模型选择**：有GPU且显存≥6GB用medium，<6GB用small；无GPU用base/tiny（依视频时长）\n- **收藏夹扫描**：分页获取收藏夹所有视频，去重、断点续传\n- **批量转录**：自动遍历收藏夹新视频，支持重试、报告生成\n- **AI摘要**（可选）：设置 `OPENAI_API_KEY` 后自动生成结构化视频摘要\n- **目录组织**：按视频发布年月自动分目录存储\n\n## 设计决策\n\nv5.0 从 Qwen3-ASR 换回了 Whisper 作为本地语音转文字引擎。原因：\n\n- **架构差异** — Qwen3-ASR 是 **LLM 做语音转文字**，音频整段送进大语言模型推理，慢且吃显存。Whisper 是**纯语音识别模型**，30 秒一段做声学特征识别，不需要 LLM 推理，快得多\n- **资源占用** — Qwen3-ASR-1.7B 需要 4-6GB 显存且推理时间久，Whisper 有更轻量的模型可选（tiny 仅 39MB）\n- **安装省心** — `pip install openai-whisper` 一行搞定，模型自动下载。Qwen3-ASR 需从 HuggingFace 下 2-5GB 权重\n- **够用即可** — 语音转文字是三级降级的最后兜底，为这个场景扛一个 LLM 级别的模型不值当\n\n## 快速开始\n\n```bash\n# 1. 安装依赖（首次）\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests python-dotenv\n\n# 2. 手动转录单个视频\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n\n# 3. 批量转录收藏夹所有新视频\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n## 依赖\n\n- yt-dlp — 视频/字幕下载\n- ffmpeg — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- `python-dotenv` — 加载 `.env` 文件（通过 `.venv/bin/pip install python-dotenv` 安装）\n- opencc — 繁转简（可选）\n- chromium-browser — Cookie支持（B站AI字幕）\n\n## 配置\n\n1. `cp .env.example .env`，编辑 `.env` 设置 `FAV_MEDIA_ID`（收藏夹ID）和 `OPENAI_API_KEY`（AI摘要）\n2. 用 chromium-browser 登录 bilibili.com 获取 Cookie\n3. 支持任何 OpenAI 兼容 API（DeepSeek、OpenCode Go、OpenRouter 等）\n\n## 项目结构\n\n```\nbilibili-auto-transcript/\n├── SKILL.md                    # Skill 元数据\n├── .env                        # API密钥（不提交git）\n├── .env.example                # 配置模板（提交git，供朋友参考）\n├── .db/                        # SQLite 数据库（不提交git）\n│   └── transcripts.db          # 转录记录+摘要数据库\n├── scripts/\n│   ├── bilibili_scanner.py     # 收藏夹扫描\n│   ├── bilibili_transcript.sh  # 核心转录引擎（v5.0，Whisper）\n│   ├── generate_summary.py     # AI摘要生成器（三种模式统一调用）\n│   ├── transcript_db.py        # SQLite 数据库管理层\n│   ├── fill_summaries.py       # 批量补摘要（cronjob推荐）\n│   ├── migrate_to_db.py        # 旧TXT迁移到数据库\n│   ├── logger.py               # 共享日志模块\n│   └── batch_transcribe.py     # 批量转录调度\n└── references/\n    ├── architecture.md         # 架构说明\n    └── bilibili-fav-api.md     # B站API参考\n```\n\n## 许可\n\nMIT\n\nFile v5.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"5.2.0\",\n  \"publishedAt\": 1781281511501\n}\n\nFile v5.2.0:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- OpenClaw 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.openclaw/workspace/skills/bilibili-auto-transcript/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v5.2.0:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v5.2.0:skill-card.md\n\n## Description:\n\nB站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[54lynnn](https://clawhub.ai/user/54lynnn)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and Bilibili users use this skill to transcribe individual Bilibili videos or monitor a Bilibili favorites folder for new videos, generating local transcript files, reports, and optional AI summaries.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can use browser session cookies for Bilibili access.\n\nMitigation: Run it in a dedicated or low-privilege environment and avoid exposing broad browser session cookies.\n\nRisk: API keys and summary provider settings may be stored in a local .env file.\n\nMitigation: Keep .env private, restrict file permissions, use a limited API key with spending controls, and set SUMMARY_API_URL only to a trusted HTTPS provider.\n\nRisk: Transcripts and summaries are retained locally and may be sent to an external AI summary API when enabled.\n\nMitigation: Review content sensitivity before enabling summaries and confirm retention expectations for the local transcript database and output directory.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/54lynnn/skills/bilibili-auto-transcript)\n- [Architecture Reference](references/architecture.md)\n- [Bilibili Favorites API Reference](references/bilibili-fav-api.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands, local text transcript files, SQLite records, and CSV reports]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May retain transcripts and summaries locally and may call a configured OpenAI-compatible summary API when enabled.]\n\n## Skill Version(s):\n\n5.2.0 (source: server evidence and frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v5.0.1: 10 files, 24057 bytes\n\nFiles: README.md (3074b), references/architecture.md (2641b), references/bilibili-fav-api.md (3116b), scripts/batch_transcribe.py (12042b), scripts/bilibili_scanner.py (3250b), scripts/bilibili_transcript.sh (14088b), scripts/qwen3_transcribe.py (3905b), skill-card.md (2455b), SKILL.md (9750b), _meta.json (143b)\n\nFile v5.0.1:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"5.0.0\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"venv\",\n              \"kind\": \"shell\",\n              \"command\": \"cd {{SKILL_DIR}} && python3 -m venv .venv && .venv/bin/pip install openai-whisper requests\",\n              \"label\": \"Setup virtual env & install Whisper\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **OpenAI Whisper 语音转文字**（智能选模型）→ 有独显≥6GB 用 medium，<6GB 用 small；无独显用 base/tiny\n\n**Whisper 智能模型选择：**\n\n| 条件 | 模型 | 速度参考 |\n|:----:|:----:|:--------:|\n| **有 GPU，显存 ≥6GB** | medium | 高质量，~0.3x 实时 |\n| **有 GPU，显存 <6GB** | small | 平衡，~0.5x 实时 |\n| **无 GPU，视频 ≤30 分钟** | base | 质量与速度平衡 |\n| **无 GPU，视频 >30 分钟** | tiny | 避免等待过久 |\n\n- 自动检测 CUDA / nvidia-smi 获取显存\n- 音频自动转为 16kHz 单声道 WAV（统一格式）\n\n### 设计决策：为什么从 Qwen3-ASR 换回 Whisper？\n\nv4.x 引入了 Qwen3-ASR 作为本地转录引擎，v5.0 换回了 Whisper。核心原因：\n\n1. **架构差异巨大** — Qwen3-ASR 是 **LLM 做语音转文字**，把音频整段送进大语言模型做推理，1.7B 模型要完整加载 LLM 权重，显存占用大、推理慢。Whisper 是**纯语音识别模型**，音频切成 30 秒一段做声学特征识别，不需要 LLM 推理，速度快得多\n2. **资源占用** — Qwen3-ASR-1.7B 需要 4-6GB 显存且推理时间长（LLM 的 O(n²) attention），Whisper medium 虽然也要 ~5GB 显存但处理方式轻量，且有更小的模型可选（tiny 仅 ~39MB）\n3. **安装省心** — `pip install openai-whisper` 一行搞定，模型首次使用时自动下载。Qwen3-ASR 需从 HuggingFace 下载 2-5GB 权重，国内网络经常失败\n4. **够用即可** — 语音转文字在这个 skill 里是**三级降级的最后一环**，大多数视频走 CC 或 AI 字幕就完了。为这个兜底场景扛一个 LLM 级别的模型，不值当\n5. **Qwen3-ASR 保留可选** — 如果你确实需要更高的中文准确率（LLM 上下文理解加成）、有足够的 GPU 显存，`scripts/qwen3_transcribe.py` 还在，可手动替换\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → （可选）AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 生成转录报告CSV\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 批量转录（推荐）\n\n```bash\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n自动扫描收藏夹全部视频，逐个转录，支持：\n- **断点续传** — 中断后重跑自动跳过已处理视频\n- **自动重试** — 失败任务自动重试2次\n- **转录报告** — 生成 CSV 报告，含来源分布统计\n- **AI摘要** — 可选，设置环境变量 `OPENAI_API_KEY` 即可自动生成摘要\n- **目录组织** — 按视频发布年月自动分目录存储\n\n### 首次设置\n\n#### 1. 安装依赖\n在技能目录下创建虚拟环境并安装依赖：\n```bash\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests\n```\n\n#### 2. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 3. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 4. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 5. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 6. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\n.venv/bin/python3 -c \"import whisper; print('Whisper OK')\"  # 必需\nopencc --version    # 可选，繁转简\n```\n\n#### 7. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：cd ~/.openclaw/workspace/skills/bilibili-auto-transcript && .venv/bin/python3 scripts/bilibili_scanner.py\"\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎（v5.0）。\n`scripts/qwen3_transcribe.py` — （保留）Qwen3-ASR 可选替代，如需使用可手动替换。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper medium（GPU加速）\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n（设置 OPENAI_API_KEY 后自动生成）\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径，自动按年/月分子目录 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 转录报告 | `~/.openclaw/workspace/.auto-transcript-state/transcript_report.csv` | 每次批量转录的详细报告 |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n| OPENAI_API_KEY | （可选） | 设置后自动生成AI摘要 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录；Cookie快过期时脚本会提示\n3. **Whisper 首次运行** — 首次使用时自动下载模型权重（tiny ~39MB / base ~74MB / small ~244MB / medium ~769MB），后续使用无需下载\n4. **Whisper 耗时** — GPU模式约实时 0.3x-0.5x 倍速，CPU模式约实时 0.5x-2x 倍速（依模型大小）\n5. **虚拟环境** — 所有 Python 脚本需在 `.venv` 中运行：`.venv/bin/python3 scripts/xxx.py`；`bilibili_transcript.sh` 会自动检测并提示安装\n6. **B站API ps上限20** — 超过需分页\n7. **摘要占位符必须替换** — 设置 `OPENAI_API_KEY` 环境变量可自动生成摘要\n8. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情\n9. **输出目录** — 自 v3.0 起按视频发布年月自动组织目录（如 `bilibili/2026/06/`）\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\n---\n\n## 📦 开源 & 交流\n\n- **GitHub**：[github.com/54Lynnn/bilibili-auto-transcript](https://github.com/54Lynnn/bilibili-auto-transcript)（⭐️ Star 支持）\n- **ClawHub**：[clawhub.ai/54lynnn/bilibili-auto-transcript](https://clawhub.ai/54lynnn/bilibili-auto-transcript)\n- **QQ 群**：120363664（欢迎扫码加入交流）\n\nFile v5.0.1:README.md\n\n# 📼 Bilibili Auto Transcript\n\n**B站视频自动转录 & 收藏夹扫描技能**\n\n三级降级策略：CC字幕 → B站AI字幕 → OpenAI Whisper 语音转文字，自动获取 B站视频的文字内容。\n\n## 功能\n\n- **三级字幕降级**：人工CC字幕 → AI字幕(9种语言) → Whisper 本地转录，逐级自动降级\n- **智能模型选择**：有GPU且显存≥6GB用medium，<6GB用small；无GPU用base/tiny（依视频时长）\n- **收藏夹扫描**：分页获取收藏夹所有视频，去重、断点续传\n- **批量转录**：自动遍历收藏夹新视频，支持重试、报告生成\n- **AI摘要**（可选）：设置 `OPENAI_API_KEY` 后自动生成结构化视频摘要\n- **目录组织**：按视频发布年月自动分目录存储\n\n## 设计决策\n\nv5.0 从 Qwen3-ASR 换回了 Whisper 作为本地语音转文字引擎。原因：\n\n- **架构差异** — Qwen3-ASR 是 **LLM 做语音转文字**，音频整段送进大语言模型推理，慢且吃显存。Whisper 是**纯语音识别模型**，30 秒一段做声学特征识别，不需要 LLM 推理，快得多\n- **资源占用** — Qwen3-ASR-1.7B 需要 4-6GB 显存且推理时间久，Whisper 有更轻量的模型可选（tiny 仅 39MB）\n- **安装省心** — `pip install openai-whisper` 一行搞定，模型自动下载。Qwen3-ASR 需从 HuggingFace 下 2-5GB 权重\n- **够用即可** — 语音转文字是三级降级的最后兜底，为这个场景扛一个 LLM 级别的模型不值当\n- **Qwen3-ASR 保留可选** — `scripts/qwen3_transcribe.py` 还在，需要时可手动替换\n\n## 快速开始\n\n```bash\n# 1. 安装依赖（首次）\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests\n\n# 2. 手动转录单个视频\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n\n# 3. 批量转录收藏夹所有新视频\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n## 依赖\n\n- yt-dlp — 视频/字幕下载\n- ffmpeg — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- opencc — 繁转简（可选）\n- chromium-browser — Cookie支持（B站AI字幕）\n\n## 配置\n\n1. 编辑 `scripts/bilibili_scanner.py`，设置 `FAV_MEDIA_ID` 为你的B站收藏夹ID\n2. 用 chromium-browser 登录 bilibili.com 获取 Cookie\n3. （可选）设置 `OPENAI_API_KEY` 环境变量开启自动摘要\n\n## 项目结构\n\n```\nbilibili-auto-transcript/\n├── SKILL.md                    # Skill 元数据\n├── scripts/\n│   ├── bilibili_scanner.py     # 收藏夹扫描\n│   ├── bilibili_transcript.sh  # 核心转录引擎（v5.0，Whisper）\n│   ├── qwen3_transcribe.py     # （保留）Qwen3-ASR 可选替代\n│   └── batch_transcribe.py     # 批量转录调度\n└── references/\n    ├── architecture.md         # 架构说明\n    └── bilibili-fav-api.md     # B站API参考\n```\n\n## 许可\n\nMIT\n\nFile v5.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"5.0.1\",\n  \"publishedAt\": 1780834720725\n}\n\nFile v5.0.1:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- OpenClaw 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.openclaw/workspace/skills/bilibili-auto-transcript/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v5.0.1:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v5.0.1:skill-card.md\n\n## Description: <br>\nTranscribes Bilibili videos and scans Bilibili favorites using a fallback chain of CC subtitles, Bilibili AI subtitles, and Whisper, with optional AI-generated summaries. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and external users use this skill to turn Bilibili videos or favorite-list updates into transcript files, optional summaries, and processing reports. It supports both manual single-video transcription and scheduled scanning of public Bilibili favorites. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can use browser login sessions for Bilibili access. <br>\nMitigation: Use a dedicated browser profile or exported cookie file, avoid shared temporary cookie paths, and remove cookie files after use. <br>\nRisk: Transcript text can be sent to an external AI provider when summary generation is enabled. <br>\nMitigation: Only set OPENAI_API_KEY or SUMMARY_API_URL if sending transcript text to that provider is acceptable. <br>\nRisk: Scheduled scanning may continue running in the background after setup. <br>\nMitigation: Review configured output and state paths, and remove the cron job when ongoing scans are no longer wanted. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [Architecture reference](references/architecture.md) <br>\n- [Bilibili favorites API reference](references/bilibili-fav-api.md) <br>\n- [Bilibili favorites API endpoint](https://api.bilibili.com/x/v3/fav/resource/list) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Files, Shell commands, Configuration guidance] <br>\n**Output Format:** [Transcript text files, CSV reports, and Markdown guidance with shell commands] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May create local transcript, report, and state files; optional summaries require an API key.] <br>\n\n## Skill Version(s): <br>\n5.0.1 (source: release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v5.0.0: 10 files, 23259 bytes\n\nFiles: README.md (2249b), references/architecture.md (2641b), references/bilibili-fav-api.md (3116b), scripts/batch_transcribe.py (12042b), scripts/bilibili_scanner.py (3250b), scripts/bilibili_transcript.sh (14088b), scripts/qwen3_transcribe.py (3905b), skill-card.md (2872b), SKILL.md (8477b), _meta.json (143b)\n\nFile v5.0.0:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"5.0.0\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"venv\",\n              \"kind\": \"shell\",\n              \"command\": \"cd {{SKILL_DIR}} && python3 -m venv .venv && .venv/bin/pip install openai-whisper requests\",\n              \"label\": \"Setup virtual env & install Whisper\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **OpenAI Whisper 语音转文字**（智能选模型）→ 有独显≥6GB 用 medium，<6GB 用 small；无独显用 base/tiny\n\n**Whisper 智能模型选择：**\n\n| 条件 | 模型 | 速度参考 |\n|:----:|:----:|:--------:|\n| **有 GPU，显存 ≥6GB** | medium | 高质量，~0.3x 实时 |\n| **有 GPU，显存 <6GB** | small | 平衡，~0.5x 实时 |\n| **无 GPU，视频 ≤30 分钟** | base | 质量与速度平衡 |\n| **无 GPU，视频 >30 分钟** | tiny | 避免等待过久 |\n\n- 自动检测 CUDA / nvidia-smi 获取显存\n- 音频自动转为 16kHz 单声道 WAV（统一格式）\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → （可选）AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 生成转录报告CSV\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 批量转录（推荐）\n\n```bash\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n自动扫描收藏夹全部视频，逐个转录，支持：\n- **断点续传** — 中断后重跑自动跳过已处理视频\n- **自动重试** — 失败任务自动重试2次\n- **转录报告** — 生成 CSV 报告，含来源分布统计\n- **AI摘要** — 可选，设置环境变量 `OPENAI_API_KEY` 即可自动生成摘要\n- **目录组织** — 按视频发布年月自动分目录存储\n\n### 首次设置\n\n#### 1. 安装依赖\n在技能目录下创建虚拟环境并安装依赖：\n```bash\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests\n```\n\n#### 2. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 3. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 4. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 5. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 6. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\n.venv/bin/python3 -c \"import whisper; print('Whisper OK')\"  # 必需\nopencc --version    # 可选，繁转简\n```\n\n#### 7. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：cd ~/.openclaw/workspace/skills/bilibili-auto-transcript && .venv/bin/python3 scripts/bilibili_scanner.py\"\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎（v5.0）。\n`scripts/qwen3_transcribe.py` — （保留）Qwen3-ASR 可选替代，如需使用可手动替换。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper medium（GPU加速）\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n（设置 OPENAI_API_KEY 后自动生成）\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径，自动按年/月分子目录 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 转录报告 | `~/.openclaw/workspace/.auto-transcript-state/transcript_report.csv` | 每次批量转录的详细报告 |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n| OPENAI_API_KEY | （可选） | 设置后自动生成AI摘要 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录；Cookie快过期时脚本会提示\n3. **Whisper 首次运行** — 首次使用时自动下载模型权重（tiny ~39MB / base ~74MB / small ~244MB / medium ~769MB），后续使用无需下载\n4. **Whisper 耗时** — GPU模式约实时 0.3x-0.5x 倍速，CPU模式约实时 0.5x-2x 倍速（依模型大小）\n5. **虚拟环境** — 所有 Python 脚本需在 `.venv` 中运行：`.venv/bin/python3 scripts/xxx.py`；`bilibili_transcript.sh` 会自动检测并提示安装\n6. **B站API ps上限20** — 超过需分页\n7. **摘要占位符必须替换** — 设置 `OPENAI_API_KEY` 环境变量可自动生成摘要\n8. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情\n9. **输出目录** — 自 v3.0 起按视频发布年月自动组织目录（如 `bilibili/2026/06/`）\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\n---\n\n## 📦 开源 & 交流\n\n- **GitHub**：[github.com/54Lynnn/bilibili-auto-transcript](https://github.com/54Lynnn/bilibili-auto-transcript)（⭐️ Star 支持）\n- **ClawHub**：[clawhub.ai/54lynnn/bilibili-auto-transcript](https://clawhub.ai/54lynnn/bilibili-auto-transcript)\n- **QQ 群**：120363664（欢迎扫码加入交流）\n\nFile v5.0.0:README.md\n\n# 📼 Bilibili Auto Transcript\n\n**B站视频自动转录 & 收藏夹扫描技能**\n\n三级降级策略：CC字幕 → B站AI字幕 → OpenAI Whisper 语音转文字，自动获取 B站视频的文字内容。\n\n## 功能\n\n- **三级字幕降级**：人工CC字幕 → AI字幕(9种语言) → Whisper 本地转录，逐级自动降级\n- **智能模型选择**：有GPU且显存≥6GB用medium，<6GB用small；无GPU用base/tiny（依视频时长）\n- **收藏夹扫描**：分页获取收藏夹所有视频，去重、断点续传\n- **批量转录**：自动遍历收藏夹新视频，支持重试、报告生成\n- **AI摘要**（可选）：设置 `OPENAI_API_KEY` 后自动生成结构化视频摘要\n- **目录组织**：按视频发布年月自动分目录存储\n\n## 快速开始\n\n```bash\n# 1. 安装依赖（首次）\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests\n\n# 2. 手动转录单个视频\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n\n# 3. 批量转录收藏夹所有新视频\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n## 依赖\n\n- yt-dlp — 视频/字幕下载\n- ffmpeg — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- opencc — 繁转简（可选）\n- chromium-browser — Cookie支持（B站AI字幕）\n\n## 配置\n\n1. 编辑 `scripts/bilibili_scanner.py`，设置 `FAV_MEDIA_ID` 为你的B站收藏夹ID\n2. 用 chromium-browser 登录 bilibili.com 获取 Cookie\n3. （可选）设置 `OPENAI_API_KEY` 环境变量开启自动摘要\n\n## 项目结构\n\n```\nbilibili-auto-transcript/\n├── SKILL.md                    # Skill 元数据\n├── scripts/\n│   ├── bilibili_scanner.py     # 收藏夹扫描\n│   ├── bilibili_transcript.sh  # 核心转录引擎（v5.0，Whisper）\n│   ├── qwen3_transcribe.py     # （保留）Qwen3-ASR 可选替代\n│   └── batch_transcribe.py     # 批量转录调度\n└── references/\n    ├── architecture.md         # 架构说明\n    └── bilibili-fav-api.md     # B站API参考\n```\n\n## 许可\n\nMIT\n\nFile v5.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"5.0.0\",\n  \"publishedAt\": 1780558422343\n}\n\nFile v5.0.0:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- OpenClaw 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.openclaw/workspace/skills/bilibili-auto-transcript/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v5.0.0:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v5.0.0:skill-card.md\n\n## Description: <br>\nB站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。 <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to transcribe individual Bilibili videos or periodically scan a Bilibili favorites list, save transcript files, and optionally generate structured summaries. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can read Bilibili login cookies from local browser profiles to access subtitles and videos. <br>\nMitigation: Run it only with browser profiles and Bilibili accounts you intend to expose to the skill, and avoid private or sensitive videos unless cookie access is acceptable. <br>\nRisk: When OPENAI_API_KEY is set, transcript text can be sent to an external summary API. <br>\nMitigation: Leave OPENAI_API_KEY unset for local-only transcription, or configure summaries only for content approved for external processing. <br>\nRisk: Transcript content and processing state are written to local workspace directories. <br>\nMitigation: Review access controls and retention for ~/workspace/knowledge/bilibili and ~/.openclaw/workspace/.auto-transcript-state before processing sensitive material. <br>\nRisk: Automatic batch processing downloads media, invokes shell/Python tools, and may take significant local compute time for Whisper fallback. <br>\nMitigation: Review the configured favorites list, dependencies, and output directory before enabling scheduled or batch runs. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [Architecture Reference](references/architecture.md) <br>\n- [Bilibili Favorites API Reference](references/bilibili-fav-api.md) <br>\n- [Bilibili Favorites API Endpoint](https://api.bilibili.com/x/v3/fav/resource/list) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Transcript text files with metadata and summary sections, CSV batch reports, terminal status output, and setup guidance in Markdown.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes transcripts under ~/workspace/knowledge/bilibili and batch state/report files under ~/.openclaw/workspace/.auto-transcript-state.] <br>\n\n## Skill Version(s): <br>\n5.0.0 (source: frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v4.0.0: 10 files, 23075 bytes\n\nFiles: README.md (2249b), references/architecture.md (2641b), references/bilibili-fav-api.md (3116b), scripts/batch_transcribe.py (12042b), scripts/bilibili_scanner.py (3250b), scripts/bilibili_transcript.sh (14088b), scripts/qwen3_transcribe.py (3905b), skill-card.md (2663b), SKILL.md (8477b), _meta.json (143b)\n\nFile v4.0.0:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"5.0.0\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"venv\",\n              \"kind\": \"shell\",\n              \"command\": \"cd {{SKILL_DIR}} && python3 -m venv .venv && .venv/bin/pip install openai-whisper requests\",\n              \"label\": \"Setup virtual env & install Whisper\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **OpenAI Whisper 语音转文字**（智能选模型）→ 有独显≥6GB 用 medium，<6GB 用 small；无独显用 base/tiny\n\n**Whisper 智能模型选择：**\n\n| 条件 | 模型 | 速度参考 |\n|:----:|:----:|:--------:|\n| **有 GPU，显存 ≥6GB** | medium | 高质量，~0.3x 实时 |\n| **有 GPU，显存 <6GB** | small | 平衡，~0.5x 实时 |\n| **无 GPU，视频 ≤30 分钟** | base | 质量与速度平衡 |\n| **无 GPU，视频 >30 分钟** | tiny | 避免等待过久 |\n\n- 自动检测 CUDA / nvidia-smi 获取显存\n- 音频自动转为 16kHz 单声道 WAV（统一格式）\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → （可选）AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 生成转录报告CSV\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 批量转录（推荐）\n\n```bash\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n自动扫描收藏夹全部视频，逐个转录，支持：\n- **断点续传** — 中断后重跑自动跳过已处理视频\n- **自动重试** — 失败任务自动重试2次\n- **转录报告** — 生成 CSV 报告，含来源分布统计\n- **AI摘要** — 可选，设置环境变量 `OPENAI_API_KEY` 即可自动生成摘要\n- **目录组织** — 按视频发布年月自动分目录存储\n\n### 首次设置\n\n#### 1. 安装依赖\n在技能目录下创建虚拟环境并安装依赖：\n```bash\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests\n```\n\n#### 2. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 3. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 4. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 5. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 6. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\n.venv/bin/python3 -c \"import whisper; print('Whisper OK')\"  # 必需\nopencc --version    # 可选，繁转简\n```\n\n#### 7. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：cd ~/.openclaw/workspace/skills/bilibili-auto-transcript && .venv/bin/python3 scripts/bilibili_scanner.py\"\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎（v5.0）。\n`scripts/qwen3_transcribe.py` — （保留）Qwen3-ASR 可选替代，如需使用可手动替换。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper medium（GPU加速）\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n（设置 OPENAI_API_KEY 后自动生成）\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径，自动按年/月分子目录 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 转录报告 | `~/.openclaw/workspace/.auto-transcript-state/transcript_report.csv` | 每次批量转录的详细报告 |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n| OPENAI_API_KEY | （可选） | 设置后自动生成AI摘要 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录；Cookie快过期时脚本会提示\n3. **Whisper 首次运行** — 首次使用时自动下载模型权重（tiny ~39MB / base ~74MB / small ~244MB / medium ~769MB），后续使用无需下载\n4. **Whisper 耗时** — GPU模式约实时 0.3x-0.5x 倍速，CPU模式约实时 0.5x-2x 倍速（依模型大小）\n5. **虚拟环境** — 所有 Python 脚本需在 `.venv` 中运行：`.venv/bin/python3 scripts/xxx.py`；`bilibili_transcript.sh` 会自动检测并提示安装\n6. **B站API ps上限20** — 超过需分页\n7. **摘要占位符必须替换** — 设置 `OPENAI_API_KEY` 环境变量可自动生成摘要\n8. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情\n9. **输出目录** — 自 v3.0 起按视频发布年月自动组织目录（如 `bilibili/2026/06/`）\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\n---\n\n## 📦 开源 & 交流\n\n- **GitHub**：[github.com/54Lynnn/bilibili-auto-transcript](https://github.com/54Lynnn/bilibili-auto-transcript)（⭐️ Star 支持）\n- **ClawHub**：[clawhub.ai/54lynnn/bilibili-auto-transcript](https://clawhub.ai/54lynnn/bilibili-auto-transcript)\n- **QQ 群**：120363664（欢迎扫码加入交流）\n\nFile v4.0.0:README.md\n\n# 📼 Bilibili Auto Transcript\n\n**B站视频自动转录 & 收藏夹扫描技能**\n\n三级降级策略：CC字幕 → B站AI字幕 → OpenAI Whisper 语音转文字，自动获取 B站视频的文字内容。\n\n## 功能\n\n- **三级字幕降级**：人工CC字幕 → AI字幕(9种语言) → Whisper 本地转录，逐级自动降级\n- **智能模型选择**：有GPU且显存≥6GB用medium，<6GB用small；无GPU用base/tiny（依视频时长）\n- **收藏夹扫描**：分页获取收藏夹所有视频，去重、断点续传\n- **批量转录**：自动遍历收藏夹新视频，支持重试、报告生成\n- **AI摘要**（可选）：设置 `OPENAI_API_KEY` 后自动生成结构化视频摘要\n- **目录组织**：按视频发布年月自动分目录存储\n\n## 快速开始\n\n```bash\n# 1. 安装依赖（首次）\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests\n\n# 2. 手动转录单个视频\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n\n# 3. 批量转录收藏夹所有新视频\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n## 依赖\n\n- yt-dlp — 视频/字幕下载\n- ffmpeg — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- opencc — 繁转简（可选）\n- chromium-browser — Cookie支持（B站AI字幕）\n\n## 配置\n\n1. 编辑 `scripts/bilibili_scanner.py`，设置 `FAV_MEDIA_ID` 为你的B站收藏夹ID\n2. 用 chromium-browser 登录 bilibili.com 获取 Cookie\n3. （可选）设置 `OPENAI_API_KEY` 环境变量开启自动摘要\n\n## 项目结构\n\n```\nbilibili-auto-transcript/\n├── SKILL.md                    # Skill 元数据\n├── scripts/\n│   ├── bilibili_scanner.py     # 收藏夹扫描\n│   ├── bilibili_transcript.sh  # 核心转录引擎（v5.0，Whisper）\n│   ├── qwen3_transcribe.py     # （保留）Qwen3-ASR 可选替代\n│   └── batch_transcribe.py     # 批量转录调度\n└── references/\n    ├── architecture.md         # 架构说明\n    └── bilibili-fav-api.md     # B站API参考\n```\n\n## 许可\n\nMIT\n\nFile v4.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"4.0.0\",\n  \"publishedAt\": 1780558381263\n}\n\nFile v4.0.0:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- OpenClaw 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.openclaw/workspace/skills/bilibili-auto-transcript/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v4.0.0:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v4.0.0:skill-card.md\n\n## Description: <br>\nTranscribes Bilibili videos and scans favorite folders using CC subtitles, Bilibili AI subtitles, Whisper fallback transcription, and optional AI summaries. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and external users use this skill to turn Bilibili videos or new items in a favorite folder into local transcript files with metadata, optional summaries, and batch-processing reports. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may read browser login cookies to access Bilibili subtitles or private content. <br>\nMitigation: Use a dedicated browser profile when possible, run the skill only with accounts and content you control, and avoid private collections unless access is required. <br>\nRisk: Optional AI summary generation can send transcript text to an external LLM service. <br>\nMitigation: Leave OPENAI_API_KEY and SUMMARY_API_URL unset unless external processing is acceptable for the transcript content. <br>\nRisk: Transcript generation can create or overwrite local transcript files and maintain processed-video state. <br>\nMitigation: Review the output and state directories before running batch mode, and back up any transcript directory that contains files you need to preserve. <br>\n\n\n## Reference(s): <br>\n- [ClawHub release page](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [Architecture reference](references/architecture.md) <br>\n- [Bilibili favorite-folder API reference](references/bilibili-fav-api.md) <br>\n- [Bilibili favorite-folder API endpoint](https://api.bilibili.com/x/v3/fav/resource/list) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Files, Shell commands, Configuration] <br>\n**Output Format:** [Plain-text transcript files with metadata and summary sections, console status output, and CSV batch reports.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Transcript files are written under a local Bilibili knowledge directory organized by publication year and month; batch mode maintains local processed-video state.] <br>\n\n## Skill Version(s): <br>\n4.0.0 (source: server release metadata; artifact frontmatter reports 5.0.0) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v3.5.1: 10 files, 22457 bytes\n\nFiles: README.md (2097b), references/architecture.md (2641b), references/bilibili-fav-api.md (3116b), scripts/batch_transcribe.py (11934b), scripts/bilibili_scanner.py (3246b), scripts/bilibili_transcript.sh (12178b), scripts/qwen3_transcribe.py (3790b), skill-card.md (2776b), SKILL.md (8520b), _meta.json (143b)\n\nFile v3.5.1:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"4.0.0\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Qwen3-ASR），自动选模型（1.7B GPU / 0.6B CPU），AI摘要生成。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"venv\",\n              \"kind\": \"shell\",\n              \"command\": \"cd {{SKILL_DIR}} && python3 -m venv .venv && .venv/bin/pip install qwen-asr requests\",\n              \"label\": \"Setup virtual env & install Qwen3-ASR\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **Qwen3-ASR 语音转文字**（智能选模型）→ 有独显用 1.7B，无独显用 0.6B\n\n**Qwen3-ASR 智能模型选择：**\n\n| 条件 | 模型 | 中文 CER | 显存需求 |\n|:----:|:----:|:--------:|:-------:|\n| **有 NVIDIA/AMD GPU** | Qwen3-ASR-1.7B | ~3.8% | 4-6 GB |\n| **有 Apple Silicon (M1-M4)** | Qwen3-ASR-1.7B (MLX) | ~3.8% | 3-4 GB |\n| **无独显 (CPU)** | Qwen3-ASR-0.6B | ~5-7% | 2 GB 或不需 |\n| **对比: Whisper medium** | (旧版) | ~12% | 5-6 GB |\n\n- 自动检测 CUDA / ROCm / Apple MPS / CPU\n- 同一模型权重，自动切换计算后端\n- 音频自动转为 16kHz 单声道 WAV（统一格式）\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → （可选）AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 生成转录报告CSV\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 批量转录（推荐）\n\n```bash\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n自动扫描收藏夹全部视频，逐个转录，支持：\n- **断点续传** — 中断后重跑自动跳过已处理视频\n- **自动重试** — 失败任务自动重试2次\n- **转录报告** — 生成 CSV 报告，含来源分布统计\n- **AI摘要** — 可选，设置环境变量 `OPENAI_API_KEY` 即可自动生成摘要\n- **目录组织** — 按视频发布年月自动分目录存储\n\n### 首次设置\n\n#### 1. 安装依赖\n在技能目录下创建虚拟环境并安装依赖：\n```bash\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install qwen-asr requests\n```\n\n#### 2. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 3. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 4. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 5. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 6. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\n.venv/bin/python3 -c \"from qwen_asr import Qwen3ASRModel; print('Qwen3-ASR OK')\"  # 必需\nopencc --version    # 可选，繁转简\n```\n\n#### 7. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：cd ~/.openclaw/workspace/skills/bilibili-auto-transcript && .venv/bin/python3 scripts/bilibili_scanner.py\"\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎（v4.0）。\n`scripts/qwen3_transcribe.py` — Qwen3-ASR 转录辅助脚本（自动设备检测+模型选择）。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理\n- `.venv/bin/python3` — 技能虚拟环境，内含 `qwen-asr`（语音转文字）、`requests`（HTTP请求）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Qwen3-ASR-1.7B（GPU加速）/ Qwen3-ASR-0.6B\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n（设置 OPENAI_API_KEY 后自动生成）\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径，自动按年/月分子目录 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 转录报告 | `~/.openclaw/workspace/.auto-transcript-state/transcript_report.csv` | 每次批量转录的详细报告 |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n| OPENAI_API_KEY | （可选） | 设置后自动生成AI摘要 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录；Cookie快过期时脚本会提示\n3. **Qwen3-ASR 首次运行** — 首次使用时会自动从 HuggingFace 下载模型权重（0.6B ~2GB / 1.7B ~5GB），后续使用无需下载\n4. **Qwen3-ASR 耗时** — GPU模式（1.7B）约实时 0.3x 倍速，CPU模式（0.6B）约实时 0.4x 倍速\n5. **虚拟环境** — 所有 Python 脚本需在 `.venv` 中运行：`.venv/bin/python3 scripts/xxx.py`；`bilibili_transcript.sh` 会自动检测并提示安装\n6. **B站API ps上限20** — 超过需分页\n7. **摘要占位符必须替换** — 设置 `OPENAI_API_KEY` 环境变量可自动生成摘要\n8. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情\n9. **输出目录** — 自 v3.0 起按视频发布年月自动组织目录（如 `bilibili/2026/06/`）\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\n---\n\n## 📦 开源 & 交流\n\n- **GitHub**：[github.com/54Lynnn/bilibili-auto-transcript](https://github.com/54Lynnn/bilibili-auto-transcript)（⭐️ Star 支持）\n- **ClawHub**：[clawhub.ai/54lynnn/bilibili-auto-transcript](https://clawhub.ai/54lynnn/bilibili-auto-transcript)\n- **QQ 群**：120363664（欢迎扫码加入交流）\n\nFile v3.5.1:README.md\n\n# 📼 Bilibili Auto Transcript\n\n**B站视频自动转录 & 收藏夹扫描技能**\n\n三级降级策略：CC字幕 → B站AI字幕 → Qwen3-ASR 语音转文字，自动获取 B站视频的文字内容。\n\n## 功能\n\n- **三级字幕降级**：人工CC字幕 → AI字幕(9种语言) → Qwen3-ASR 本地转录，逐级自动降级\n- **智能模型选择**：有独显自动用 Qwen3-ASR-1.7B，无独显自动用 Qwen3-ASR-0.6B\n- **收藏夹扫描**：分页获取收藏夹所有视频，去重、断点续传\n- **批量转录**：自动遍历收藏夹新视频，支持重试、报告生成\n- **AI摘要**（可选）：设置 `OPENAI_API_KEY` 后自动生成结构化视频摘要\n- **目录组织**：按视频发布年月自动分目录存储\n\n## 快速开始\n\n```bash\n# 1. 安装依赖（首次）\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install qwen-asr requests\n\n# 2. 手动转录单个视频\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n\n# 3. 批量转录收藏夹所有新视频\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n## 依赖\n\n- yt-dlp — 视频/字幕下载\n- ffmpeg — 音频处理\n- `.venv/` — 技能虚拟环境（内含 qwen-asr、requests）\n- opencc — 繁转简（可选）\n- chromium-browser — Cookie支持（B站AI字幕）\n\n## 配置\n\n1. 编辑 `scripts/bilibili_scanner.py`，设置 `FAV_MEDIA_ID` 为你的B站收藏夹ID\n2. 用 chromium-browser 登录 bilibili.com 获取 Cookie\n3. （可选）设置 `OPENAI_API_KEY` 环境变量开启自动摘要\n\n## 项目结构\n\n```\nbilibili-auto-transcript/\n├── SKILL.md                    # Skill 元数据\n├── scripts/\n│   ├── bilibili_scanner.py     # 收藏夹扫描\n│   ├── bilibili_transcript.sh  # 核心转录引擎\n│   ├── qwen3_transcribe.py     # Qwen3-ASR 转录辅助\n│   └── batch_transcribe.py     # 批量转录调度\n└── references/\n    ├── architecture.md         # 架构说明\n    └── bilibili-fav-api.md     # B站API参考\n```\n\n## 许可\n\nMIT\n\nFile v3.5.1:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"3.5.1\",\n  \"publishedAt\": 1780476654851\n}\n\nFile v3.5.1:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- OpenClaw 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.openclaw/workspace/skills/bilibili-auto-transcript/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v3.5.1:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v3.5.1:skill-card.md\n\n## Description: <br>\nTranscribes Bilibili videos and scans Bilibili favorites using a fallback flow from human captions to Bilibili AI captions to Qwen3-ASR, with optional AI summaries. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to convert individual Bilibili videos or newly added favorite-list videos into transcript files and summaries for later review or knowledge workflows. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can read local browser session cookies for Bilibili when attempting authenticated subtitle access. <br>\nMitigation: Prefer public favorites and no-cookie operation when possible; do not export or share cookie files, and review the skill before installation if cookie access is not acceptable. <br>\nRisk: Optional summary generation can send video titles and transcript text to an external AI API when OPENAI_API_KEY or SUMMARY_API_URL is configured. <br>\nMitigation: Set these environment variables only for transcript content that may be shared with the configured external service. <br>\nRisk: A scheduled scan can periodically process favorites without further prompts once enabled. <br>\nMitigation: Enable the cron job only when periodic processing is intended, and verify the target favorites list and schedule before activation. <br>\n\n\n## Reference(s): <br>\n- [Bilibili Auto Transcript ClawHub Release](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [Scan-Script / Cronjob / Agent Architecture](references/architecture.md) <br>\n- [Bilibili Favorites API Reference](references/bilibili-fav-api.md) <br>\n- [Bilibili Favorites Resource API](https://api.bilibili.com/x/v3/fav/resource/list) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, files, shell commands, configuration, guidance] <br>\n**Output Format:** [Plain text transcript documents with structured sections, optional AI summaries, CSV batch reports, and setup or execution commands.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes transcript files under ~/workspace/knowledge/bilibili and state or report files under ~/.openclaw/workspace/.auto-transcript-state.] <br>\n\n## Skill Version(s): <br>\n3.5.1 (source: server release metadata; artifact frontmatter reports 4.0.0) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v3.5.0: 9 files, 20342 bytes\n\nFiles: README.md (1847b), references/architecture.md (2641b), references/bilibili-fav-api.md (3116b), scripts/batch_transcribe.py (11939b), scripts/bilibili_scanner.py (3176b), scripts/bilibili_transcript.sh (14052b), skill-card.md (2428b), SKILL.md (7812b), _meta.json (143b)\n\nFile v3.5.0:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"3.5.0\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），智能模型选择，AI摘要生成。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"pip\",\n              \"kind\": \"pipx\",\n              \"package\": \"openai-whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (STT)\",\n            },\n            {\n              \"id\": \"pip\",\n              \"kind\": \"pipx\",\n              \"package\": \"requests\",\n              \"bins\": [],\n              \"label\": \"Install requests (HTTP client for scanner)\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **Whisper 语音转文字**（智能模型选择）→ 根据视频时长和GPU情况自动选模型\n\n**Whisper 智能模型选择：**\n\n| 条件 | < 3分钟 | 3-10分钟 | 10-30分钟 | > 30分钟 |\n|------|---------|----------|-----------|----------|\n| **有GPU** | tiny | base | medium | large-v3 |\n| **无GPU(CPU)** | tiny | base | small | small |\n\n- 自动检测 CUDA GPU 可用性\n- 中文视频自动指定 `--language zh` 提高准确率\n- 音频自动转为 16kHz 单声道 WAV（Whisper 处理更快）\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → （可选）AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 生成转录报告CSV\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 批量转录（推荐）\n\n```bash\npython3 scripts/batch_transcribe.py\n```\n\n自动扫描收藏夹全部视频，逐个转录，支持：\n- **断点续传** — 中断后重跑自动跳过已处理视频\n- **自动重试** — 失败任务自动重试2次\n- **转录报告** — 生成 CSV 报告，含来源分布统计\n- **AI摘要** — 可选，设置环境变量 `OPENAI_API_KEY` 即可自动生成摘要\n- **目录组织** — 按视频发布年月自动分目录存储\n\n### 首次设置\n\n#### 1. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 2. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 3. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 4. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 5. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\nwhisper --help      # 可选，无字幕视频降级用\nopencc --version    # 可选，繁转简\n```\n\n#### 6. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：python3 scripts/bilibili_scanner.py\"\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎（v3.0）。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理（Whisper 模式）\n- `whisper` (openai-whisper) — 语音转文字（降级）；首次使用时自动下载模型\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper tiny/base/medium/large-v3 模型\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n（设置 OPENAI_API_KEY 后自动生成）\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径，自动按年/月分子目录 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 转录报告 | `~/.openclaw/workspace/.auto-transcript-state/transcript_report.csv` | 每次批量转录的详细报告 |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n| OPENAI_API_KEY | （可选） | 设置后自动生成AI摘要 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录；Cookie快过期时脚本会提示\n3. **Whisper 耗时** — GPU模式约耗时视频时长的10-50%（取决于模型大小）；CPU模式显著更慢\n4. **B站API ps上限20** — 超过需分页\n5. **摘要占位符必须替换** — 设置 `OPENAI_API_KEY` 环境变量可自动生成摘要\n6. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情\n7. **输出目录** — 自 v3.0 起按视频发布年月自动组织目录（如 `bilibili/2026/06/`）\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\n---\n\n## 📦 开源 & 交流\n\n- **GitHub**：[github.com/54Lynnn/bilibili-auto-transcript](https://github.com/54Lynnn/bilibili-auto-transcript)（⭐️ Star 支持）\n- **ClawHub**：[clawhub.ai/54lynnn/bilibili-auto-transcript](https://clawhub.ai/54lynnn/bilibili-auto-transcript)\n- **QQ 群**：120363664（欢迎扫码加入交流）\n\nFile v3.5.0:README.md\n\n# 📼 Bilibili Auto Transcript\n\n**B站视频自动转录 & 收藏夹扫描技能**\n\n三级降级策略：CC字幕 → B站AI字幕 → Whisper 语音转文字，自动获取 B站视频的文字内容。\n\n## 功能\n\n- **三级字幕降级**：人工CC字幕 → AI字幕(9种语言) → Whisper本地转录，逐级自动降级\n- **智能模型选择**：根据视频时长和 GPU 可用性自动选择 Whisper 模型（tiny/base/medium）\n- **收藏夹扫描**：分页获取收藏夹所有视频，去重、断点续传\n- **批量转录**：自动遍历收藏夹新视频，支持重试、报告生成\n- **AI摘要**（可选）：设置 `OPENAI_API_KEY` 后自动生成结构化视频摘要\n- **目录组织**：按视频发布年月自动分目录存储\n\n## 快速开始\n\n```bash\n# 手动转录单个视频\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n\n# 批量转录收藏夹所有新视频\npython3 scripts/batch_transcribe.py\n```\n\n## 依赖\n\n- yt-dlp — 视频/字幕下载\n- ffmpeg — 音频处理\n- openai-whisper — 语音转文字\n- opencc — 繁转简（可选）\n- chromium-browser — Cookie支持（B站AI字幕）\n\n## 配置\n\n1. 编辑 `scripts/bilibili_scanner.py`，设置 `FAV_MEDIA_ID` 为你的B站收藏夹ID\n2. 用 chromium-browser 登录 bilibili.com 获取 Cookie\n3. （可选）设置 `OPENAI_API_KEY` 环境变量开启自动摘要\n\n## 项目结构\n\n```\nbilibili-auto-transcript/\n├── SKILL.md                    # Skill 元数据\n├── scripts/\n│   ├── bilibili_scanner.py     # 收藏夹扫描\n│   ├── bilibili_transcript.sh  # 核心转录引擎\n│   └── batch_transcribe.py     # 批量转录调度\n└── references/\n    ├── architecture.md         # 架构说明\n    └── bilibili-fav-api.md     # B站API参考\n```\n\n## 许可\n\nMIT\n\nFile v3.5.0:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"3.5.0\",\n  \"publishedAt\": 1780304264748\n}\n\nFile v3.5.0:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- OpenClaw 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.openclaw/workspace/skills/bilibili-auto-transcript/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v3.5.0:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v3.5.0:skill-card.md\n\n## Description: <br>\nTranscribes Bilibili videos and scans Bilibili favorites using a fallback flow from CC subtitles to Bilibili AI subtitles to Whisper, with optional AI-generated summaries. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use this skill to convert individual Bilibili videos or newly discovered favorite-list videos into transcript files, optional summaries, and batch reports. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may use local browser Bilibili session cookies to retrieve video metadata or subtitles. <br>\nMitigation: Use a separate browser profile or a Bilibili-only exported cookie file, avoid private or member-only content unless intended, and handle cookie files as login secrets. <br>\nRisk: Enabling OPENAI_API_KEY sends transcript text to the configured summary API for optional AI summarization. <br>\nMitigation: Leave OPENAI_API_KEY unset for local-only transcription, or review the transcript content and configured API endpoint before enabling summary generation. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [Architecture reference](references/architecture.md) <br>\n- [Bilibili favorites API reference](references/bilibili-fav-api.md) <br>\n- [Bilibili favorites API endpoint](https://api.bilibili.com/x/v3/fav/resource/list) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Files, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Transcript text files with structured sections, optional Markdown-style summaries, CSV batch reports, and shell commands] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May write transcripts under ~/workspace/knowledge/bilibili and state or report files under ~/.openclaw/workspace/.auto-transcript-state.] <br>\n\n## Skill Version(s): <br>\n3.5.0 (source: server release evidence and skill frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v3.4.0: 9 files, 17513 bytes\n\nFiles: references/architecture.md (2595b), references/bilibili-fav-api.md (3116b), scripts/bilibili_rag_index.py (6617b), scripts/bilibili_rag_query.py (4838b), scripts/bilibili_scanner.py (2287b), scripts/bilibili_transcript.sh (8784b), skill-card.md (2057b), SKILL.md (6542b), _meta.json (143b)\n\nFile v3.4.0:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"3.3.10\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），搭配 Knowledge RAG 转录即搜。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"pip\",\n              \"kind\": \"pipx\",\n              \"package\": \"openai-whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (STT)\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **Whisper medium** 语音转文字 → ~95%准确，需GPU\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。如果用户也装了 knowledge-rag，它自己有定时扫描机制，不用转录这边操心。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 首次设置\n\n#### 1. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 2. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 3. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 4. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 5. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\nwhisper --help      # 可选，无字幕视频降级用\nopencc --version    # 可选，繁转简\n```\n\n#### 6. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：bash scripts/bilibili_scanner.py\"\n```\n\n### 扫描脚本输出格式\n\n```\nCOLLECTION_TOTAL:20\nPROCESSED:15\nNEW_VIDEOS:3\n  - BVID:BVxxxxx\n    TITLE:视频标题\n    DURATION:12分34秒\n    UPPER:UP主名\n```\n\n无新视频时输出：\n```\nALL_CAUGHT_UP\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理（Whisper 模式）\n- `whisper` (openai-whisper) — 语音转文字（降级）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper语音转文字\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录\n3. **Whisper 耗时** — medium模型约耗时视频时长的30-50%\n4. **B站API ps上限20** — 超过需分页\n5. **摘要占位符必须替换** — 脚本输出后占位符`【AI待处理...】`还在，AI必须阅读全文并用结构化摘要替换它，再向用户报告完成\n6. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情，它自己有定时扫描，不用转录这边管。\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\n---\n\n## 📦 开源 & 交流\n\n- **GitHub**：[github.com/54Lynnn/bilibili-auto-transcript](https://github.com/54Lynnn/bilibili-auto-transcript)（⭐️ Star 支持）\n- **ClawHub**：[clawhub.ai/54lynnn/bilibili-auto-transcript](https://clawhub.ai/54lynnn/bilibili-auto-transcript)\n- **QQ 群**：120363664（欢迎扫码加入交流）\n\nFile v3.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"3.4.0\",\n  \"publishedAt\": 1780284815031\n}\n\nFile v3.4.0:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- Hermes 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.hermes/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v3.4.0:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v3.4.0:skill-card.md\n\n## Description: <br>\nTranscribes Bilibili videos, scans public favorites for new videos, and prepares transcript files for summarization and local search. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use this skill to turn Bilibili videos into transcript text files, summarize the results, and monitor a configured favorites list for new videos. It can also build and query a local transcript search index when the local embedding service is available. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may automatically reuse local browser login cookies for Bilibili access through yt-dlp. <br>\nMitigation: Install only if this browser-session access is acceptable, and review or modify the transcript script if you need explicit cookie opt-in, no Windows Edge fallback, or a manually supplied cookie source. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Release Page](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [Architecture Reference](references/architecture.md) <br>\n- [Bilibili Favorites API Reference](references/bilibili-fav-api.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance plus shell commands and generated plain-text transcript files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Transcript files include video metadata, a summary placeholder for the agent to replace, and the full transcript text.] <br>\n\n## Skill Version(s): <br>\n3.4.0 (source: ClawHub release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v3.3.10: 9 files, 17664 bytes\n\nFiles: references/architecture.md (2595b), references/bilibili-fav-api.md (3116b), scripts/bilibili_rag_index.py (6617b), scripts/bilibili_rag_query.py (4838b), scripts/bilibili_scanner.py (2287b), scripts/bilibili_transcript.sh (8784b), skill-card.md (2471b), SKILL.md (6541b), _meta.json (144b)\n\nFile v3.3.10:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"3.3.9\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），搭配 Knowledge RAG 转录即搜。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"pip\",\n              \"kind\": \"pipx\",\n              \"package\": \"openai-whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (STT)\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **Whisper medium** 语音转文字 → ~95%准确，需GPU\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。如果用户也装了 knowledge-rag，它自己有定时扫描机制，不用转录这边操心。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 首次设置\n\n#### 1. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 2. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 3. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 4. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 5. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\nwhisper --help      # 可选，无字幕视频降级用\nopencc --version    # 可选，繁转简\n```\n\n#### 6. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：bash scripts/bilibili_scanner.py\"\n```\n\n### 扫描脚本输出格式\n\n```\nCOLLECTION_TOTAL:20\nPROCESSED:15\nNEW_VIDEOS:3\n  - BVID:BVxxxxx\n    TITLE:视频标题\n    DURATION:12分34秒\n    UPPER:UP主名\n```\n\n无新视频时输出：\n```\nALL_CAUGHT_UP\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理（Whisper 模式）\n- `whisper` (openai-whisper) — 语音转文字（降级）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper语音转文字\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录\n3. **Whisper 耗时** — medium模型约耗时视频时长的30-50%\n4. **B站API ps上限20** — 超过需分页\n5. **摘要占位符必须替换** — 脚本输出后占位符`【AI待处理...】`还在，AI必须阅读全文并用结构化摘要替换它，再向用户报告完成\n6. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情，它自己有定时扫描，不用转录这边管。\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\n---\n\n## 📦 开源 & 交流\n\n- **GitHub**：[github.com/54Lynnn/bilibili-auto-transcript](https://github.com/54Lynnn/bilibili-auto-transcript)（⭐️ Star 支持）\n- **ClawHub**：[clawhub.ai/54lynnn/bilibili-auto-transcript](https://clawhub.ai/54lynnn/bilibili-auto-transcript)\n- **QQ 群**：120363664（欢迎扫码加入交流）\n\nFile v3.3.10:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"3.3.10\",\n  \"publishedAt\": 1780251205111\n}\n\nFile v3.3.10:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- Hermes 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.hermes/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v3.3.10:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v3.3.10:skill-card.md\n\n## Description: <br>\nTranscribes Bilibili videos, scans favorites for new videos, and prepares transcript files for summarization and search. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and external users use this skill to convert Bilibili videos or newly added public favorites into local transcript documents, then have an agent read the transcript and replace the summary placeholder with a structured summary. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The transcript workflow can use the local Bilibili browser login session automatically. <br>\nMitigation: Install only if that behavior is acceptable, prefer public favorites and unauthenticated videos when possible, and review or modify the transcript script so browser-cookie use is an explicit choice. <br>\nRisk: Cookie export to shared temporary files can expose login material on a shared machine. <br>\nMitigation: Avoid shared temp paths for cookies, limit file permissions, and remove exported cookie files after use. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [54lynnn Publisher Profile](https://clawhub.ai/user/54lynnn) <br>\n- [Scan-Script / Cronjob / Agent Architecture](references/architecture.md) <br>\n- [Bilibili Favorites API Reference](references/bilibili-fav-api.md) <br>\n- [Bilibili Favorites API Endpoint](https://api.bilibili.com/x/v3/fav/resource/list) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance, shell commands, structured scanner stdout, and local transcript text files.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Transcript files include metadata, the full transcript, and a summary placeholder that the agent is expected to replace after reading the transcript.] <br>\n\n## Skill Version(s): <br>\n3.3.10 (source: server release metadata; artifact frontmatter says 3.3.9) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v3.3.9: 9 files, 17655 bytes\n\nFiles: references/architecture.md (2595b), references/bilibili-fav-api.md (3116b), scripts/bilibili_rag_index.py (6617b), scripts/bilibili_rag_query.py (4838b), scripts/bilibili_scanner.py (2287b), scripts/bilibili_transcript.sh (8784b), skill-card.md (2777b), SKILL.md (6202b), _meta.json (143b)\n\nFile v3.3.9:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"3.3.9\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），搭配 Knowledge RAG 转录即搜。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"pip\",\n              \"kind\": \"pipx\",\n              \"package\": \"openai-whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (STT)\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **Whisper medium** 语音转文字 → ~95%准确，需GPU\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。如果用户也装了 knowledge-rag，它自己有定时扫描机制，不用转录这边操心。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 首次设置\n\n#### 1. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 2. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 3. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 4. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 5. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\nwhisper --help      # 可选，无字幕视频降级用\nopencc --version    # 可选，繁转简\n```\n\n#### 6. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：bash scripts/bilibili_scanner.py\"\n```\n\n### 扫描脚本输出格式\n\n```\nCOLLECTION_TOTAL:20\nPROCESSED:15\nNEW_VIDEOS:3\n  - BVID:BVxxxxx\n    TITLE:视频标题\n    DURATION:12分34秒\n    UPPER:UP主名\n```\n\n无新视频时输出：\n```\nALL_CAUGHT_UP\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理（Whisper 模式）\n- `whisper` (openai-whisper) — 语音转文字（降级）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper语音转文字\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录\n3. **Whisper 耗时** — medium模型约耗时视频时长的30-50%\n4. **B站API ps上限20** — 超过需分页\n5. **摘要占位符必须替换** — 脚本输出后占位符`【AI待处理...】`还在，AI必须阅读全文并用结构化摘要替换它，再向用户报告完成\n6. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情，它自己有定时扫描，不用转录这边管。\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\nFile v3.3.9:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"3.3.9\",\n  \"publishedAt\": 1780200480151\n}\n\nFile v3.3.9:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- Hermes 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.hermes/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v3.3.9:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v3.3.9:skill-card.md\n\n## Description: <br>\nTranscribes Bilibili videos, scans favorite lists for new videos, falls back from captions to Whisper, and prepares local transcript files for search. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to transcribe individual Bilibili videos or monitor a Bilibili favorites list for new videos. It helps create transcript files with summaries and optional local RAG search support. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can use a logged-in Bilibili browser session through yt-dlp. <br>\nMitigation: Run it with a dedicated browser profile, avoid sharing exported cookies, and install it only if browser-session access is acceptable. <br>\nRisk: Scheduled mode can repeatedly fetch videos, write transcripts, update summaries, and maintain local state. <br>\nMitigation: Review the cron configuration before enabling it, choose an appropriate interval, and periodically inspect the output directory and processed-video state. <br>\nRisk: Transcript generation may fall back to Whisper when captions are unavailable, which can be slow and resource-intensive. <br>\nMitigation: Confirm ffmpeg and Whisper availability before relying on fallback transcription, and run long videos only on machines with suitable resources. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [Skill Homepage](https://clawhub.ai/54lynnn/bilibili-transcript) <br>\n- [Architecture Reference](references/architecture.md) <br>\n- [Bilibili Favorites API Reference](references/bilibili-fav-api.md) <br>\n- [Bilibili Favorites API Endpoint](https://api.bilibili.com/x/v3/fav/resource/list) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance, Files] <br>\n**Output Format:** [Markdown guidance with shell commands; generated transcripts are plain text files with structured metadata, summaries, and full transcript text.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May write transcript files under the user's local knowledge directory and maintain a processed-video state file for scheduled scans.] <br>\n\n## Skill Version(s): <br>\n3.3.9 (source: SKILL.md frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v3.3.8: 9 files, 17476 bytes\n\nFiles: references/architecture.md (2595b), references/bilibili-fav-api.md (3116b), scripts/bilibili_rag_index.py (6617b), scripts/bilibili_rag_query.py (4838b), scripts/bilibili_scanner.py (2287b), scripts/bilibili_transcript.sh (8593b), skill-card.md (2442b), SKILL.md (6202b), _meta.json (143b)\n\nFile v3.3.8:SKILL.md\n\n---\nname: bilibili-auto-transcript\nversion: \"3.3.8\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），搭配 Knowledge RAG 转录即搜。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"pip\",\n              \"kind\": \"pipx\",\n              \"package\": \"openai-whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (STT)\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **Whisper medium** 语音转文字 → ~95%准确，需GPU\n\n**⚠️ 关键步骤（必须执行）：** 脚本运行后，**AI必须先做这件事**，才能向用户报告完成：\n\n1. **写摘要** → `read` 输出的 TXT 文件，阅读全文，用 `edit` 替换占位符为结构化摘要\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。如果用户也装了 knowledge-rag，它自己有定时扫描机制，不用转录这边操心。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录avid到已处理列表\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 首次设置\n\n#### 1. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 2. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 3. 修改扫描脚本\n编辑 `scripts/bilibili_scanner.py`，改 `FAV_MEDIA_ID` 为你的收藏夹ID。\n\n#### 4. Chromium 登录B站（获取Cookie）\n```bash\nchromium-browser &\n# 打开 bilibili.com 并登录\n```\n\n#### 5. 检查依赖\n```bash\nyt-dlp --version    # 必需\nffmpeg -version     # 必需\nwhisper --help      # 可选，无字幕视频降级用\nopencc --version    # 可选，繁转简\n```\n\n#### 6. 配置定时任务（推荐每6小时）\n```bash\nopenclaw cron add \\\n  --name bilibili-scan \\\n  --every 21600000 \\\n  --message \"运行扫描脚本：bash scripts/bilibili_scanner.py\"\n```\n\n### 扫描脚本输出格式\n\n```\nCOLLECTION_TOTAL:20\nPROCESSED:15\nNEW_VIDEOS:3\n  - BVID:BVxxxxx\n    TITLE:视频标题\n    DURATION:12分34秒\n    UPPER:UP主名\n```\n\n无新视频时输出：\n```\nALL_CAUGHT_UP\n```\n\n---\n\n## 公共部分\n\n### 转录脚本\n`scripts/bilibili_transcript.sh` — 两个模式共享同一个引擎。\n\n### 依赖\n- `yt-dlp` — 视频下载、字幕获取\n- `ffmpeg` — 音频处理（Whisper 模式）\n- `whisper` (openai-whisper) — 语音转文字（降级）\n- `opencc` — 繁转简（可选）\n- `chromium-browser` — Cookie 支持（B站AI字幕）\n\n### 输出文件格式\n```\n================================================================================\nB站视频转录文档\n================================================================================\n\n📹 视频标题：xxx\n🔗 B站链接：xxx\n👤 作者：xxx\n📅 发布时间：xxx\n⏱️  视频时长：xxx\n📝 转录来源：CC字幕 / B站AI字幕 / Whisper语音转文字\n⏰ 转录时间：xxx\n\n================================================================================\n第一部分：视频摘要（AI生成）\n================================================================================\n\n【AI待处理：请阅读全文后，替换此行，写结构化摘要】\n\n================================================================================\n第二部分：完整原文\n================================================================================\n\n（完整转录内容...）\n\n================================================================================\n文档结束\n================================================================================\n```\n\n### 配置参数\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| 收藏夹ID | （需设置） | URL `fid=` 的数字 |\n| 输出目录 | `~/workspace/knowledge/bilibili/` | TXT存放路径 |\n| 已处理记录 | `~/.openclaw/workspace/.auto-transcript-state/processed_videos.txt` | 去重文件（每行一个avid） |\n| 扫描间隔 | 每6小时 | 自动模式定时 |\n\n### B站收藏夹API\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list?media_id={ID}&ps=20&pn=1\n```\n- `ps` 最大20（脚本已设 ps=20）\n- 公开收藏夹无需Cookie\n\n### avid vs bvid\n- `id` = avid（数字）→ 去重追踪用\n- `bvid` / `bv_id` = BV号 → 构建转录URL用\n\n### 注意事项\n1. **同文件覆盖** — 同一BV号多次转录覆盖旧文件，已处理列表防重复\n2. **需要Cookie** — 通过 Chromium cookie 获取 AI 字幕，需先B站登录\n3. **Whisper 耗时** — medium模型约耗时视频时长的30-50%\n4. **B站API ps上限20** — 超过需分页\n5. **摘要占位符必须替换** — 脚本输出后占位符`【AI待处理...】`还在，AI必须阅读全文并用结构化摘要替换它，再向用户报告完成\n6. **只干自己的事** — 转录只输出文件。索引是 knowledge-rag 的事情，它自己有定时扫描，不用转录这边管。\n\n## 推荐搭配：📖 Knowledge RAG\n\n装了这个 skill 后再装 **knowledge-rag**，知识库会定时自动扫描新文件并索引，无需手动操作：\n\n```bash\nclawhub install knowledge-rag\n```\n\n转录后自动索引，随时用自然语言搜索所有转过的内容，还有网页搜索界面。\n\nFile v3.3.8:_meta.json\n\n{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"3.3.8\",\n  \"publishedAt\": 1780194545460\n}\n\nFile v3.3.8:references/architecture.md\n\n# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- Hermes 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.hermes/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现\n\nFile v3.3.8:references/bilibili-fav-api.md\n\n# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n\nFile v3.3.8:skill-card.md\n\n## Description: <br>\nTranscribes Bilibili videos and scans a favorites collection, using available subtitles first and Whisper fallback when needed. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[54lynnn](https://clawhub.ai/user/54lynnn) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and external users use this skill to convert Bilibili videos into local transcript files, summarize them, and monitor a configured favorites collection for new videos. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The transcript workflow can reuse a logged-in Bilibili browser session through local browser cookies. <br>\nMitigation: Prefer public favorites and unauthenticated videos, review or disable browser-cookie paths before use, and run with a dedicated browser profile when login access is required. <br>\nRisk: Transcript files and processed video IDs are saved locally, and repeated transcriptions of the same video can overwrite existing TXT output. <br>\nMitigation: Use a dedicated output directory, back up or review existing transcript files before reruns, and avoid processing sensitive videos unless local retention is acceptable. <br>\n\n\n## Reference(s): <br>\n- [Bilibili Auto Transcript on ClawHub](https://clawhub.ai/54lynnn/bilibili-auto-transcript) <br>\n- [Scan-Script / Cronjob / Agent Architecture](references/architecture.md) <br>\n- [Bilibili Favorites API Reference](references/bilibili-fav-api.md) <br>\n- [Bilibili Favorites API Endpoint](https://api.bilibili.com/x/v3/fav/resource/list) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with bash commands and local TXT transcript files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires yt-dlp, ffmpeg, and curl; optionally uses openai-whisper and opencc; writes transcripts under the user's workspace and processed video IDs under local OpenClaw state.] <br>\n\n## Skill Version(s): <br>\n3.3.8 (source: server evidence and frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: Bilibili Auto Transcript Owner: 54lynnn Summary: B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。 Tags: 54lynnn:3.3.0, auto:3.1.0, bilibili:3.3.9, chinese:3.3.9, latest:5.2.0, scanner:3.1.0, subtitles:3.3.9, transcript:3.3.9 Version history: v5.2.0 | 2026-06-12T16:25:11.501Z | user 修复Cookie检测bug + 标题自动校验 v5.0.1 | 2026-06-07T12:18:40.725Z | auto - Documentation improvements: Expanded SKILL.md with a detailed rationale ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"bash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\""},{"language":"text","snippet":"定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → （可选）AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录bvid到已处理列表\n  → 生成转录报告CSV\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）"},{"language":"bash","snippet":".venv/bin/python3 scripts/batch_transcribe.py"},{"language":"bash","snippet":"cd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests python-dotenv"},{"language":"bash","snippet":"cd ~/.openclaw/workspace/skills/bilibili-auto-transcript\ncp .env.example .env\n# 编辑 .env，填入你的 API Key"},{"language":"bash","snippet":"chromium-browser &\n# 打开 bilibili.com 并登录"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: bilibili-auto-transcript\nversion: \"5.2.0\"\ndescription: \"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。\"\nhomepage: https://clawhub.ai/54lynnn/bilibili-transcript\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"📼\",\n        \"requires\": { \"bins\": [\"yt-dlp\", \"ffmpeg\", \"curl\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"venv\",\n              \"kind\": \"shell\",\n              \"command\": \"cd {{SKILL_DIR}} && python3 -m venv .venv && .venv/bin/pip install openai-whisper requests python-dotenv\",\n              \"label\": \"Setup virtual env & install Whisper\",\n            },\n          ],\n      },\n  }\n---\n\n# 📼 Bilibili 视频转录 & 收藏夹自动扫描\n\n**双模式技能** — 可以手动转录单个视频，也可以定时扫描收藏夹自动处理。\n\n## 模式一：手动转录\n\n当你给我一个 B站链接时，我会自动执行转录。\n\n**用法：**\n```bash\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n```\n\n**转录优先级（自动降级）：**\n1. ✅ **人工CC字幕**（zh-CN, zh-TW, en, ja 等）→ 100%准确，秒出\n2. ✅ **AI字幕**（ai-zh, ai-en, ai-ja 等9种语言）→ 85-90%准确，秒出\n3. ✅ **OpenAI Whisper 语音转文字**（智能选模型）→ 有独显≥6GB 用 medium，<6GB 用 small；无独显用 base/tiny\n\n**Whisper 智能模型选择：**\n\n| 条件 | 模型 | 速度参考 |\n|:----:|:----:|:--------:|\n| **有 GPU，显存 ≥6GB** | medium | 高质量，~0.3x 实时 |\n| **有 GPU，显存 <6GB** | small | 平衡，~0.5x 实时 |\n| **无 GPU，视频 ≤30 分钟** | base | 质量与速度平衡 |\n| **无 GPU，视频 >30 分钟** | tiny | 避免等待过久 |\n\n- 自动检测 CUDA / nvidia-smi 获取显存\n- 音频自动转为 16kHz 单声道 WAV（统一格式）\n\n### 设计决策：为什么从 Qwen3-ASR 换回 Whisper？\n\nv4.x 引入了 Qwen3-ASR 作为本地转录引擎，v5.0 换回了 Whisper。核心原因：\n\n1. **架构差异巨大** — Qwen3-ASR 是 **LLM 做语音转文字**，把音频整段送进大语言模型做推理，1.7B 模型要完整加载 LLM 权重，显存占用大、推理慢。Whisper 是**纯语音识别模型**，音频切成 30 秒一段做声学特征识别，不需要 LLM 推理，速度快得多\n2. **资源占用** — Qwen3-ASR-1.7B 需要 4-6GB 显存且推理时间长（LLM 的 O(n²) attention），Whisper medium 虽然也要 ~5GB 显存但处理方式轻量，且有更小的模型可选（tiny 仅 ~39MB）\n3. **安装省心** — `pip install openai-whisper` 一行搞定，模型首次使用时自动下载。Qwen3-ASR 需从 HuggingFace 下载 2-5GB 权重，国内网络经常失败\n4. **够用即可** — 语音转文字在这个 skill 里是**三级降级的最后一环**，大多数视频走 CC 或 AI 字幕就完了。为这个兜底场景扛一个 LLM 级别的模型，不值当\n\n**⚠️ 关于摘要：** 设置了 `OPENAI_API_KEY` 时，转录完成后脚本会自动调用 `generate_summary.py` 生成 AI 摘要。未设置 API key 时 TXT 中保留占位符，可后续运行 `fill_summaries.py` 批量补全。\n\n转录只负责出文件，索引那是 knowledge-rag 自己的事。\n\n---\n\n## 模式二：收藏夹自动扫描\n\n定时检查 B站收藏夹，发现新视频后自动完成「转录 → AI 摘要 → 保存 → 通知」全流程。\n\n### 工作流\n\n```\n定时触发 → 扫描收藏夹API → 对比已处理列表\n  → 发现新视频 → 转录（三级降级）\n  → （可选）AI读全文、写结构化摘要\n  → 覆盖TXT中的摘要占位符\n  → 记录bvid到已处理列表\n  → 生成转录报告CSV\n  → 通知用户（标题/作者/时长/转录来源/摘要/TXT文件）\n```\n\n### 批量转录（推荐）\n\n```bash\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n自动扫描收藏夹全部视频，逐个转录，支持：\n- **断点续传** — 中断后重跑自动跳过已处理视频\n- **自动重试** — 失败任务自动重试2次\n- **转录报告** — 生成 CSV 报告，含来源分布统计\n- **AI摘要** — 有 API key 时自动生成（三种模式统一调用 `scripts/generate_summary.py`）\n- **目录组织** — 按视频发布年月自动分目录存储\n- **标题校验** — 转录完成后自动对比B站最新标题，UP主改标题时自动修正\n\n### 首次设置\n\n#### 1. 安装依赖\n在技能目录下创建虚拟环境并安装依赖：\n```bash\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests python-dotenv\n```\n\n#### 2. 创建收藏夹\nB站新建一个收藏夹，设为**公开**。\n\n#### 3. 获取收藏夹ID\nURL 中 `fid=` 后面的数字。\n\n#### 4. 配置 AI 摘要（可选）\n```bash\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\ncp .env.example "},{"path":"README.md","content":"# 📼 Bilibili Auto Transcript\n\n**B站视频自动转录 & 收藏夹扫描技能**\n\n三级降级策略：CC字幕 → B站AI字幕 → OpenAI Whisper 语音转文字，自动获取 B站视频的文字内容。\n\n## 功能\n\n- **三级字幕降级**：人工CC字幕 → AI字幕(9种语言) → Whisper 本地转录，逐级自动降级\n- **智能模型选择**：有GPU且显存≥6GB用medium，<6GB用small；无GPU用base/tiny（依视频时长）\n- **收藏夹扫描**：分页获取收藏夹所有视频，去重、断点续传\n- **批量转录**：自动遍历收藏夹新视频，支持重试、报告生成\n- **AI摘要**（可选）：设置 `OPENAI_API_KEY` 后自动生成结构化视频摘要\n- **目录组织**：按视频发布年月自动分目录存储\n\n## 设计决策\n\nv5.0 从 Qwen3-ASR 换回了 Whisper 作为本地语音转文字引擎。原因：\n\n- **架构差异** — Qwen3-ASR 是 **LLM 做语音转文字**，音频整段送进大语言模型推理，慢且吃显存。Whisper 是**纯语音识别模型**，30 秒一段做声学特征识别，不需要 LLM 推理，快得多\n- **资源占用** — Qwen3-ASR-1.7B 需要 4-6GB 显存且推理时间久，Whisper 有更轻量的模型可选（tiny 仅 39MB）\n- **安装省心** — `pip install openai-whisper` 一行搞定，模型自动下载。Qwen3-ASR 需从 HuggingFace 下 2-5GB 权重\n- **够用即可** — 语音转文字是三级降级的最后兜底，为这个场景扛一个 LLM 级别的模型不值当\n\n## 快速开始\n\n```bash\n# 1. 安装依赖（首次）\ncd ~/.openclaw/workspace/skills/bilibili-auto-transcript\npython3 -m venv .venv\n.venv/bin/pip install openai-whisper requests python-dotenv\n\n# 2. 手动转录单个视频\nbash scripts/bilibili_transcript.sh \"https://www.bilibili.com/video/BVxxxxx/\"\n\n# 3. 批量转录收藏夹所有新视频\n.venv/bin/python3 scripts/batch_transcribe.py\n```\n\n## 依赖\n\n- yt-dlp — 视频/字幕下载\n- ffmpeg — 音频处理\n- `openai-whisper` — 本地语音转文字引擎（通过 `.venv/bin/pip install openai-whisper` 安装）\n- `requests` — HTTP 请求（批量转录用）\n- `python-dotenv` — 加载 `.env` 文件（通过 `.venv/bin/pip install python-dotenv` 安装）\n- opencc — 繁转简（可选）\n- chromium-browser — Cookie支持（B站AI字幕）\n\n## 配置\n\n1. `cp .env.example .env`，编辑 `.env` 设置 `FAV_MEDIA_ID`（收藏夹ID）和 `OPENAI_API_KEY`（AI摘要）\n2. 用 chromium-browser 登录 bilibili.com 获取 Cookie\n3. 支持任何 OpenAI 兼容 API（DeepSeek、OpenCode Go、OpenRouter 等）\n\n## 项目结构\n\n```\nbilibili-auto-transcript/\n├── SKILL.md                    # Skill 元数据\n├── .env                        # API密钥（不提交git）\n├── .env.example                # 配置模板（提交git，供朋友参考）\n├── .db/                        # SQLite 数据库（不提交git）\n│   └── transcripts.db          # 转录记录+摘要数据库\n├── scripts/\n│   ├── bilibili_scanner.py     # 收藏夹扫描\n│   ├── bilibili_transcript.sh  # 核心转录引擎（v5.0，Whisper）\n│   ├── generate_summary.py     # AI摘要生成器（三种模式统一调用）\n│   ├── transcript_db.py        # SQLite 数据库管理层\n│   ├── fill_summaries.py       # 批量补摘要（cronjob推荐）\n│   ├── migrate_to_db.py        # 旧TXT迁移到数据库\n│   ├── logger.py               # 共享日志模块\n│   └── batch_transcribe.py     # 批量转录调度\n└── references/\n    ├── architecture.md         # 架构说明\n    └── bilibili-fav-api.md     # B站API参考\n```\n\n## 许可\n\nMIT"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn742cdrc476d1kbhpsvnrnznx81x4r7\",\n  \"slug\": \"bilibili-auto-transcript\",\n  \"version\": \"5.2.0\",\n  \"publishedAt\": 1781281511501\n}"},{"path":"references/architecture.md","content":"# Scan-Script / Cronjob / Agent 三体架构\n\n这是 bilibili-auto-transcript 使用的核心架构模式，适用于任何需要**定时扫描外部源 → 发现增量 → 由 AI 处理并通知**的任务。\n\n## 架构示意\n\n```\n定时触发 (cronjob / 系统定时器)\n    ↓\n扫描脚本 (bilibili_scanner.py)\n    → 调用外部 API 获取数据\n    → 读取本地已处理记录 (processed_videos.txt)\n    → 发现增量 (取差集)\n    → stdout 输出新条目 (结构化文本)\n    ↓ stdout\nAI Agent（加载 skill）\n    → 读取 stdout 中的新条目\n    → 对每个新条目执行处理流程\n    → 更新已处理记录\n    → 通知用户\n```\n\n## 三个组件\n\n### 1. 扫描脚本 (Scanner)\n- 职责：只做\"发现\"，不做\"处理\"\n- 执行方式：快速（通常 <1 秒），通过 cronjob 定时触发\n- 输出格式：结构化的纯文本标记，方便 agent 解析\n  - `NO_NEW_ITEMS` / `ALL_CAUGHT_UP` — 无增量，agent 不做事\n  - `NEW_ITEMS:N` + 逐条详细信息 — 有增量，agent 启动处理\n- 状态维护：维护一个 `processed_xxx.txt` 文件，每行一个唯一 ID\n\n### 2. 定时触发器 (Cronjob/Scheduler)\n- OpenClaw 内置 cronjob：\n  - `no_agent=False`（默认）：script stdout 注入 prompt，agent 按 prompt 处理\n  - `script=bilibili_scanner.py`（相对路径解析到 `~/.openclaw/workspace/skills/bilibili-auto-transcript/scripts/`）\n  - `skills=[...]`：加载相关 skill 提供上下文\n  - 无增量时 agent 只回复一句\"无新内容\"，不打扰用户\n- 外部定时器：\n  - 用 Linux systemd timer、crontab 等触发扫描\n\n### 3. AI 处理器 (Agent)\n- 职责：处理新条目（分析、转换、生成、通知）\n- 输入：扫描脚本的 stdout\n- 输出：最终交付给用户的结果（文件、消息、摘要等）\n- skill 提供处理步骤的完整定义\n\n## 适用场景\n\n这个模式适用于：\n- 监控网站/API 的新内容（博客、新闻、社交平台）\n- 定时检查文件系统变化\n- 定时抓取数据并生成报告\n- 任何\"定期巡检 → 发现增量 → AI 分析 → 通知\"的工作流\n\n## 关键设计原则\n\n1. **扫描脚本必须快** — 它只是 API 调用 + 集合比对，不应包含耗时操作\n2. **增量记录用唯一 ID** — 用数据集的原生 ID（如 avid），不用文件名或标题，避免重名/改名导致重复处理\n3. **不重复不遗漏** — 处理完立即记录 ID，agent 中途失败也不会漏掉\n4. **无增量时静默** — 用户只在有变化时才收到消息\n5. **自愈** — 脚本/agent 处理失败不阻塞后续扫描，下次运行时重试发现"},{"path":"references/bilibili-fav-api.md","content":"# B站收藏夹API 参考\n\n## 端点\n\n```\nGET https://api.bilibili.com/x/v3/fav/resource/list\n```\n\n## 参数\n\n| 参数 | 类型 | 说明 | 限制 |\n|------|------|------|------|\n| `media_id` | int | 收藏夹ID（URL中 `fid=` 后的数字） | 必填 |\n| `ps` | int | 每页数量 | **最大20**，超过返回 `code=-400`「请求错误」 |\n| `pn` | int | 页码 | 默认1 |\n\n## 认证\n\n- **公开收藏夹**：无需Cookie，直接GET即可\n- **私有收藏夹**：需要带B站登录态Cookie\n\n## 响应结构\n\n```json\n{\n  \"code\": 0,\n  \"message\": \"OK\",\n  \"data\": {\n    \"info\": { ... },\n    \"medias\": [\n      {\n        \"id\": 116366820508713,       // ← avid（用于去重追踪）\n        \"bvid\": \"BV1rPDkB7ESC\",      // ← BV号（可直接用于转录）\n        \"bv_id\": \"BV1rPDkB7ESC\",     // 部分响应用这个字段名\n        \"title\": \"视频标题\",\n        \"duration\": 298,             // 时长（秒）\n        \"upper\": {\n          \"name\": \"UP主名\"\n        },\n        \"pubtime\": 1775616958,       // 发布时间戳\n        \"fav_time\": 1779933181       // 收藏时间戳\n      }\n    ],\n    \"has_more\": false               // 是否有下一页\n  }\n}\n```\n\n## 注意点\n\n### ps参数上限\n`ps` 最大只支持 **20**。设 `ps=50` 会返回：\n```json\n{\"code\": -400, \"message\": \"请求错误\"}\n```\n如果收藏夹超过20个视频，需要分页请求（检查 `has_more` 字段）。\n\n### avid vs bvid\n- `id` = avid（数字ID），适合用于**去重追踪**\n- `bvid` / `bv_id` = BV号（字符串），用于**构建转录URL**\n- 部分API响应用 `bvid`，部分用 `bv_id`，建议同时检查两个字段\n\n### 公开 vs 私有\n公开收藏夹的API完全开放，无需Cookie。这个skill的扫描脚本使用公开访问。\n\n### curl -L 陷阱\n不要给B站API加 `-L`（跟随重定向）参数，会导致返回非JSON内容：\n```\ncurl -s -L \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20\"\n# 返回：{\"code\":-400,\"message\":\"请求错误\"}\n```\n\n## curl 测试示例\n\n```bash\n# 获取收藏夹内容（公开）\ncurl -s \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=3972051046&ps=20&pn=1\"\n\n# 带Cookie访问（私有收藏夹）\ncurl -s -b /tmp/cookies.txt \"https://api.bilibili.com/x/v3/fav/resource/list?media_id=xxx&ps=20&pn=1\"\n```\n\n## Cookie 提取（私有收藏夹/会员视频用）\n\n通过 yt-dlp 导出 Chromium Cookie：\n```bash\nCHROMIUM_PATH=\"$HOME/snap/chromium/common/chromium\"\nyt-dlp \\\n  --cookies-from-browser \"chromium:$CHROMIUM_PATH\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```\n⚠️ `--cookies` 参数读写双用，每次调用覆盖目标文件，不要在同一tick多次调用。\n\n通过 yt-dlp 导出 Windows Edge Cookie：\n```bash\nWIN_USER=$(ls /mnt/c/Users/ | grep -v \"Public\\|Default\\|All Users\" | head -1)\nyt-dlp \\\n  --cookies-from-browser \"edge:C:/Users/$WIN_USER/AppData/Local/Microsoft/Edge/User Data\" \\\n  --cookies /tmp/bili_cookies.txt \\\n  --skip-download \\\n  --print title \\\n  \"https://www.bilibili.com/video/BV1rPDkB7ESC/\"\n```"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。 Skill: Bilibili Auto Transcript Owner: 54lynnn Summary: B站视频转录+收藏夹扫描。三级降级（CC→AI→Whisper），AI摘要生成。 Tags: 54lynnn:3.3.0, auto:3.1.0, bilibili:3.3.9, chinese:3.3.9, latest:5.2.0, scanner:3.1.0, subtitles:3.3.9, transcript:3.3.9 Version history: v5.2.0 | 2026-06-12T16:25:11.501Z | user 修复Cookie检测bug + 标题自动校验 v5.0.1 | 2026-06-07T12:18:40.725Z | auto - Documentation improvements: Expanded SKILL.md with a detailed rationale","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":944,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:41:04.354Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:41:04.354Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:40:02.571Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}