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

3.9 KiB
Raw Blame History

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. 集成测试