先动“任务单元”这一层,而不是先调渲染参数或并发数:把一次批量合成拆成以场次或镜头为单位的独立任务,每个任务都有稳定标识和固定输出路径,再让任务配置识别并复用已有产物。这样改台词、换配音或只重做某个镜头时,重跑范围可以收敛到受影响单元;已合成片段是否真的被跳过,则要靠日志逐条核对。若任务仍以“整批”为一个单元,任何参数变化通常都会触发整批重来。
处理这类重跑问题,顺序建议是:先建立可单独执行的片段单元和单元清单,再确认复用已有产物的开关,最后用日志验证跳过与执行数量。只改参数而不拆单元,通常无法把重跑范围收敛到单个片段;复用字段名和判断条件需要以实际界面或文档为准。
把批量任务拆成可单独重跑的单元
划分规则建议先按场次,再按镜头细分:同一场次内镜头少、改动经常整场发生时,用场次作为单元;单镜头反复调整字幕、配音或特效时,用镜头作为单元。单元 ID 要稳定,不要把时间戳、随机数放进 ID,否则下次运行会被当成新单元。输出路径也应由单元 ID 推导,例如 outputs/[scene_id]/[shot_id].mp4,便于复用逻辑和日志对照。
单元清单建议独立于任务配置保存为 CSV 或 JSON,每行一个单元,至少记录单元 ID、输入素材、输出路径、状态和最近一次成功时间。任务启动时读取清单,而不是临时扫描目录;这样“哪些片段已完成”有明确依据,目录里的临时文件也不容易被误判。
unit_id,scene_id,shot_id,source,output,status,last_success
S01_SH01,S01,SH01,shots/S01_SH01.json,outputs/S01/SH01.mp4,done,-
S01_SH02,S01,SH02,shots/S01_SH02.json,outputs/S01/SH02.mp4,pending,-
在任务配置里确认复用与缓存相关开关
下一步才是找“是否复用已有产物”的开关。不同版本可能叫“跳过已完成”“复用缓存”“覆盖输出”或 reuse existing artifacts,名称和默认值需要以实际界面或文档为准。关键要确认三件事:按单元判断还是按整批判断;只检查输出文件存在,还是同时检查清单状态;覆盖开关是否会绕过复用逻辑。缓存开关与最终产物复用也可能分开,需要分别确认。
# 仅表示配置结构,字段名以实际界面或文档为准
task:
unit_manifest: manifests/batch_units.csv
unit_key: unit_id
output_dir: outputs/
reuse_existing_artifacts: true
overwrite_existing: false
unit_filter: []
如果界面只有整批开关,不要假设它能按单个片段跳过;要先看它是否读取单元清单或输出路径。否则应调整外层调度,让每次任务只提交目标单元。
只重跑受影响的片段,跳过已合成部分
判断受影响单元时,先看改动作用范围,而不是凭文件名猜。只改某个镜头的字幕、配音、时长或素材时,通常只影响该镜头及其后续拼接步骤;改全局分辨率、编码、帧率、水印或统一音频处理时,影响范围往往覆盖整批。建议在清单里记录参数指纹,把本次参数与上次成功参数对比,指纹变化的单元进入重跑列表。
- 从清单筛出受影响 unit_id,写入临时清单 affected_units.csv,不要直接改原清单。
- 保留 reuse_existing_artifacts=true,执行时传入临时清单;若工具只支持起始单元,可用 from-unit,但必须先确认起点之前的已完成项仍会被跳过。
- 确认“从指定单元开始”不等于“强制重跑该单元之后全部”;有的工具会把起点当成范围并关闭跳过,需要先用小批量验证。
- 若必须重跑某个已完成单元,只把该单元状态改为待执行或清空其状态,不要删除整个输出目录。
# 命令名与参数仅为示意,按实际 CLI 入口替换
dramaclaw batch `--manifest` affected_units.csv `--reuse-existing-artifacts`
用日志核对哪些片段被跳过、哪些被重跑
复用是否生效,不能只看任务有没有报错,要看日志是否按单元给出“跳过”或“执行”。常见日志可能写 skipped existing output、reuse、cache hit,或 rendering、composing、executing;不同版本措辞不同,所以要用单元 ID 和输出路径交叉确认。只看到 skip 不够,还要确认跳过的是目标单元,而不是整个任务被跳过。
核对方法:先算预期数量,总单元数减去受影响单元数,应接近日志中的跳过条数;受影响单元数应接近执行条数。再抽查文件时间戳:被跳过单元的输出修改时间应保持不变,被重跑单元应更新。若数量对不上,优先检查清单状态、输出路径是否一致、复用开关是否被覆盖参数绕过。
# 仅为日志筛选示例,实际格式以工具输出为准
grep -E 'unit_id|skip|reuse|render|compose' batch.log
grep -c 'skip' batch.log
grep -c 'render' batch.log
# 日志格式示意
[unit S01_SH01] reuse existing output: outputs/S01/SH01.mp4
[unit S01_SH02] render start
[unit S01_SH02] output written: outputs/S01/SH02.mp4
小批量试跑后再放到整批
配置改完后不要直接放全量。先取少量单元试跑,至少包含一个应跳过单元和一个应重跑单元;如果只拿受影响单元试,就看不出复用是否生效。运行后对比输出目录的文件数量和修改时间,必要时对未受影响文件做校验和比较;确认跳过与执行条目符合预期,再扩大到全量清单。
- 复制清单为 trial_units.csv,选两到三个单元,其中一个状态为 done 且不在受影响列表,另一个在受影响列表。
- 用正式配置执行 trial_units.csv,保存日志和输出目录快照。
- 检查未受影响单元的输出时间戳是否未变,受影响单元是否更新,日志条数是否与选择一致。
- 确认后再用全量清单运行;保留试跑日志,便于全量结果异常时对照。
风险边界:如果工具只支持整批复用、不支持按单元过滤,单靠改配置无法保证只重跑部分片段,此时应先改任务拆分方式或外层调度,而不是反复调渲染参数。另外,输出路径如果包含批次号或时间戳,复用判断可能失效;建议让单元输出路径保持稳定,把批次信息放到日志或旁路记录中。