Files
lesson-highlights/docs/GUI_EDIT_DESIGN.md
T
2026-05-03 23:49:14 +08:00

113 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Piano Highlight Generator - GUI 修正功能设计
## 背景
现有 GUI 仅有"选文件+开始处理"的功能,跑完后用户无法对结果进行修正。本设计在跑完之后提供知识点编辑和字幕编辑能力,支持增删改,并自动判断如何应用修改。
## 名词定义
- **clip**:底层实现细节,表示一个视频片段(start/end/title_segments
- **知识点**:用户感知的单位,即 clip 的 title
- **标题**v1_title.srt,知识点名称的大字叠加层
- **字幕**v1_content.srt,实际转录文本的小字叠加层
## 用户流程
```
PPT解析 → 跑流程 → GUI显示结果
┌─────────┴─────────┐
编辑知识点 编辑字幕
(改/删/增标题) (改/删文本)
↓ ↓
系统自动判断如何重生成 直接应用用户修改
(删json/重新匹配/处理重叠) (跳过LLM校正)
↓ ↓
└──────┬─────────────┘
自动重烧
用户用播放器查看
```
## 知识点编辑
### 用户操作
- **改标题**:直接编辑文字
- **删 clip**:删除该 clip
- **新增知识点**:输入新标题(PPT 里没有的也行)
### 系统行为
| 操作 | 底层动作 |
|------|---------|
| 改 clip N 标题 | 删 `clipN.json` → 用新标题在 transcript 里重新匹配 start/end → 处理重叠 → 重烧 |
| 删 clip N | 从 generated_config.yaml 删掉该 clip → 删 `clipN.json` + `clipN.mp4` → 重烧 |
| 新增知识点 | 用新标题在 transcript 里匹配 start/end → 判断是否合并到相邻 clip(重叠处理)→ 重烧 |
### 重叠处理
新增/修改后如果与现有 clip 重叠,系统自动:
1. 合并重叠片段
2. 生成 title_segments(按 transcript 关键词首次出现时间切分)
3. 每个标题最多显示 title_duration 秒
## 字幕编辑
### 用户操作
直接编辑字幕文件中的文本(v1_content.srt)。
### 系统行为
- **改字幕文本**:以用户修改为准,跳过 LLM 校正,直接重烧
- **删字幕条目**:用户删除某条,系统保留,其他正常重烧
- **改时间轴**:不支持(时间轴由底层逻辑决定)
## 底层原子化支撑
底层需要提供以下能力,供 GUI 调用:
```
reextract_clip_title(clip_index, new_title)
→ 删 clipN.json → 重新匹配 → 更新 generated_config.yaml
delete_clip(clip_index)
→ 从 config 删 → 删 json/mp4
add_clip_by_title(new_title)
→ 在 transcript 里匹配 → 判断合并/新增 → 更新 config
reburn_titles()
→ 只重烧标题轨(已有 json)
reburn_subtitles(user_texts)
→ 直接用用户文本烧录字幕,跳过 LLM 校正
```
CLI 的 `burn_only.py` 已经部分支撑"直接重烧"的能力,需要增强以支持按原子操作重烧。
## 数据流
```
generated_config.yaml ← 唯一的 clips 配置源(用户编辑后同步更新)
intermediates/clip*.json ← 转录缓存(按需删除重生成)
subs/v1_title.srt ← 标题轨(可手动编辑后重烧)
subs/v1_content.srt ← 字幕轨(用户直接改文本)
```
## 架构原则
1. **CLI/GUI 底层复用**:所有原子操作在 core/ 里,CLI 和 GUI 都调用同一套
2. **config 是唯一真源**`generated_config.yaml` 是 clips 事实,GUI 编辑后写回此文件
3. **按需重生成**:只删除/重生成受影响的 clip,不动其他
4. **字幕以用户为准**:字幕文本修改跳过 LLM 校正
## 实施步骤
1. 底层原子化:core/ 增加 `reextract_clip`, `delete_clip`, `add_clip_by_title` 函数
2. CLI burn_only 支持部分重烧(支持只烧标题或只烧字幕)
3. GUI 增加编辑界面:clip 列表 + 字幕列表
4. 集成测试