把讲稿或已有旁白做成一页会讲话的课件:单页 HTML、音频、逐句时间轴、画布内字幕、可选认知门禁,也可导出线性视频。当用户要求把讲稿/文稿/演讲稿做成带旁白音频的网页课件、生成 TTS 与字幕时间轴、或把成品课件导出成 mp4 时使用;不负责掌握度、学习进度或复习系统。
概览
把一段讲稿变成**:旁白音频是唯一时钟,画面、字幕、章节、门禁全部跟着 audio.currentTime 走,也可以顺手导出一条线性视频。 不需要服务器、不需要构建、不需要账号——成品是一个目录,双击 index.html 就能放。 这是一个 Claude Code / Agent 环境的 :SKILL.md 是给模型读的契约,本 README 是 给人的。你不需要理解它内部怎么拼页面,只需要知道**。 一个左右两栏的单页课件。左边是"会跟着旁白变的舞台 + 播放条",右边是可查的参考资料: 图里:左栏上块是章节头;中间框是 stage(内联 SVG 场景,一句一个视觉步,框底那行是画布内字幕); 最下面是 rack 播放条(播放 / 倒回 / 进度条兼章节刻度 / 第几句 / 时间 / 倍速 / 全屏); 右栏是参考资料(要点 · 术语 · 手感实验),不参与播放与评分。 - :一句话一个画面步,走到哪句播到哪句,空档停在上一句不闪白; - :字幕长在画面里,位置和字号固定,文案不用你维护第二份; 多人对话(问答 / 情景剧)时左侧显示说话人标签; - :每节起点一根刻度,悬停报段名,可点可拖;指针落上来那一刻 轨道与刻度一起变厚("现在可以拖"画在你正指的地方),字幕下面还有一条细线跟着 旁白走完这一句; - :画面字幕门禁全是时钟的纯函数,变速只是时钟走快些; - :空格播放/暂停、←→ 快擦、F 全屏、**之外,进度条本身是 可聚焦的 slider(←/→ 细调 1s、Home/End 到头/尾);课程结束点 ▶ 即从头重播; - :在真正的认知转折点拦一下,答对才放行继续(选择题 / 图上点选 / 归类拖放 / 排序 / 复述对照五种); - :不需要录屏,逐句截帧拼成线性视频,旁白同步;--no-audio 出 纯画面成片(预览 / 后期自行配音 / 去掉占位音轨); - :把逐句时间轴序列化成字幕文件——无障碍跟随阅读、 剪辑 / 压制软件后期、多语言与复习的交换格式,一行命令导出。 - :check_gates --json 把交付检查结果(verdict / 静态 / 浏览器 / exit_code)作为一个 JSON 文档输出,CI 与 agent 可直接消费。 掌握度、学习进度、复习排期、题库系统——那些是平台层的事。
README
以下为原文 README 节选,完整内容请查看原文。
Courseware Studio
把讲稿转换为音频驱动的单页 HTML 课件:旁白音频的 currentTime 是唯一时钟,
画面、字幕、章节与门禁全部由它派生;也可以导出线性 MP4 与标准字幕。
讲稿 ──► 逐句旁白 ──► 音频 + 逐句时间轴 ──► 单页 HTML ──►(可选)MP4 / SRT / VTT
成品是静态目录,播放不需要服务器、构建流程或账号,双击 index.html 即可。
本仓库是一个 Claude Code / Agent 环境的 skill:SKILL.md 是给模型读的契约,
本 README 面向使用者,说明输入、产物、命令与配置。
1. 产物
1.1 页面结构
左栏自上而下为章节头、SVG 舞台、画布内字幕与播放器行;右栏只放可查询的参考资料。 窄屏退化为单栏。
1.2 能力
- 逐句同步:一句旁白对应一个视觉步;换场与句间空档保留上一句画面与字幕。
- 画布内字幕:文本只来自时间轴,位置与字号固定;多人对话显示说话人标签; 已念过的字满墨、未念到的字压暗(跟读点亮)。
- 词拍:旁白念到哪个词,画面上那件东西就套上四角括号(词窗由字数与标点现算, 几何贴住目标实时测量);标记累积到句末,导出成片也读得到"这一句点过谁"。
- 对照窗:两个版本同窗叠放、互补裁切,接缝随句间步进擦过,版本标签与画面同步; 导出帧与减动效直接落在该句声明的对照档位。
- 章节进度条:每节起点一根刻度,悬停显示段名与时间,可点击、可拖动; 支持 0.75×–2× 倍速、全屏与键盘操作。
- 门禁:在认知转折点插入
choice / hotspot / bucket / sequence / recall五种交互,答对后放行。 - 导出:逐句截帧生成 MP4(无需录屏),或从同一时间轴导出 SRT / WebVTT。
- 机器可读检查:
check_gates.py --json输出verdict/static/browser/note/exit_code,供 CI 与 agent 消费。
1.3 不负责的范围
掌握度、学习进度、复习排期与题库系统属于平台层,不在本 skill 范围内。门禁放行 只表示"这堂课可以继续",不表示"已掌握";页面不会出现"已通关"之类的表述。
播放位置同样不保存:关闭页面后从头播放,中途回看依赖进度条上的章节刻度。
2. 输入与输出
2.1 输入类型
| 输入 | 处理方式 |
|---|---|
| 完整讲稿(粘贴或文件) | 直接分句、合成并制作页面 |
| 文档、网页或素材 | 先写讲稿,确认后再制作 |
| 一个主题与讲解要点 | 先写讲稿,确认后再制作 |
| 已有的音频与逐句文本 | 跳过 TTS;使用现成时间轴,或先由外部工具生成 |
使用内置 TTS 时,讲稿需整理为旁白脚本 JSON;字段定义与多人对话写法见
references/script.md §1。最小结构如下:
{
"title": "主题",
"segments": [
{"id": "seg-1", "title": "第一段", "text": "第一句。第二句。"}
]
}
text 同时是朗读正文与字幕后唯一文本来源。可选字段包括 opening / closing、
段级 hl(结论句)、beat(句级停顿与语速)以及 speakers + dialogue
(多人对话)。
2.2 可指定的参数
-
音色与语速:默认「冰糖」1.0×;内置八种音色(冰糖、茉莉、苏打、白桦、Mia、 Chloe、Milo、Dean)。查看完整列表:
python scripts/narration.py --list-voices -
门禁数量:默认按内容在认知转折点安排 1–2 道,长课最多 3 道;可要求增加或关闭。
-
导出格式:默认只生成网页;MP4 与字幕需显式指定。
-
讲稿结构:分段方式、每段内容与开场问题由作者决定,也可完全交给 agent 起草。
开场问题是影响课件质量的关键判断:它应当针对学习者大概率会答错的点,而不是讲师 自己关心的问题。这个判断无法由工具替代。
2.3 输出目录
lesson/
├── index.html # 成品页面,可双击打开
├── interactive_runtime.js # 交互手势与门禁 runtime
└── audio/
├── combined.wav # 完整旁白音轨
└── narration_timing.json # 逐句起止时间
3. 工作流与命令
| 步骤 | 命令 | 输出 |
|---|---|---|
| 1. 整理讲稿 | 人工或 agent | narration-source.json |
| 2. 合成旁白 | narration.py |
audio/combined.wav + audio/narration_timing.json |
| 3. 生成时间轴 | build_timeline.py |
内联时间轴 `` |
| 4. 组装页面 | build_page.py |
index.html + audio/ + interactive_runtime.js |
| 5. 交付检查 | check_gates.py |
检查报告 |
| 6. 导出视频(可选) | export_video.py |
.mp4 |
| 7. 导出字幕(可选) | export_subtitles.py |
.srt / .vtt |
完整命令行流程:
# 2. 旁白:逐句合成并拼接,输出音频与时间轴
python scripts/narration.py --source narration-source.json -o audio/
# 3. 时间轴:压成可内联的 片段
python scripts/build_timeline.py \
--timing audio/narration_timing.json \
推荐工具
换一个关键词,或者移除筛选条件。
安装
npx skillfish add iroqi/courseware-studio