Tobatsu · 视频二次编辑 · 实施计划

要做什么

把"前端可视化改字幕 / 画中画 → 重新生成"做出来。引擎都现成,这页讲清每块谁做、做什么。

2026-06-30 · 背景与设计见 gaps-and-design · 本页只讲落地

一句话

出片时把重渲要的原材料全挂在"最终成片"这一个结果下面(成片卡 = 可重编辑工程)。前端选中成片 → 改字幕 / 改画中画 → 提交结构化配置(不是 ASS)→ 后端一个重渲任务,按"改了哪层"只跑需要的步,出新成片。

已经定死的(不再讨论)

1. 发配置,不发 ASS。字幕 = line-groups(断句)+ 几个样式字段。
2. 断句 = 改 line-groups 的 page_index / word_indices。时间由词级时间戳自动推,前端不算时间。
3. 字号 / 最大行数一律以后端为准。字号是真实渲染像素;同屏默认 ≤2 行(超出走滚动)。前端预览读后端规格,不自己猜。
4. 原材料挂在最终成片下。选中成片即可恢复全部状态、重渲。
5. 一个统一重渲入口,后端按需跑 compose→burn。不让前端拼两步。

架构图

最终成片(成片卡) 选中 → 重编辑 下面挂着全部原材料(canvas_extra) noSubtitleVideo ✅无字幕底片 srt ✅ digitalHuman ✅数字人 lineGroups ✕断句+时间 composeParams ✕PIP 配置快照 subtitleStyle ✕字幕样式快照 统一重渲任务 · 按需 compose→burn

绿 = 已返回 · 红 = 要补挂 · 底栏 = 一个后端重渲入口

要做的事(按模块)

A
combo / superdub 出片:把原材料全挂到最终成片下 后端 · 共享 runner(combo + voiceover_align 一处改两处生效)

扩展 out_primary.canvas_extra。现有 srtURLnoSubtitleVideoURL,要补:

lineGroupsURL断句 + 词级时间(把内部已生成的 subtitle-line-groups.json 上传挂上)
digitalHumanURL指向已返回的 out_digital_human(PIP 重合成的 pip 路)已返回,接上
composeParams这次用的 PIP 配置快照(layout / 浮窗位置大小形状 / 分屏比例 / 取景 / 音量 / 抠像 / 描边)
subtitleStyle当前字幕样式快照(caption_style / position / position_pct / fontsize)
mainVideoURL主视频 = 原始 source(确认是否带 reframe;reframe 可由合成引擎重做)确认
B
字幕重渲入口:subtitle_burn_in 开"结构化模式" 后端 · subtitle_burn_in 工作流(burn 脚本已支持)

给它加结构化输入,内部走 burn 的 line-groups 路:

  • 输入:无字幕视频 + line_groups + caption_style + caption_position/pct + override_fontsize
  • 底层 burn.py 已支持这条(combo 用的就是它),主要改工作流的输入 schema + prompt,技能基本不动。
C
统一重渲工作流:一个入口,按需 compose→burn 后端 · 第二期(PIP 进来时建)· 复用 combo runner 现成两段

一个入口覆盖三种编辑组合,内部按"改了哪层"跑最少的步。复用 combo runner 的 run_pip_compose + run_subtitle_burn(跳过出音/数字人生成,从合成这步开始)。

用户改了跑哪几步字幕
只字幕只 burn(1 步)用新字幕配置
只 PIPcompose → burn(2 步)原字幕配置自动重贴(位置可跟随新布局)
字幕 + PIPcompose → burn(2 步)用新字幕配置

"改 PIP 必然连带重烧字幕"(合成视频变了)这个依赖,在这个工作流内部兜掉,前端只交一次配置。第一期若只做字幕,可先直接用 B(subtitle_burn_in),不急着建 C。

D
后端返回"渲染规格",供前端预览镜像 后端 · 随成片元数据返回

字号/行数归后端后,前端预览必须用后端规格画才能和成片一致:

  • 每画幅的真实字号基线(前端按比例缩到预览)
  • 按视频尺寸算好的安全边距 + ≤2 行自动换行结果
  • 四个预设的视觉定义、字幕位置锚点公式
  • PIP 几何(浮窗矩形 / 分屏区域 / 形状)
E
前端 GUI 前端 · 产品侧
  • 成片卡两个入口:改字幕 / 改画中画,都打开同一个编辑器(不同面板)
  • 打开时读成片下挂的元数据 → 恢复表单 + 预览(不套前端默认值)
  • 预览用后端规格画;断句 = 拖拽 / Enter-Backspace 改 page_index 分组
  • 提交 = 结构化配置(line-groups + 样式 / PIP 参数),写回成片元数据

分期

第一期字幕重编辑闭环 = 模块 A(只挂 lineGroupsURL + subtitleStyle)+ B + D(字幕部分)+ E(字幕面板)。纯接线,能力全是现成的。
第二期画中画重编辑 = 模块 A(补 composeParams / digitalHumanURL)+ C(统一重渲工作流)+ D(PIP 几何)+ E(PIP 面板)。数字人已返回、引擎已就绪。

要产品 / 各方拍的点


后端要做:A 出片挂材料 · B 字幕结构化入口 · C 统一重渲工作流(二期)· D 渲染规格返回 | 前端要做:E 双入口编辑器 + 预览镜像 + 结构化提交