剪辑脚本与帧级时间轴(edit-scripting v2)
创作前提(先读):
docs/video-edit-creation-doctrine.md。剪辑脚本的影片级字段沿用封板口径:overall_style(风格)/music_selection(音乐选择)/color_grading(调色口径)/story_overview(故事概述); 每个场景组带storyline/emotional_arc/editing_suggestions;时间轴里声明节奏档案(pacing profile), 档案默认值不达标只出咨询项。字幕不在这里写——它由《剪辑脚本字幕版》按原始素材时间码绑定镜头(见 caption-craft)。
1. 从"文字脚本"到"可执行契约"
旧链路把"制作剧本"(场景字段)与"剪辑脚本初稿"(original_timestamp + 时长)分开写,问题是:
- 时间轴由模型心算,容易出现重叠、空隙、总时长对不上;
- 转场只有 5 个枚举、声音只有"优先级",剪不出层次;
- 场景字段写得再美,落到执行仍要人重新翻译一遍。
v2 合并为一份契约:edit_timeline(机器执行)+ edit_script(人读)。两份内容必须一致,出现分歧以时间轴为准并回写脚本。
2. 选镜四维权衡(不是"挑好看的")
| 维度 | 判据 | 反例 |
|---|---|---|
| 信息密度 | 该镜是否推进叙事/给到新信息 | 重复表达同一信息的第二条空镜 |
| 画质 | 清晰度/曝光/稳定性/噪声(信号层指标) | 抖动糊帧当情绪镜头(除非明确要"粗糙感") |
| 连续性 | 与前后镜的景别/运动方向/视线/光线/色调衔接 | 连续三个同景别同角度(跳切感) |
| 唯一性 | 该画面是否被用过、是否可替换 | 全片反复用同一空镜垫时长 |
优先级:叙事必要 > 画质可用 > 连续顺畅 > 画面漂亮。不能为了漂亮牺牲叙事。
3. 时间轴契约(执行器边界)
- 源轨:
sourceIn/sourceOut(秒,精确到毫秒)+ 帧号;同一源素材的多个选段不得重叠,间隔 ≥1s(理想 ≥2s)。 - 主轨:由片段顺序自然推导;必须连续无空隙(前段结束 = 后段开始),从 0 开始。
- 片段时长:0.4–15s(教学类可到 20s,需标注理由);短于 0.4s 的片段除非卡点否则不合法。
- 速度:0.1–8×;慢动作优先在源素材帧率 ≥ fps×2 时使用(否则先说明画质代价)。
- 转场:
cut(默认,硬切优先)/dissolve/fade_from_black/fade_to_black/wipe/match_cut/jump_cut/whip_pan/zoom_blur;时长 ≤2s。匹配剪辑与跳切必须写明动机。 - 声音:
original/mute/ambience_only/bgm_only/duck_original/j_cut/l_cut;J-cut = 下一段声音提前进入,L-cut = 当前段声音延续;偏移量写进jCutOffsetSeconds。 - 字幕位:
placement+ 行数;安全区取自target.safeAreas。
4. 转场语法速查(专业剪辑口径)
| 场景 | 推荐 | 原因 |
|---|---|---|
| 同场景内推进 | 硬切 | 最不打扰;跳切只在压缩时间时用 |
| 时间/空间跳跃 | 叠化 或 黑场 | 明确"跳过去",避免观众迷失 |
| 动作衔接 | 匹配剪辑 | 用动作/形状/方向匹配建立因果 |
| 情绪切换 | 甩镜/变焦模糊(慎用) | 强节奏段落的"重音",全片别超过 2–3 次 |
| 回到母题 | 相似构图硬切 | 形成呼应而不需要解释 |
纪律:转场是"句子之间的标点",不是装饰。每加一个非硬切转场,都要能说出它解决了什么问题。
5. 声音设计(剪辑的一半在声音)
- 原声优先:默认保留原声;只有明确请求才替换。原声与 BGM 冲突时先做让位(duck),再考虑降 BGM 音量。
- J-cut/L-cut:访谈、口播、旅行旁白在场景切换处优先使用,声音先于画面或延后收尾,能显著减少"拼接感"。
- 静音留白:情绪峰值前 0.5–1.5s 的静音(含环境声)比加音乐更有效;写进
silenceNotes。 - 音效:只在对位动作(放物、关门、脚步、翻页)时使用;不堆音效当节奏。
- 音乐卡点:有节拍网格时,切点优先吸附到拍点(±80ms);副歌进入点尽量对齐情绪峰值。
6. 提示词正文(可直接投喂,v2)
你是"剪辑指导"。任务:把叙事方案落成帧级时间轴(机器可执行)与人可读剪辑脚本,两者内容一致。
【输入】
- 叙事方案:结构/beat 表/情绪曲线/节奏图/素材映射:{{ story_plan }}
- 素材池:每镜的 shotId、帧级区间、时长、景别、运镜、质量分、情绪、可用性、高光与关键帧 id:{{ material_index }}
- 目标:时长 {{ duration_band }}|画幅 {{ aspect_ratio }}|帧率 {{ fps }}|平台 {{ platform }}|安全区 {{ safe_areas }}
- 原声策略与 BGM 意图:{{ audio_intent }}
【硬性纪律】
1. 每个片段必须给出:源 shotId、帧级 sourceIn/sourceOut、时长、选镜理由(motive)、与哪条高光/关键帧关联。
2. 同一 shotId 的多段选择在源轨上不得重叠,间隔 ≥1s;不满足时换素材或延长间隔。
3. 主轨连续无空隙;总时长落在目标时长带内(误差 ≤5%)。
4. 转场默认 hard cut;使用其他转场必须写动机;转场时长 ≤2s。
5. 声音设计写进 audio 字段(模式/淡入淡出/J-cut 偏移/让位),静音留白写进 audioDesign.silenceNotes。
6. 时间码一律 `HH:MM:SS.mmm`;不得出现"约 3 秒"这类描述。
【输出 JSON(两个对象,同一份内容)】
1) edit_timeline:遵循 schemas/edit-timeline.schema.json
2) edit_script:逐段故事线/选镜说明/转场/声音/字幕要点(人读)
【自检(输出前内部执行)】
- 总时长 = 各段时长之和(含转场不额外占用时长时的说明)
- 无重叠、无空隙、片段时长均在合法区间
- 每段都有选镜理由;每段都能在素材池里找到对应 id
- 转场与声音模式取自合法枚举
决策原则(含阈值与失败关闭)
- 时间轴是唯一执行事实源:脚本与时间轴冲突时以时间轴为准,并回写脚本;两者不一致不得进入合成。
- 源轨不重叠、主轨不断裂:同源片段间隔 ≥1s(理想 ≥2s);主轨连续,前段结束=后段开始。
- 片段时长为硬区间:0.4–15s(教学类可到 20s 需理由);<0.4s 除卡点外不合法。
- 转场默认硬切:非硬切转场必须写动机,时长 ≤2s;全片非硬切转场 ≤5 处(甩镜/变焦 ≤2 处)。
- 失败关闭:素材缺失、授权不覆盖当前用途、帧率不可行任一存在即拒绝出轴(不静默降级)。
打法库(场景 → 动作序列 → 判据)
- 主线·按 beat 落轴:读结构 → 逐 beat 选镜 → 定 in/out → 排主轨 → 声音设计(判据:时长带命中 + 选取理由齐备)。
- 分支·节奏提速:缩短平均镜头时长、增加短镜(0.6–1.2s)与硬切(判据:cutsPerMinute 与节奏图一致)。
- 分支·情绪段落:放长单镜、留白环境声、必要时 J-cut 前置人声(判据:情绪段平均镜头时长 ≥ 相邻段 ×1.5)。
- 分支·转场桥接:优先匹配剪辑(动作/形状/方向),次选叠化;甩镜仅用于节奏重音(判据:动机可复述)。
SOP(每步带触发/回执/失败路径)
- 触发(结构与评审通过)→ 逐段选镜并写 motive → 回执:
edit_script选镜表;失败:素材不可用/授权不覆盖即换素材或标记缺口,不硬用。 - 触发(选镜表确认)→ 生成帧级
edit_timeline→ 回执:时间轴 + 校验块;失败:同源重叠或主轨断裂即回退重排,禁止带病出轴。 - 触发(时间轴生成)→ 本地校验(
edit:verify口径)→ 回执:硬项/咨询项清单;失败:硬项未过即整轴拒绝进入合成并给出逐段改法。
关键指标(含基准与护栏)
| 指标 | 口径 | 基准/阈值 | 类型 | 来源 |
|---|---|---|---|---|
| 时长带命中率 | 成片时长落在目标带 / 目标 | 误差 ≤5% | 护栏 | edit:verify |
| 硬项一次通过率 | 首次校验即全过的时间轴 / 提交数 | ≥95% | 质量 | 校验报告 |
| 素材可用率 | 引用素材授权与可用性通过 / 全部引用 | 100% | 护栏 | 授权清单 |
| 转场合理性 | 带动机说明的非硬切转场 / 非硬切总数 | 100% | 质量 | 剪辑脚本抽检 |
| 择轴返工率 | 因结构问题重排的时间轴 / 提交数 | ≤10% | 成本 | 返修台账 |
失败模式(症状 → 检测器 → 处置)
| 症状 | 检测器 | 处置 |
|---|---|---|
| 执行器报时间轴重叠 | 同源片段间隔不足 | 调整 in/out 或用其他素材替换;不允许静默改时长 |
| 成片有卡顿/黑帧 | 片段时长过短或转场参数非法 | 片段下限 0.4s;转场 ≤2s;黑场只用于时间跳跃 |
| 声音接不上 | 未做 J-cut/L-cut 或让位 | 在场景切换处加声音重叠;原声与 BGM 冲突处加 duck |
| 剪出来像 PPT | 每段用满时长、无节奏变化 | 按 tempoMap 强制长短交替,增加 0.6–1.2s 短镜过渡 |
| 观众看不下去 | 前 3 秒无钩子 | 把最高分高光提到 0–3s;必要时结果前置开场 |
7. 自检清单(人工复核)
- 时间轴可被执行器直接消费(字段完整、枚举合法、时间码格式正确)
- 同源片段无重叠、间隔达标;主轨连续
- 每个非硬切转场都有动机说明
- 声音设计覆盖全片(含留白与卡点),不是"配个 BGM"了事
- 每个片段能指回素材 id,且素材可用性为可用
- 脚本与时间轴一致(时长、顺序、段数)