| name | skipping-lectures |
| description | Turn recorded lectures into study-ready material: transcripts, key points, AI courseware PPTs and notes, so the user can skip classes and still ace exams. Use when the user mentions 录播课/网课/课程回放/不想上课/翘课, turning videos into notes or text, extracting course key points, batch transcribing lectures, exporting courseware/讲稿/笔记, or exam prep material, or when videos must be processed from a school platform (zbkt.ncu.edu.cn 香樟云课堂) or Baidu Pan (百度网盘) AI batch export. Not for generic note-taking, video editing, or unrelated ASR. |
skipping-lectures — 录播课 → AI 复习资料流水线
学校每节课都有录播,老师课上强调的内容几乎都出现在试卷上。本 skill 把录播视频
变成「一页纸就能复习」的资料:转写文本 / 提炼重点 / AI 课件 PPT / 讲稿 / 笔记。
这是编排层:实际干活的是两个配套工具仓库(xiangzhang-course-pipeline、
baidu-ai-batch),本 skill 负责判断走哪条路线、给出正确命令、复用共享知识
(CDP 登录态等)。密钥只走环境变量或 gitignore 的 config.json,绝不写进仓库。
两条路线
| 路线 | 适用场景 | 产出 | 工具 |
|---|
| A 转写为主 | 平台录播还在学校平台、本地磁盘紧张 | 每节课一份文本(复习用) | xiangzhang-course-pipeline(抽音频 + ASR) |
| B 网盘 AI 产出 | 视频已在百度网盘(或愿意上传) | AI 课件 PPT / 讲稿 / 笔记 | baidu-ai-batch |
两条路线不互斥:文本和 PPT/笔记可以都做。视频已在网盘 → 直接 B;
还没下载/抽过音频 → 默认先 A 拿文本(省空间),需要 PPT 再走 B。
工作流
-
确认目标:问清视频现在在哪(平台没下/已下载/在网盘)、要什么产出(一两个
问题内搞定,别追问细节)。照上表选路线,两路线可并行。
-
环境检查:两仓库是否在本地(常见位置 D:\文档\学业资料\1大三\ai_test\,
找不到就 clone 或问用户);调试浏览器是否开着(curl http://127.0.0.1:9222/json/version
能通即就绪,没开先启动并请用户登录平台/网盘);config.json 是否已从
config.example.json 复制并填好 courses/videoFolder。
-
分步执行:每步开跑前告诉用户"现在做 X(第 N 步 / 共 M 步)",长步骤
(ASR、网盘导出)说明预期耗时;串行执行是故意的——并发会触发网盘限流。
-
失败即改道:
| 失败现象 | 直接改道 |
|---|
| 抽音频/下载 401/403 | 直链过期:重跑 rebuild_fresh_manifest.cjs 再导 CSV,不重采列表 |
| CDP 连不上 | 检查 9222 端口与调试浏览器是否保持打开 |
| ASR 失败/无结果 | 查 X-Api-Status-Code 与 volc.seedasr.auc 资源 ID;不行换 MiMo |
| 产物是 85~91 字占位 | 服务端生成失败:重跑无用,网页端手动重试该节后跳过 |
| 页面改版脚本失效 | 按 references/platform-internals.md 重新探测,不硬猜 |
其余异常见 references/troubleshooting.md。
断点续传:PPT 看 state.json,讲稿/笔记按本地文件存在跳过,--force 重跑。
-
验证:核对产物数量(几门课 × 几节 = 多少份),失败项单独列出,别只报总数。
-
收尾汇报:产物在哪(transcripts/<课程>/、output/、网盘视频目录的 PPT)、
成功/失败数量、失败项下一步;文本类产物提示可丢给任意 LLM 提问/总结,或按课程
合并后提炼重点(一页纸复习)。
共享前置:调试浏览器(CDP)
两个工具都通过 CDP 复用已登录的浏览器会话,不用登录两次:
msedge --remote-debugging-port=9222 --user-data-dir=%LOCALAPPDATA%\edge-debug-profile
独立 user-data-dir(与日常浏览器分开),启动后在浏览器里登录平台/网盘,保持开着;
脚本跑批时新建标签页干活,不影响正常上网。pipeline 的 01_links 脚本用 --cdp
flag(端口走 config 的 cdp.port);baidu-ai-batch 无 flag,读 config 的
host/port(默认 127.0.0.1:9222)。
路线 A:平台录播 → 转写文本
在 xiangzhang-course-pipeline 仓库根目录(步骤详见该仓库 README):
node 01_links/collect_course_items.cjs --config config.json --cdp
node 01_links/collect_media_details.cjs --config config.json --cdp
node 01_links/export_fresh_media_urls.cjs --config config.json
python 02_download/extract_audio.py --config config.json --courses=全部
python 03_asr/batch_transcribe.py --csv media_urls/all_fresh_media_urls.csv --out transcripts
cp config.example.json config.json 后填 courses(课程名支持部分匹配,
如平台显示「临床药理学(1班)」可配「临床药理学」)
- 火山密钥:
VOLC_APP_ID / VOLC_ACCESS_TOKEN(环境变量);MiMo 备选:MIMO_API_KEY
- 直链带签名会过期(下载 401/403)→ 重跑
rebuild_fresh_manifest.cjs 再导 CSV
- ASR 状态码在响应 Header
X-Api-Status-Code,20000000=成功
路线 B:网盘视频 → AI 课件/讲稿/笔记
视频进网盘(离线下载或本地上传),然后在 baidu-ai-batch 仓库:
npm install && cp config.example.json config.json
node bin/list-files.cjs
node bin/export-ppt.cjs
node bin/extract-manuscript.cjs
node bin/export-notes.cjs
不装 Node 也行:装 Tampermonkey 后用 userscript/baidu-ai-batch.user.js
(在网盘文件列表页点「收集本目录视频」→「开始跑批」)。
路线 B 的坑(先读,能省几小时)
- 串行执行是故意的:并发触发限流(早期 20 路并发 PPT 失败率 80%,改串行后近 100%)
- 假成功检测:生成失败时页面留 85~91 字占位模板,按
minContentLen(默认 100)判死
- PPT 导出要点课件区右上角导出图标(
.ai-course__export-container),聊天框快捷指令必挂
- 笔记在
#noteIframe 里读不到:把 iframe 的 URL 单独开标签页,iframe 变顶层页就能读 DOM
- 重复跑会积累带时间戳的重复 PPT,记得清理
- 服务端生成失败的重跑也没用(黑屏/无内容/整门课挂掉),需网页端手动重试
与 pipeline 衔接(视频进网盘)
平台 URL 是内网地址(*.ncu.edu.cn),网盘离线下载不保证可用 → 本地批量下载
(download_videos.py)→ 改名(rename_videos.py)→ 网盘客户端上传 →
传完本地删(视频只在网盘)。直链来源:media_urls/all_fresh_media_urls.csv。
安全策略
- 密钥(火山
VOLC_*、MiMo MIMO_API_KEY 等)只走环境变量或 gitignore 的
config.json——所有仓库都是公开的,密钥提交=直接泄露。
- 不把平台 Cookie / 登录凭证写入代码、日志或文档。
- 只操作用户明确要求处理的课程/视频;不批量触碰无关数据。
- 平台/网盘页面改版时按
platform-internals 重新探测,不硬猜、不逆向平台外的东西。
用户愿景(为什么这么做)
- 老师课上强调的内容≈考点,录播是完整信息源
- 一节课的文本可能一页纸就够——为深度思考/论文/睡觉争取时间
- 本 skill 的目标是让「不上课」成为可行选择,而不是鼓励摆烂
常见短语映射
| 用户说 | 实际要做 |
|---|
| "把课程录播整理一下" | 先问视频在哪 → A 或 B |
| "视频太多了不想下" | 路线 A(只抽音频),或 B(视频进网盘) |
| "帮我把网盘里的课批量导 PPT" | 路线 B export-ppt |
| "AI 提炼这门课的重点" | A 转写文本后交给 LLM 总结,或 B 的笔记 |
| "学校平台不让下载" | 平台页面有直链(recordvideo 接口),用 pipeline 提取 |