DramaClaw 把分镜、配音,合成放进同一条流水线,改动前先确认影响哪几步

文章导读
片子跑到一半要改分镜或换配音,先别急着整条重跑。判断标准通常在交接点:分镜表交出去的是逐镜台词、时长和画面描述,配音环节据此产出逐镜音频和一份时间索引,合成环节再拿分镜表加音频索引排时间线。只要改动能落在具体镜号上,需要重建的往往只是被这次改动喂到的那几段;前提是产物确实落了盘、命名能对应回镜号、改动前有一份可回退的快照。这三件事缺一件,就只能保守地全量重来。
📋 目录
  1. Ⅰ 把一条片子拆成流水线上的几个交接点
  2. Ⅱ 在项目目录里定位每类产物落在哪
  3. Ⅲ 改动分镜后判断哪些下游产物需要重建
  4. Ⅳ 给每次改动留一份可回退的快照
  5. Ⅴ 用一条短片验证交接没有断裂
A A

片子跑到一半要改分镜或换配音,先别急着整条重跑。判断标准通常在交接点:分镜表交出去的是逐镜台词、时长和画面描述,配音环节据此产出逐镜音频和一份时间索引,合成环节再拿分镜表加音频索引排时间线。只要改动能落在具体镜号上,需要重建的往往只是被这次改动喂到的那几段;前提是产物确实落了盘、命名能对应回镜号、改动前有一份可回退的快照。这三件事缺一件,就只能保守地全量重来。

改 DramaClaw 项目前先确认三件事:分镜表的改动是否触及镜号、时长、台词、角色四个字段;配音轨是否按镜号一一对应且带索引;合成工程是否只引用索引而不复制音频。字段级改动一般只需重跑受影响的镜和受影响的时间线区段,镜号增删或时长变化则会波及后续镜的排布。落地动作是先 diff 两版分镜表、再按镜号圈定重跑范围、最后用 md5 校验未受影响音频是否原样保留;无法确认的部分建议按全量处理,代价是多花时间而不是产出错版。

把一条片子拆成流水线上的几个交接点

DramaClaw 这类把分镜、配音、合成串成一条流水线的工具,本质上是用文件在环节之间传话。看清每个环节交出去的是什么、以什么形式交出去,才知道改一处会碰到谁。

环节输入物输出物交接载体
分镜剧本或大纲、角色与音色设定、镜头约束配置分镜表:镜号、台词、时长、画面描述、配音角色文件(如 storyboard.json / .csv),可 diff、可版本化
配音分镜表中的台词与角色字段、音色配置逐镜音频文件、镜号到音频与起点的索引文件为主(音频 + 索引);部分实现会在工程内挂音频节点,需要打开工程确认
合成分镜表、音频索引、镜头素材或模板合成工程(时间线节点)、导出的成片以工程内节点为主,导出成片落到输出目录

值得记住的结构关系是:分镜表是上游真源,配音和合成都是它的读者。合成环节通常不复制音频,只引用索引里的路径;所以换配音不一定动分镜,但改分镜的时长字段往往会让时间线整体偏移。需要结合你手上项目实际导出的是 JSON 还是 CSV 来判断,用打开文件看首个镜头记录的方式最直接。

在项目目录里定位每类产物落在哪

抽象环节要靠目录说话。多数项目会按处理顺序给目录编号,改动前先在项目根目录列一遍,确认哪一层是人工编辑、哪一层是生成物。

project/
├─ 00_script/                # 剧本、角色设定,人工维护
├─ 10_storyboard/
│  ├─ storyboard.v1.json
│  └─ storyboard.v2.json     # 当前生效版本
├─ 20_voice/
│  ├─ s01_c01_lin.wav        # 镜号_角色_音色
│  └─ index.v2.json          # 镜号 → 音频路径、时长、起点
├─ 30_compose/
│  └─ compose.v2/            # 合成工程目录:时间线、模板引用
├─ 90_export/
│  └─ cut_v2.mp4
└─ snapshots/
   └─ snap-0007_storyboard-line-fix/

