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。不让前端拼两步。
架构图
绿 = 已返回 · 红 = 要补挂 · 底栏 = 一个后端重渲入口
要做的事(按模块)
Acombo / 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 步) | 用新字幕配置 |
| 只 PIP | compose → burn(2 步) | 原字幕配置自动重贴(位置可跟随新布局) |
| 字幕 + PIP | compose → burn(2 步) | 用新字幕配置 |
"改 PIP 必然连带重烧字幕"(合成视频变了)这个依赖,在这个工作流内部兜掉,前端只交一次配置。第一期若只做字幕,可先直接用 B(subtitle_burn_in),不急着建 C。
D后端返回"渲染规格",供前端预览镜像 后端 · 随成片元数据返回
字号/行数归后端后,前端预览必须用后端规格画才能和成片一致:
- 每画幅的真实字号基线(前端按比例缩到预览)
- 按视频尺寸算好的安全边距 + ≤2 行自动换行结果
- 四个预设的视觉定义、字幕位置锚点公式
- PIP 几何(浮窗矩形 / 分屏区域 / 形状)
- 成片卡两个入口:改字幕 / 改画中画,都打开同一个编辑器(不同面板)
- 打开时读成片下挂的元数据 → 恢复表单 + 预览(不套前端默认值)
- 预览用后端规格画;断句 = 拖拽 / Enter-Backspace 改 page_index 分组
- 提交 = 结构化配置(line-groups + 样式 / PIP 参数),写回成片元数据
分期
第一期字幕重编辑闭环 = 模块 A(只挂 lineGroupsURL + subtitleStyle)+ B + D(字幕部分)+ E(字幕面板)。纯接线,能力全是现成的。
第二期画中画重编辑 = 模块 A(补 composeParams / digitalHumanURL)+ C(统一重渲工作流)+ D(PIP 几何)+ E(PIP 面板)。数字人已返回、引擎已就绪。
要产品 / 各方拍的点
- 第一期范围:只字幕,还是字幕 + 画中画一起上?(建议字幕先行)
- 确认字号 / 最大行数以后端为准(默认同屏 ≤2 行),前端镜像。
- 确认"改画中画会连带重烧字幕"这个链路依赖可接受。
- 左右位置 / 同屏 3 行+ 这类要动渲染核心的,是否第二期排期。
后端要做:A 出片挂材料 · B 字幕结构化入口 · C 统一重渲工作流(二期)· D 渲染规格返回 | 前端要做:E 双入口编辑器 + 预览镜像 + 结构化提交