目录 / B站视频全解析
B站视频全解析
--- name: bilibili-video-studio displayName: B站视频全解析 description: B站视频一站式解析与创作工场。用户直接输入 B 站视频 URL 加一句简单要求即可:视频转文字(字幕/口播/画面内容)、内容分析总结、爆款视频拆解(按带货/流量逻辑拆结构分段、脚本类型、爆款归因、六维评分报告,照着学照着抄)、视频转脚本(镜头/运镜/转场/情绪/时间线/屏幕文字)、爆款脚本生成(原骨架改写成你的脚本,或按方向/目的/商品原创口播脚本,含分段表与六维质检评分)、视频提示词反推(画面和内容转成 agent 可理解的提示词)、视频提取 PPT 内容(关键帧文字+幻灯OCR+完整口播稿)、备考笔记整理(题库/考点/带背视频按题号+标准答案重组)。底层经 Cue Omni Reader 远程端点解析(自动绕过 B 站反爬),再由大模型按场景加工交付。 description_zh: B站视频全解析:URL 直达,转文字/分析总结/爆款拆解六维评分/转脚本/脚本生成/提示词反推/PPT提取/备考笔记,八大场景全覆盖。 version: 1.2.0 author: sensedeal tags: [bilibili, video, 爆款拆解, 脚本生成, 视频转文字, 提示词反推, ppt提取, 备考笔记, omni-reader, 内容创作, 带货, 口播] --- # B站视频全解析 > 输入一个 B 站视频 URL + 一句需求,产出可直接使用的文字稿、拆解报告、分镜脚本、原创脚本、生成提示词或课件内容。管线:**Cue Omni Reader 远程端点(解析)→ 大模型(场景化加工)→ 交付**。 ## 隐私与数据传输说明 - 你提供的**视频 URL** 会发送至 Cue 远程解析端点(`mcp.cuecue.cn`)抓取并解析,解析结果由大模型加工后交付。 - 默认 `no_store=true`:源文件与解析结果**不落盘**、不持久化于服务端。 - 本技能**不读取、不收集**你的浏览器 Cookie、登录态或任何本地敏感数据;降级方案不含登录态/Cookie 操作。 - Cue API Key 仅用于鉴权,推荐用环境变量 `CUE_API_KEY` 传入,避免明文写入配置文件。 ## 八大场景总览(意图路由表) | # | 场景 | 用户典型说法 | 交付物 | |---|------|------------|--------| | 1 | 视频转文字 | 转文字 / 文字稿 / 字幕 / 转录 / 提取文字 | 净稿(**分段+小标题+重点**)· 口播全文(分段)· 画面文字稿(分组)· 时间线合并稿 | | 2 | 内容分析总结 | 总结一下 / 讲了什么 / 分析 / 摘要 | 主旨 + 结构分段 + 核心要点 + 金句 + 受众分析 | | 3 | 爆款视频拆解 | 拆解 / 为什么火 / 对标 / 抄作业 / 照着学 | 结构分段表 + 脚本类型 + 爆款归因 + 六维评分报告 + 可抄清单 | | 4 | 视频转脚本 | 转脚本 / 分镜 / 还原脚本 | 分镜脚本表(镜头/运镜/转场/情绪/时间线/屏幕文字)+ 口播净稿 | | 5 | 爆款脚本生成 | 帮我写脚本 / 改写成我的 / 仿写 / 原创脚本 | 多条脚本(分段表 + 口播全文 + 六维质检评分) | | 6 | 视频提示词反推 | 反推提示词 / prompt / 提示词 | 风格提示词 + 分镜提示词序列 + TTS 文案 + 结构化 JSON | | 7 | 视频提取 PPT 内容 | 提取PPT / 课件 / 幻灯 / 逐页内容 / 关键帧截图 | 逐页(去重)幻灯 + 关键帧截图(去重嵌图)+ 清洗讲解稿 + 课件大纲 | | 8 | 备考笔记整理 | 备考笔记 / 题号+标准答案 / 整理成笔记 / 考点笔记 | 题号+标准答案 备考笔记(含记忆口诀、来源标注) | **路由规则**: - **仅在用户同时提供 B 站视频 URL 时激活**:表中「总结一下 / 分析 / 帮我写脚本」等说法,只有伴随视频 URL 才触发本技能;无 URL 的普通对话不激活。 - 命中多个意图可组合执行(如「拆解并改写成我的脚本」= 场景3 → 场景5)。 - **只给 URL 无明确要求**:默认执行场景 1(精简版)+ 一段内容速览,然后附场景菜单询问是否深入(「需要我进一步做爆款拆解 / 转脚本 / 改写成你的脚本吗?」),不要擅自跑深度场景。 - 多个 URL:逐个解析(每次一个),报告可合并交付。 --- ## 前置依赖(新用户首次使用只需做这一件事) - **Cue API Key**:与 cue-omni-reader 技能共用同一把 Key,无需新建。获取:[cuecue.cn/hub/api-key](https://cuecue.cn/hub/api-key)(新账号送 500 积分 + 每天 10 免费积分)。积分不够用:打开 [https://cuecue.cn/](https://cuecue.cn/),点击页面**左下角**获取你的**专属邀请链接**,邀请好友加入,**每邀请一位再得 500 积分**。详见「积分不足专项提示」。推荐用环境变量 `CUE_API_KEY` 传入(避免明文落盘),或写入本地 `~/.cue/config.json`: ```bash # 方式一(推荐):环境变量 export CUE_API_KEY="sk你的key" # 方式二:本地配置文件 mkdir -p ~/.cue && echo '{"api_key": "sk你的key"}' > ~/.cue/config.json ``` - **远程端点直连(无需本地 Bridge、无需配置 MCP)**:B 站 URL 解析只走远程端点 `https://mcp.cuecue.cn/api/omni-reader/mcp/`(streamable-http),鉴权头 `Authorization: Bearer <Cue Key>`。不依赖 `~/.mcp.json` 注册 MCP,也不装本地 Bridge;本地 Bridge 仅在降级方案中使用。 - 手动调用依赖:`curl`(Python 参考实现另需 `python3`,仅标准库)。实际使用时 Agent 自动完成解析,用户只需给一个 B 站 URL + 一句需求。 > **API Key 只能由用户本人创建**:Agent 既不能代生成、也无权查看用户的 Key,**禁止声称"我去生成/查看"**。 > > 检测到未配置或失效时,**必须主动把下面三步说全**(照这个话术说,别只丢一句"请提供 API Key"): > > > 这个技能要一把 Cue API Key 才能跑,三步就好: > > 1. 打开 **[cuecue.cn/hub/api-key](https://cuecue.cn/hub/api-key)**,登录后创建一把 Key(新账号送 500 积分 + 每天 10 免费积分) > > 2. 把 Key **完整复制**下来 > > 3. **直接粘贴发给我**,我帮你写进配置,然后马上就能跑 > > 用户发来 Key 后,Agent 负责写入 `~/.cue/config.json`(格式 `{"api_key": "sk..."}`),写完即可重跑,无需重启客户端。 > > **Key 纪律**:只在用户本机写入,**禁止回显到对话、日志或任何文件示例中**;用户若把 Key 贴在了对话里,提醒他可以去 [cuecue.cn/hub/api-key](https://cuecue.cn/hub/api-key) 轮换一把。 ### 健康检查(跑解析前先验证三件事) 一键诊断(不输出密钥原文): ```bash CUE_KEY=$(python3 -c "import json,os;p=os.path.expanduser('~/.cue/config.json');print(json.load(open(p)).get('api_key','') if os.path.exists(p) else '')" 2>/dev/null || true) CUE_KEY=${CUE_KEY:-$CUE_API_KEY} echo "=== 1/3 API Key ===" && { [ -n "$CUE_KEY" ] && echo "已配置" || echo "未配置!"; } echo "=== 2/3 远程端点 ===" && curl -sS --max-time 10 -X POST "https://mcp.cuecue.cn/api/omni-reader/mcp/" \ -H "Authorization: Bearer $CUE_KEY" \ -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \ | grep -q '"result"' && echo "已连接(3 工具)" || echo "连接失败" echo "=== 3/3 curl ===" && { command -v curl >/dev/null && echo "就绪" || echo "未安装!"; } ``` | 检查 | 预期 | 异常处理 | |------|------|---------| | API Key | `已配置` | **由用户本人**前往 [cuecue.cn/hub/api-key](https://cuecue.cn/hub/api-key) 生成后**复制发给你**(Agent 无法代生成,也无权查看);话术见上方引用块 | | 远程端点 | `已连接(3 工具)` | 等 5 分钟重试;仍不通查网络/DNS,或走「降级方案」;报 `Authentication required` = Key 没带上或已失效 | | curl | `就绪` | 系统一般自带;缺失时用 `python3` + `urllib` 带浏览器 UA 做等价重定向跟随(见步骤 0) | ### 配置成功后引导用户跑第一个任务(必须执行) 健康检查三项全绿 = 环境就绪,但**这是配置流程的终点,不是任务的终点**。三项全绿后若用户还没给出具体任务,**必须主动把用户推向第一次真实调用**,不要停在"环境已就绪": > 环境已就绪 ✅ 下面这些都可以直接跑,比如: > 1. "帮我解析这个 B 站视频 <链接>,把它拆解成爆款脚本,顺便提取视频里的课件 PPT" > 2. "把这个 B 站网课视频转成文字稿,再整理成备考笔记(按考点/题号重组)" > > 挑一个发给我,或直接把你手头的需求告诉我,我现在就跑。 规则: - **主动、可复制**——示例问题贴合本技能真实用法,可直接复制;别只写"你可以问我任何问题"。 - **不要等用户自己想**——用户没开口时也要主动给;否则用户会停在"验证通过"就散场(实测这是新用户流失最集中的一步)。 --- ## 关键技术事实(必读) 1. **B 站 URL 必须走 Cue 远程端点**:`https://mcp.cuecue.cn/api/omni-reader/mcp/`(streamable-http)。本地 Bridge 提交 B 站 URL 会立即被拒(`REMOTE_REQUEST_REJECTED`,`retryable:false`)——B 站有服务端反爬(直连也是 HTTP 412),本地 Bridge 撞墙即拒;远程端点由 Cue 服务端抓取,可正常解析。 2. **远程端点仅 3 个工具**:`parse` / `get_parse_status` / `cancel_parse`,无 `read_result`。结果在 `get_parse_status` 返回 `completed` 时**内联携带**(`result` 字段)。 3. **`detail` 只能用 `text`**:`grounded`/`layout` 在远程报 `UNSUPPORTED_DETAIL`。`text` 模式的结果已含关键帧画面文字(`[画面 mm:ss]` 标注)+ ASR 口播稿(`[说话人N mm:ss]` 标注)。 4. **信封解析**:`tools/call` 返回是 MCP 信封 `{content:[{type:"text",text:"<JSON字符串>"}]}`,必须先取 `content[].text` 再 `json.loads`,否则状态字段永远读不到。响应为 SSE 流(`data: ` 前缀行)。 5. **耗时预期**:≤30 分钟视频 3-8 分钟解析完成;工作日 9:00-10:00 / 16:00-18:00 高峰期可能排队 5-15 分钟。**提交前必须告知用户预计等待时长**(如「这段 5 分钟的视频,预计 3-8 分钟出结果,高峰期可能排队」),避免用户误判卡死。 6. **报错分两层,处理方式相反**:Omni 服务层错误(有 `code` 字段,如 `SOURCE_ACCESS_DENIED`)多数**不要重试**;宿主平台的模型调用错误(`[181001] model call failed`、`async stream error`)**必须自动重试**。详见「错误处理」与「宿主模型调用失败」。 --- ## 标准工作流 ### 步骤 0:URL 预处理 - **b23.tv 短链**:`curl -sI "<短链>"` 取 `Location` 解析出 BV 号(Omni 不认短链)。 - **清理跟踪参数**:去掉 `spm_id_from` / `vd_source` / `share_source` 等,规范为 `https://www.bilibili.com/video/BVxxxxxxxx/`。 - **分P / 合集**:URL 带 `?p=N` 的按该分P解析;给的是合集/favlist 链接时,先问用户要解析哪个分P。**注意**:`x/web-interface/view` 返回的 `data.duration` 是**全部分P时长之和**,没带 `?p=N` 时默认播 P1——提取前务必用 `pages[]` 确认目标分P 的真实时长,别把「93 分P 合计 23.7h」误判成「单条 23.7h」而盲目启动全量批量任务。 - **时长预判**:≤30 分钟单条视频直接提交;超长/多 P 引导用户按分P解析(单个分P 是短视频,页面 URL 通常能过),不要整条提交。 ### 步骤 1:提交解析(远程端点) 告知用户等待时长后,调用 `parse`(参考实现见「解析调用手册」)。返回 `{"status":"processing","operation_id":"op_..."}`,记下 `operation_id`。 ### 步骤 2:轮询取回 循环调用 `get_parse_status`(`wait_ms: 20000`),`status=completed` 后从 `result` 字段取出全文。 > **拿到结果第一时间落盘**:把解析全文原样写入 `<BV号>_raw.md`(或工作区等价文件)。这是后续所有加工步骤的唯一事实源——一旦步骤 3 的模型调用中断,可以从它原地重试,**不必也不许重新提交 `parse`**(重跑 = 白等 3-8 分钟 + 重复扣积分)。长视频尤其不能省这一步。 解析结果的三类原料: - `[画面 mm:ss] ...` —— 关键帧画面 OCR 文字(屏幕文字、标题卡、幻灯) - `[说话人N mm:ss] ...` —— ASR 口播全文 - 其余结构化段落 —— 幻灯/题目卡的结构化 OCR ### 步骤 3:场景化加工(大模型) 按「场景交付规范」用解析原料生成对应交付物。**事实纪律**:口播、屏幕文字、时间戳一律以解析结果为准;镜头、运镜、转场、情绪等解析结果中没有的信息,由大模型基于画面文字与叙事**推断**,必须标注「⚠️ 推断」。禁止编造视频中不存在的内容。 > **本步骤是整个流程中最容易失败的一环**(长输出 + 长上下文)。一旦报 `[181001] model call failed` / `async stream error: ReadError` 之类的模型层错误,**不要重新解析、也不要直接报错收工**——从已落盘的 `<BV号>_raw.md` 原地重试(5s → 20s → 60s,共 3 次),仍不成则按「宿主模型调用失败」拆小分次生成。 ### 步骤 4:交付 - 输出为 Markdown,存工作区,命名 `<BV号>_<场景>.md`(如 `BV1eR4y1b7MK_爆款拆解.md`)。 - 含表格的结果主动问一句:「需要转成 Excel / Word / PPT 吗?」——先确认再生成。 - 长报告先给「一屏速览」(结论先行),再给全文。 --- ## 场景交付规范 ### 场景 1:视频转文字 > **格式铁律:禁止输出"一整坨"文字。**口播稿、净稿、画面文字稿**都必须分段、都必须有小标题、都必须标出重点**。把 ASR 结果原样贴出来(几百行 `[说话人N mm:ss] xxx`,无分段、无重点)是本技能收到最多的差评,不接受。 #### 三件套,按用户需要给全 **A. 口播全文(分段存档稿)**:保留 `[说话人N mm:ss]` 时间戳锚点,但**按语义分段**,不是按 ASR 行机械切。 - 每段开头单独给一行小标题:**`### 【起止时间】本段主题`**,主题自己概括、≤15 字(如 `### 【03:12–06:40】三个必备条件`) - 段内**合并碎片行**:同一句话被 ASR 切成几行的,拼回完整一句再写 - **每段至少 1 处加粗**:结论、数字、专有名词、方法名 断段依据(满足任一即分段):话题/论点切换 · 说话人切换 · 明显停顿 · 结构标识词(「第一 / 接下来 / 另外 / 总结一下 / 最后」)。 **B. 净稿(可直接当文案)**:在 A 基础上**去时间戳、去「嗯 / 啊 / 这个 / 那个」等语气词、补标点断句成文**;但**分段、小标题、加粗重点全部保留**。这是用户最常直接复制带走的一件——**不许退化成不分段的大段文字**。 **C. 画面文字稿**:按 `[画面 mm:ss]` 取屏幕文字,**按主题分组**(如「封面标题卡」/「目录页」/「案例数据页」),不要逐帧罗列;同一页面在多个关键帧重复出现的,**合并为一条**并保留首次出现的时间戳。 **D. 时间线合并稿**(表格,用户要"全量"时给): | 时间 | 段落主题 | 口播(要点) | 屏幕文字 | |------|---------|------------|---------| #### 精简版 vs 全量 - **精简版(默认,「意图路由」里说的就是它)**:B 净稿(**已分段 + 已加粗**)+ 一段内容速览。 - **全量**:A + B + C + D,或按用户点名的某一件单独给。 #### 输出骨架(照这个结构写) ```markdown ## 口播全文(分段) ### 【00:00–00:47】开场钩子 [说话人1 00:00] 你有没有想过,做短视频最难的不是拍,而是**开头 3 秒**?…… ### 【00:47–03:12】条件一:选题要能被搜到 [说话人1 00:47] …… ``` #### 交付前自检(必须过一遍) - [ ] 口播稿有 ≥3 个 `###` 分段小标题(视频短于 3 分钟则按实际段数) - [ ] **每一段**至少 1 处加粗 - [ ] 净稿同样有分段 + 小标题 + 加粗,不是一大坨 - [ ] 无残留碎片行(被 ASR 切散的句子已拼回) - [ ] A 稿的时间戳锚点保留 ### 场景 2:内容分析总结 1. **一句话主旨** 2. **结构分段**:时间轴 → 每段讲了什么(3-6 段) 3. **核心要点**:≤10 条,保留关键数字/结论 4. **金句摘录**:3-5 句可直接引用的原话(注明时间戳) 5. **目标受众与观看价值** 6. **结尾 CTA**:视频如何引导关注/行动 ### 场景 3:爆款视频拆解(照着学、照着抄) 1. **基本盘**:标题 / 时长 / UP主 / 标签(来自解析结果与用户提供;播放点赞等数据用户提供了才写)。 2. **结构分段表**(核心)——按视频实际逻辑二选一或混合: - **流量逻辑**:冷启动钩子(0-5s) → 悬念留存 → 价值交付 → 情绪高潮 → 互动引导 → 转化钩子 - **带货逻辑**:痛点唤醒 → 需求放大 → 方案引入 → 信任证明(证言/对比/演示)→ 价格锚点 → 逼单 → 售后兜底 | 时间轴 | 段落功能 | 时长 | 手法 | 话术摘录 | |--------|---------|------|------|---------| 3. **脚本类型判定**:口播干货型 / 剧情演绎型 / 混剪解说型 / 教程演示型 / 测评种草型 / vlog记录型 / 直播切片型……给出判定依据。 4. **爆款归因**(两层): - 算法层:完播率设计、互动钩子(评论引导/争议点)、转发触发点 - 内容层:选题命中、结构节奏、情绪势能、人设信任 5. **六维评分报告**:见「六维评分体系」,表格 + 总分 + 评级(S/A/B/C)+ 每维一句依据。 6. **抄作业清单**:可复用的骨架模板(占位符化)、钩子公式、话术库、节奏参数(每段时长配比)。 ### 场景 4:视频转脚本 还原为可拍摄的分镜脚本表: | 时间线 | 镜头(景别/机位)⚠️推断 | 运镜 ⚠️推断 | 转场 ⚠️推断 | 画面内容 | 屏幕文字 | 口播/台词 | 情绪 | 备注 | |--------|------|------|------|---------|---------|----------|------|------| - 时间线、屏幕文字、口播 = Omni 实测;镜头/运镜/转场/情绪 = 大模型推断(表头已标注)。 - 表格之后附**口播净稿**(去语气词、断句成文)。 - 若用户要拿去翻拍,主动提示结合场景 5 做改写。 ### 场景 5:爆款视频脚本生成 两种模式,先确认用户要哪种: - **模式 A · 骨架改写**:先跑场景 3 拿到原片骨架 → 保留钩子结构与节奏配比,替换主题/商品/人设/话术 → 产出「你的版本」。 - **模式 B · 原创生成**:让用户给出 方向 / 目的(涨粉·带货·种草·科普)/ 商品或主题 / 受众 / 目标时长 → 生成 **2-3 条差异化脚本**(不同钩子角度)。 每条脚本交付: 1. **分段表**:段落功能 | 时长预算 | 口播要点 | 屏幕文字建议 2. **口播全文**:成稿,带语气与停顿标记 3. **六维质检评分**:生成后自检;任一维度 < 7 分必须改写一轮再交付,并附改写说明 ### 场景 6:视频提示词反推 把画面和内容转成 agent / 生成式 AI 可直接使用的提示词: 1. **整体风格提示词**(一段式):主体 / 场景 / 风格 / 构图 / 色调 / 光线 / 画幅。 2. **分镜提示词序列**(表格):镜号 | 时长 | 画面 prompt(主体-动作-镜头-风格四段式) | 运镜 | 适配工具提示(即梦 / 可灵 / Vidu / Runway / Pika)。 3. **口播 TTS 文案**:带停顿(`/`)与重音(`**加粗**`)标记。 4. **结构化 JSON 版**:`{"style_prompt": "...", "shots": [...], "narration": "..."}`,供 agent 自动化流水线直接调用。 ### 场景 7:视频提取 PPT 内容(逐页课件 + 关键帧截图) 适用于**录播课 / 讲座 / 路演 / 培训**等含幻灯(PPT/课件)的视频。用户要的不是原始 OCR 流水,而是**逐页、去重、带图、可直接复用的课件**。 > ⚠️ **必做纪律**:去重 + 清洗 + 滤废帧。否则会产出用户「读不了、图很多重复、内容乱」的废稿(详见下方「坑点」)。这是本技能被反复返工后固化的硬约束。 #### A. 纯文字逐页课件(用户只要文字时) 1. **一页一行的去重表**:同一张幻灯会在多个关键帧里被反复识别,必须按内容合并——页序唯一,每条 = 一张 distinct 幻灯。表格列:页序 | 出现时间戳 `[画面 mm:ss]` | 页标题 | 要点(幻灯 OCR 结构化)。 2. **标题与要点来源**:页标题优先取 `[画面]` 识别出的标题;要点来自幻灯 OCR。口播稿只用于补全讲解,不直接当成幻灯正文写进要点列。 3. **OCR 清洗**:合并因抽帧产生的断行/碎块,修正明显错字(保留判断依据,必要时用「⚠️修正」标注);不臆造幻灯上没有的内容。 4. **无画面文字的页**:某页只有讲师口播、画面没写字,标注「(口播整理)」,与含画面的页区分开。 5. **完整口播稿(清洗版)**:讲师讲稿按幻灯页序对应分段,修正 ASR 音近错字(actual→Axure、圆型→原型、低保人员型→低保真原型 等),剥离水印文字(如「极客学院 jikexueyuan.com」整行删除)。 6. **课件大纲**:层级 Markdown 大纲(章→节→页)。 #### B. 带关键帧截图的课件(默认,强烈推荐) Omni 解析产物**只有文字 + 时间戳,不含图片文件**;且 Omni 抽帧预算只到约 3:40,长视频后段抽不到。要补齐全片截图,必须**下载整段视频 → ffmpeg 抽帧 → 去重 → 嵌 md**: 1. **解析**:调 Omni `parse` 拿 `[画面 mm:ss]` + `[说话人N]`(用于文字与定位)。 2. **下载整段视频**:view API 拿 cid → playurl 取免登录直链(B 站对未登录只给 360p / 640×360,文字够用;要高清算需登录 cookie)。整段下载是为突破 Omni 的 3:40 抽帧预算,拿到**全片**任意时刻帧。 3. **抽帧 + 去重(核心,禁止固定间隔盲抽)**: - `ffmpeg -vf fps=1/2` 每 2 秒抽一帧作样本; - 逐帧算感知哈希(PIL + `imagehash.phash`),全局聚类,与所有已保留帧汉明距离 > 16 才算新场景; - **人工/读图核对**聚类代表帧,丢弃:片头动画、片尾 logo、同一幻灯的「构建中间帧」(空白→1 要点→完整版,只留完整那张); - 按课件顺序重命名为 `slide_01..NN.png`,存入 `keyframes_final/<BV>_<分P>/`。 4. **生成带图课件 md**(结构): - 顶部:视频元信息 + 数据来源 + 整理方式说明; - **第 1 节「课件截图」**:N 张图,每张 = 图 + 一句准确图注(基于实际帧内容写,禁止把原始 OCR 整段倒灌); - **第 2 节「讲解要点(清洗稿)」**:按主题重写,修正 ASR 错字、剥离水印; - **第 3 节「整理过程说明」**:抽帧数→去重数→最终数,便于用户理解。 5. 主动询问:「需要我把笔记转成 PPTX / Word / PDF 吗?」 **多 P / 长视频特别注意事项**: - `data.duration` 是**全部分P时长之和**,未带 `?p=N` 默认播 P1。提取前用 `pages[]` 确认目标分P 真实时长,避免把「93 分P 合计 23.7h」误判成「单条 23.7h」而盲目启动全量批量任务。 - 若页面 URL 报 `SOURCE_ACCESS_DENIED`(B 站风控,间歇性),走「降级路径」用 MP4 直链;但**直链降级的 Omni 抽帧同样只到约 3 分钟**,完整截图仍需本管线第 2–3 步下载整段补帧。 **坑点(反复踩过,必须避免)**: - ❌ **固定间隔抽帧**(每 20 秒 1 张):塞入大量近似重复帧(人脸/屏幕轻微移动),用户报「图片很多重复」。→ 必须 phash 全局去重。 - ❌ **原样堆砌 ASR/OCR**:满屏音近错字、水印反复出现、QQ邮箱 UI 文本 100 行整段倒灌。→ 必须按主题重写为清洗稿。 - ❌ **同一幻灯构建中间帧当多页**:空白→1 要点→完整版,挤占版面无增量。→ 只留完整那张。 - ❌ **片头动画/片尾 logo 当课件**。→ 丢弃。 - ✅ 正确样板:**264 帧 → phash 去重 ~19 张 → 人工筛掉片头/中间帧 → 最终 9 张真课件**,9 张内容各不同。 **提问示例(用户这样问即可得到整理好的课件)**: - 「解析这个视频,提取里面每一页 PPT 的内容并整理成逐页课件:<B站URL>」 - 「提取这个讲座视频的 PPT,把关键帧截图也放进课件 md,每页去重、文字清洗干净」 - 「用 bilibili-video-studio 把这门 Axure 课的第 3 课转成带图课件笔记」 --- ## 场景 8:备考笔记(题号 + 标准答案) 适用于**考试 / 面试 / 考证 / 题库 / 带背类**视频(教资、公考、高校辅导员、考研、法考、教招等)。这类视频解析原料通常是「题目卡(画面)+ 讲解(口播)」,用户要的不是原始转录稿,而是**可直接背诵的备考笔记**。 **重组规则**: 1. **识别题型结构**:从 `[画面 mm:ss]` 与 `[说话人N]` 中抽题号、题目原文、星级(★)、记忆口诀。 2. **标准答案优先级**:`[画面]` 题目卡/答案文字 > `[说话人N]` 口播讲解。画面有标准答案以画面为准;画面没有的题目,用口播讲解整理成答案,并**清洗 ASR 误识**(口误、同音错字)。 3. **统一为「题号 + 标准答案」结构**:每题一个二级标题(保留原序号与星级),下接【标准答案】块;口诀/记忆点单独成行保留。 4. **来源标注**:答案来自画面还是口播,必要时用「(画面)」「(口播整理)」轻标记,便于用户核对。 5. **禁止编造**:解析结果里没有的题目、答案、数字,不补写;推断内容必须标注。 **交付**: - Markdown,命名 `<BV号>_备考笔记.md`。 - 主动询问:「需要转成 Word / PDF / Anki 背诵卡片吗?」先确认再生成。 **提问示例(用户这样问即可得到整理好的笔记)**: - 「解析这个视频,按『题号 + 标准答案』整理成备考笔记:<B站URL>」 - 「用 bilibili-video-studio 把这个高校辅导员带背视频转成可背诵的备考笔记,每题保留答案和口诀」 - 「提取这个教资/公考带背视频里的所有题目和答案,做成题号+标准答案的笔记」 --- ## 六维评分体系(场景 3 与场景 5 共用) | 维度 | 考察点 | 评分 1-10 | |------|--------|----------| | 钩子力 | 前 3-5 秒留人能力(悬念/冲突/利益点前置) | | | 节奏密度 | 信息与画面切换频率,无冗余 | | | 情绪势能 | 情绪唤起与曲线(共鸣/好奇/焦虑/爽感) | | | 价值密度 | 观众实际获得感(干货/娱乐/情绪价值) | | | 转化引导 | CTA 清晰度与行动驱动力(关注/点赞/下单) | | | 可复制性 | 结构与话术可模板化程度(越高越容易抄) | | - **总分** = 六维平均;**评级**:≥8.5 S / ≥7.5 A / ≥6 B / <6 C。 - 评分必须附依据(引用具体时间戳与话术),不许拍脑袋。 --- ## 解析调用手册 ### curl 三步 ```bash # ① 提交解析(记下返回的 operation_id) curl -sS -X POST "https://mcp.cuecue.cn/api/omni-reader/mcp/" \ -H "Authorization: Bearer $(python3 -c "import json;print(json.load(open('$HOME/.cue/config.json'))['api_key'])")" \ -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"parse","arguments":{"source":"<B站规范URL>","detail":"text"}}}' # ② 轮询(每 15-20 秒一次,直到 status=completed) # arguments 换成 {"operation_id":"op_xxx","wait_ms":20000} # ③ completed 后取 result 字段文本 = 解析全文 ``` ### Python 参考实现(提交→轮询→取结果) ```python import json, subprocess, time, os KEY = json.load(open(os.path.expanduser("~/.cue/config.json")))["api_key"] EP = "https://mcp.cuecue.cn/api/omni-reader/mcp/" def call(name, args, timeout=70): body = json.dumps({"jsonrpc":"2.0","id":1,"method":"tools/call", "params":{"name":name,"arguments":args}}).encode() p = subprocess.run(["curl","-sS","--max-time",str(timeout),"-X","POST",EP, "-H",f"Authorization: Bearer {KEY}","-H","Content-Type: application/json", "-H","Accept: application/json, text/event-stream","--data-binary",body], capture_output=True, text=True) for line in p.stdout.splitlines(): line = line.strip() if line.startswith("data: "): line = line[6:] if line.startswith("{"): r = json.loads(line) if "result" in r: txt = "".join(c.get("text","") for c in r["result"].get("content",[])) try: return json.loads(txt) # 拆信封后再解析 except Exception: return {"_raw": txt} raise RuntimeError(json.dumps(r.get("error","unknown"), ensure_ascii=False)) raise RuntimeError("无响应") st = call("parse", {"source": url, "detail": "text"}) # 提交 op = st.get("operation_id") while st.get("status") == "processing": # 轮询 time.sleep(min(st.get("poll_after_seconds", 10) or 10, 15)) st = call("get_parse_status", {"operation_id": op, "wait_ms": 20000}) r = st.get("result") text = r if isinstance(r, str) else (r or {}).get("text") or st.get("text") or "" ``` ### 错误处理 报错先分清**哪一层**——处理方式完全不同,别混: **A 类:宿主平台错误(Agent 运行时 / 大模型调用层)**——与 Cue 无关,**属瞬时故障,必须重试** | 现象 | 含义 | 处理 | |------|------|------| | `[181001] model call failed`、`openAI API async stream error: ReadError` | 宿主向大模型发起**流式**请求时连接被读中断,非解析失败、**不扣 Cue 积分** | **必须自动重试**:5s → 20s → 60s 共 3 次;仍失败则拆小分次生成。详见下节「宿主模型调用失败」 | | 宿主报 `stream error` / `connection reset` / `timeout` / `rate limit` 等传输层或限流字样 | 同上,属宿主/网络层,与 Cue 无关 | 同上,按瞬时错误退避重试 | | 上下文超限(`context length exceeded` 类字样) | 单次塞入的解析全文过长 | 不要把整篇原料一次性喂进去:先切段摘要,再分段生成;原料落盘后按需读取 | **B 类:Omni 服务层错误(Cue 远程端点返回的 `code` 字段)**——按错误码处理,**多数不要重试** | 错误码 | 含义 | 处理 | |--------|------|------| | `REMOTE_REQUEST_REJECTED` | 多半是误走了本地 Bridge,或 URL 非规范 BV 链接 | 确认走远程端点、URL 已预处理 | | `SERVICE_TEMPORARILY_UNAVAILABLE` | 服务临时不可用(`retryable:true`) | 等 10 秒重新提交同一请求 | | `UNSUPPORTED_DETAIL` | 传了 `grounded`/`layout` | 改回 `detail:"text"` | | `SOURCE_TOO_LARGE` / 超长视频 | >30 分钟或超出上限 | 引导用户按分P/剪辑分段 | | `INSUFFICIENT_CREDITS` | 积分不足 | **按「积分不足专项提示」主动引导**(充值 / 邀请好友得积分 / 等次日免费额度) | ### 宿主模型调用失败(181001 / `async stream error: ReadError`)——必须自动重试 **这不是 Omni 的错,也不是请求写错了。**`[181001] model call failed` 是宿主平台(Agent 运行时)调大模型时的**流式连接读中断**——常见于「长上下文 + 长输出」的单次生成,而本技能的场景 3 / 4 / 7 恰好一次就要产出很长的表格与全文,最容易撞上。它**不消耗 Cue 积分、不影响已完成的解析结果**。 > **铁律:撞上它必须自动重试,不允许把报错原样抛给用户然后停下。先重试,再谈降级。** 1. **先看解析结果拿到了没有** - **已拿到**(`status=completed`)→ 立刻确认解析全文已落盘(见「步骤 2」的落盘要求),后续所有重试都从这份缓存继续,**绝不重新提交 `parse`**(重跑一次 = 白等 3-8 分钟 + 重复扣积分)。 - **未拿到**(失败发生在步骤 1/2 的解析阶段)→ 那是 B 类错误,按上面的错误码表处理,**不要套用本节**。 2. **指数退避重试 3 次**:间隔 **5s → 20s → 60s**,每次用**完全相同的输入**重发。不要改 prompt、不要换参数、不要缩短需求——这类中断绝大多数是瞬时的,原样重试即成功。每次重试都告知用户,别静默卡住: > 模型连接中断,正在重试(第 2/3 次)…… 3. **重试仍失败 → 拆小再试**(这才是根治)。根因是单次生成的内容太长,所以把交付物拆成多次较小的模型调用: - 第 1 次:只出**提纲 + 一屏速览**(短输出,最容易成功); - 第 2..N 次:按「场景交付规范」里的编号小节**逐段补全**,每段一次调用; - 最后一次:拼装成完整文档落盘。 - 拆小后仍失败 → **先把已完成的部分交付给用户**,并说清缺口: > 已产出「基本盘、结构分段表、六维评分」三部分(已落盘 `BVxxxx_爆款拆解.md`),「抄作业清单」因模型连接反复中断未能生成。回复「继续」,我接着补最后一部分。 4. **上限 3 次**。重试是有成本的,不要无限循环;3 次不成就走第 3 步的拆分策略或部分交付。 **以下情况属于「不该重试」,别拿本节硬撞**:`INSUFFICIENT_CREDITS`(积分不足,`retryable:false`)、`SOURCE_ACCESS_DENIED`(B 站风控,走「降级路径」)、`UNSUPPORTED_DETAIL`、`SOURCE_TOO_LARGE`——这四类重试多少次都是同样结果,会白烧时间和积分。 ### 积分不足专项提示(必须执行) 检测到积分不足(`INSUFFICIENT_CREDITS` 或任何"积分不足/余额不够"提示)时,**不要只丢错误码**,必须主动给用户一条拿积分最快的路径: > 你的 Cue 积分不足,本次任务未能启动。两个办法: > 1. **邀请好友得 500 积分(推荐)**:打开 [https://cuecue.cn/](https://cuecue.cn/),点击页面**左下角**「获取专属邀请链接」,分享给好友——好友加入后你再得 **500 积分**。 > 2. **直接充值**:前往 [cuecue.cn/pay](https://cuecue.cn/pay) 订阅(首次充值有优惠);或等次日免费额度。 规则: - 提示要**主动、简短、可点**——把「首页」和「左下角」两个关键动作说清楚,不要让用户自己找入口。 - 积分不足**不要重试**(`retryable: false`)。 - 用户回复已充值/已邀请后,用**完全相同的命令/请求**重跑。 --- ## 降级方案(远程端点长时间不可用时) 远程端点不可用时,优先走**免登录 MP4 直链**降级(见下方「降级路径:SOURCE_ACCESS_DENIED 时」,不涉及任何登录态/Cookie)。若为本地文件,经本地 Bridge(`OMNI_ALLOWED_ROOTS` 授权目录内)以 `detail:"text"` 解析,需用户确认。 --- ## 质量与合规 - **拆解 ≠ 搬运**:结构、手法可学;逐字洗稿发布有版权与平台风险,商用需获授权。 - **带货脚本红线**:功效宣称遵守广告法(禁「最/第一/根治」类绝对化用语),事实性内容提示用户人工核查。 - **推断必标注**:分镜的镜头/运镜/情绪等推断信息一律带 ⚠️,与 Omni 实测数据区分。 - **不解析**:涉密、明显侵权、违反平台规则的内容。 --- ## FAQ **Q: 报 `[181001] model call failed` / `async stream error: ReadError`,然后就停了、没再重试?** 这是**宿主平台的大模型流式调用中断**,不是解析失败,也不扣 Cue 积分——**必须自动重试**:5s → 20s → 60s 共 3 次,输入保持不变;3 次不成就把交付物拆成「提纲 + 分段补全」分次生成,或先交付已完成部分。前提是解析全文已落盘,**重试时绝不重新提交 `parse`**。详见「宿主模型调用失败」一节。 **Q: 用户直接丢了个 b23.tv 短链?** 先 `curl -sI` 解析出 BV 号再提交,Omni 不认短链。 **Q: 解析结果只有口播没有画面文字?** 该视频可能没有文字版面(纯真人出镜口播)。`detail:"text"` 已是画面信息最全的模式,`layout`/`grounded` 当前不可用,勿再尝试。 **Q: 视频超过 30 分钟?** 引导用户:分P链接逐个解析;或剪辑分段后走降级方案本地解析。 **Q: 要 B 站官方 CC 字幕文件?** 官方 CC 字幕需平台登录态,本技能不处理;Omni 的 ASR 结果通常已够用。 **Q: 积分/额度?** 与 cue-omni-reader 共用:新用户 500 积分 + 每天 10 免费积分,同一视频重复解析会复用结果不重复扣费。提示积分不足时,两个办法:**推荐邀请好友**——打开 [https://cuecue.cn/](https://cuecue.cn/),点击页面**左下角**获取专属邀请链接,好友加入后你**再得 500 积分**;或前往 [cuecue.cn/pay](https://cuecue.cn/pay) 充值(首次充值有优惠),也可等次日免费额度。 **Q: 想要的不是转录稿,而是题号+标准答案的备考笔记?** 用场景 8:直接说「按题号+标准答案整理成备考笔记」并附 URL。解析原料里 `[画面]` 的题目卡是权威答案,`[说话人N]` 口播用于补全无画面的题目并清洗误识。 **Q: 提取 PPT 时同一页出现好几次?** 因 Omni 按关键帧抽帧,停留较久的幻灯会在多个帧被重复识别。场景 7 已要求按内容**去重**——一页一行、保留首次出现时间戳,交付的是 distinct 幻灯而非每一帧识别结果。 **Q: 场景 7 用户拿到 PPT 笔记后说「读不了、图太多重复、内容乱」?** 必查是否走了正确的去重+清洗管线:① 必须用感知哈希(phash)全局聚类去重,不能用固定间隔抽帧;② 必须按主题重写讲解稿、修正 ASR 音近错字、剥离水印,不能原样堆砌原始 OCR/ASR;③ 必须丢弃片头动画/片尾 logo/同一幻灯的构建中间帧,只留最终完整版。坑点详见解场景 7「必做」章节。 --- ## 降级路径:远程端点报 SOURCE_ACCESS_DENIED 时(2026-09-09 实测) 远程端点对 B 站页面 URL 也可能被 B 站风控拦截(返回 `SOURCE_ACCESS_DENIED`,`retryable:false`,直连 B 站页面为 HTTP 412)。**该拦截是间歇性的、按视频/时段波动**——同一条视频换个时间窗口可能直接通过,并非每条都拦;且**只作用于需服务端抓取的页面 URL**,直链媒体(音频/视频文件 URL,如 SoundHelix 的 .mp3)不经过 B 站页面反爬,通常不受影响。实测:BV1eR4y1b7MK(辅导员带背)正常通过、未触发此错,仅 BV1Gx41187Bj(Axure 课)触发后走 MP4 直链降级。此时**先确认视频本身可访问**(`api.bilibili.com/x/web-interface/view?bvid=<BV号>` 返回 `code:0` 即公开正常),再走「MP4 直链 → 远程 parse」路径,无需用户登录态: ```bash # ① 取 cid curl -sS --compressed "https://api.bilibili.com/x/web-interface/view?bvid=BVxxxxxxxx" \ -H "User-Agent: Mozilla/5.0" -H "Referer: https://www.bilibili.com/" # ② 取免登录 360p MP4 直链(durl[0].url,带 deadline 时效参数,需尽快提交) curl -sS --compressed "https://api.bilibili.com/x/player/playurl?bvid=BVxxxxxxxx&cid=<cid>&qn=64&platform=html5&high_quality=1" \ -H "User-Agent: Mozilla/5.0" -H "Referer: https://www.bilibili.com/" # ③ 把 MP4 直链作为 source 提交远程端点 parse(detail:"text"),流程同标准工作流 ``` 注意事项: - 直链含 `deadline` 时效参数,获取后**立即提交**解析,不要存储复用。 - 360p 画质 OCR 可用但抽帧覆盖有限(实测 2:49 视频仅捕获片头题目卡,后段拿不到),完整内容以 ASR 口播为准;若要**带全片关键帧截图**,仍须场景 7 管线第 2–3 步下载整段补帧。 - 此路径不适用于需要大会员/充电/登录的视频(playurl 拿不到或为试看片段)。 - 视频元信息(标题/UP主/发布时间/时长/播放量)可顺带从第 ① 步 API 获取,充实交付文档的基本盘。 - **多 P 视频的正确解析法**:整条超长视频(如 23.7h 系列课)页面 URL 会 `PARSE_FAILED`(超长),但单个分P 是几分钟短视频,用**分P 页面 URL(`?p=N`)** 即可正常通过且覆盖整课——不必依赖整条直链降级。 --- ## 参考 - 解析底座:cue-omni-reader 技能(远程端点调用规范、错误码总表) - 在线体验:https://cuecue.cn/hub/omni-reader - API Key 管理:https://cuecue.cn/hub/api-key - 订阅付费页面:https://cuecue.cn/pay
存档时间线
| 版本 | 存档时间 | 内容哈希 | 内容 |
|---|---|---|---|
| v1 | 2026-09-28 00:48 | 5db1b4c3 | 可取 |
版本索引永久保留;内容副本只保留最近 2 版,更早版本仅留索引与哈希(存档时间线的证据链不会因此断裂)。
提交举报 / 纠错
侵权举报经核验成立后,我们会即时下线该条目并删除已存的内容副本。