命名特征可以按三条线索找:音频文件名一般带镜号前缀,能和分镜表里的镜号对上;索引文件通常按版本号跟随分镜版本;合成工程以目录形式存在,里面放的是指针而不是成片。如果发现 20_voice 下的文件名不带镜号、或索引里缺少起点字段,说明这个项目的配音环节不能做局部重跑,改动只能按全量处理。

改动分镜后判断哪些下游产物需要重建

判断方法是把改动落到字段上,再顺着字段找读者。先用字段级对比看清楚到底改了什么:

jq -r '.shots[] | [.id, .duration, .line, .character] | @tsv' 10_storyboard/storyboard.v1.json > a.tsv
jq -r '.shots[] | [.id, .duration, .line, .character] | @tsv' 10_storyboard/storyboard.v2.json > b.tsv
diff a.tsv b.tsv
# 字段名与路径需按项目实际 schema 调整,先 jq '.' 看一条记录结构

拿到 diff 后按下面的清单圈定范围,只重跑被圈中的部分:

DramaClaw 把分镜、配音,合成放进同一条流水线,改动前先确认影响哪几步
  • 只改台词文本:重跑该镜配音,重排该镜所在的合成区段;其他镜的音频可复用。
  • 只改画面描述:配音不动,只需重排该镜的合成节点。
  • 改时长:该镜之后的镜头起点全部偏移,合成时间线需要重排;音频文件本身可复用,但索引里的起点字段要重建后再重排。
  • 改配音角色或音色:该角色涉及的所有镜都要重跑配音,合成按新索引重排。
  • 增删镜或调整镜号:镜号映射整体变化,索引必须重建,合成按新镜号顺序重排,建议按全量处理。

可复用与不可复用的分界线是“音频内容的语义有没有变”。台词没变的镜,音频文件就是可复用资产;索引和时间线属于派生数据,重建成本低,别为了省它去手工改工程,那是后面返工的常见来源。重跑前先把旧版本整体复制一份,再动手。

给每次改动留一份可回退的快照

快照的意义不是备份全部素材,而是留住“分镜表 + 音频索引 + 合成工程目录”这一组能一起重跑的最小组合。命名建议用递增序号加简短原因,方便在列表里一眼认出改了什么:

snapshots/snap-0007_storyboard-line-fix/
snapshots/snap-0008_voice-recast-c02/

保留份数建议最近 3 到 5 份,外加一份明确标注为可用的基线版本,其余按需清理;磁盘紧张时优先保留基线。创建与回退的骨架如下,具体以项目自带的构建脚本为准:

# 改动前建快照
cp -a 10_storyboard 20_voice 30_compose snapshots/snap-0008_voice-recast-c02/

# 回退:把三个目录切回快照内容,再用快照里的分镜与索引重跑合成
rsync -a `--delete` snapshots/snap-0007_storyboard-line-fix/10_storyboard/ 10_storyboard/
rsync -a `--delete` snapshots/snap-0007_storyboard-line-fix/20_voice/ 20_voice/
rsync -a `--delete` snapshots/snap-0007_storyboard-line-fix/30_compose/ 30_compose/

回退后不要只看出片画面,先确认 10_storyboard 和 20_voice 的镜号集合一致,再启动合成。风险边界在于快照保存的是文件而不是渲染中间态,如果项目把合成中间结果缓存在别处,回退后仍需要重新合成一次,这一步不能省略。

用一条短片验证交接没有断裂

理解对不对,用一条已完成的短片试一次就知道。挑一条镜数少、已经出片的项目,整体复制成验证目录,只改一处:例如把某镜台词里的一个字改掉。

  1. 先记录未改动音频的校验值,作为后续对比基线。
  2. 按上一节的方法 diff 两版分镜,确认只有目标镜的台词字段变化。
  3. 只重跑该镜配音与受影响的合成区段,导出成片。
  4. 对比输出:该镜台词是新文本,其他镜的音频校验值未变,成片镜数与顺序与分镜表一致。
md5sum 20_voice/*.wav > before.md5
# 重跑后
md5sum -c before.md5

如果出现未改动镜的音频也被重写、或成片里镜号顺序与分镜表对不上,说明索引没有按镜号对齐,改动影响范围就不该按字段判断,需要退回全量重跑并先修索引结构。验证通过的标志是:改一处只付出该镜的代价,且旧快照能回退到上一版可用状态。