字幕与文案(caption-craft v2)
与生成链路的区别(重要):AI 剪辑链路的字幕是剪辑的一部分,不交给后期去"补一层字"。
字幕按原始素材时间码绑定镜头写(《剪辑脚本字幕版(音画强关联)》),输出 video_title / video_id / total_duration / video_groups[group_name, group_duration, shots[original_timestamp, subtitle_text]];出现规则(≥2s / VMG)、
字数带、断句格式、结尾话术固定块见 docs/video-edit-creation-doctrine.md §5。
本地把字幕版转成交付字幕文件:pnpm edit:subtitle -- --timeline … --caption … --out ….srt;
字体/版式/平台安全区仍由后期字幕工位执行。
1. 定位
字幕不是"把台词抄一遍",而是画面信息的第二层表达:补足画外信息、加强节奏、给出钩子与落点。
本技能产出 caption_script:与时间轴逐段绑定,可直接进字幕工位与封面工位。
2. 出现规则(硬口径)
| 情形 | 规则 |
|---|
| 单镜时长 ≥2.0s | 必须上字幕 |
| 单镜时长 <2.0s | 不加字幕 |
| 连续多个 <2.0s 镜头 | 合并为虚拟拼接组(VMG);合并总时长 >3.9s 时,在 VMG 第一镜上写一条覆盖全组的概括字幕 |
3. 字数带
最小字数 = ceil(时长秒数 × 2.0)
最大字数 = floor(时长秒数 × 2.5)
- 超出上限 → 拆句或删修饰;低于下限 → 补画面事实,不补空话。
- 一条字幕 2–4 行,每行 8–14 字(竖屏可 6–11 字);不做"一行 20 字"的糊字幕。
4. 文字纪律
- 每句独占一行(用换行分隔),行内无空格、无标点、无 Emoji。
- 只写画面能证明的内容;不写人物内心活动、不写没出现的地点/品牌/数据。
- 未提供售价时不写价格;不写"限时""最"等极限词。
- 专有名词与素材事实逐字一致(品牌名、地名、产品型号)。
- 结尾话术位:若账号配置了结尾话术(例如 AI 制作声明 + 关注引导),保留原口径,不擅自改写。
5. 标题与封面文案
- 标题:≤12 个中文字符(平台另有要求时按平台),有信息量或悬念,不用问号堆砌。
- 封面文案:与标题不重复,给"第二句钩子";与主视觉(关键帧候选)匹配,避免字幕压脸。
- 封面帧优先取
composition_best/emotion_peak 关键帧,标题区避开人脸与重要信息。
6. 提示词正文(可直接投喂,v2)
你是"文案字幕师"。任务:为已锁定的时间轴逐段撰写字幕,并给出标题与封面文案。
【输入】
- 剪辑时间轴(段序/时长/画面要点/台词):{{ edit_timeline_summary }}
- 每段可用的事实(实体/地点/产品/数据,来自镜头理解):{{ shot_facts }}
- 账号口径:{{ account_profile }}(语气/结尾话术/禁用词)
- 平台规格:{{ platform_spec }}
【硬性纪律】
1. 只使用输入事实;没有的不要写。禁止内心描写与未经证实的数据。
2. 单镜 ≥2.0s 必须上字幕;<2.0s 的连续镜头按 VMG 规则合并后写一条概括字幕(放第一镜)。
3. 字数带:ceil(时长×2.0) ≤ 字数 ≤ floor(时长×2.5);每句独占一行,行内无空格与标点。
4. 无价格(除非输入里明确给出);无 Emoji;无外文(专有名词除外)。
5. 结尾按账号口径保留话术位(如"看到这里/感觉怎么样/……"),不擅自改写。
【输出 JSON】
{
"video_title": "",
"video_id": "YYYYMMDD-xxxxxxxx",
"total_duration": "MM:SS",
"video_groups": [{
"group_name": "",
"group_duration": "00:12",
"shots": [{ "original_timestamp": "0:07.000-0:13.000", "subtitle_text": [{ "text": "第一行\n第二行" }] }]
}],
"cover_lines": ["", ""],
"notes": "VMG 合并说明与留白说明"
}
决策原则(含阈值与失败关闭)
- 字幕与时长量化:字数带
ceil(时长×2.0) ≤ 字数 ≤ floor(时长×2.5);超出上限必须拆句,不得压时。
- 出现规则硬口径:单镜 ≥2.0s 必须上字幕;<2.0s 不上;连续短镜按 VMG 合并后 >3.9s 才给概括字幕。
- 只写画面能证明的:事实字段没有的地名/品牌/数据/价格一律不写;内心活动不写。
- 格式纪律:每句独占一行、行内无空格标点、无 Emoji、无外文(专有名词除外)。
- 失败关闭:段时长缺失或事实字段缺失时,该段留空并标注待补,不臆造文案。
打法库(场景 → 动作序列 → 判据)
- 主线·逐段写作:读时间轴段事实 → 定信息点 → 按字数带成句 → 分行(判据:字数带命中率 100%)。
- 分支·短镜串联(VMG):合并连续 <2.0s 镜头 → 总时长 >3.9s 时在首镜写一条概括(判据:合并不漏内容、不超字数带)。
- 分支·信息密集型段落:优先保留名词与动词,删修辞;必要时拆成两条并调整起止(判据:可读性抽检通过)。
- 分支·账号口径冲突:保留账号结尾话术原文,冲突时以账号口径为准并记录(判据:话术逐字一致)。
SOP(每步带触发/回执/失败路径)
- 触发(时间轴锁定)→ 逐段撰写字幕 → 回执:
caption_script + 字数带校验表;失败:字数越界或含标点即回退重写,不放行。
- 触发(字幕初稿)→ VMG 检测与合并 → 回执:合并清单(哪些镜头合并、字幕落在首镜);失败:合并后无概括或落错镜即重做该组。
- 触发(字幕定稿)→ 事实口径核对(实体/价格/专有名词)+ 封面文案生成 → 回执:核对清单 + 标题/封面行;失败:出现无依据事实即删除该句并标注,不进交付。
关键指标(含基准与护栏)
| 指标 | 口径 | 基准/阈值 | 类型 | 来源 |
|---|
| 字数带命中率 | 落在字节带内的字幕 / 全部字幕 | 100% | 护栏 | 字数校验器 |
| 格式合规率 | 无标点/无空格/无 Emoji 的行 / 全部行 | 100% | 护栏 | 正则校验 |
| 事实准确率 | 与镜头事实一致的字幕 / 抽查字幕 | ≥98% | 质量 | 20% 人工抽检 |
| VMG 覆盖率 | 连续短镜按 VMG 处理的比例 | 100% | 护栏 | VMG 检测清单 |
| 封面安全率 | 未压脸/未压平台 UI 的封面文案 / 全部封面 | 100% | 质量 | 安全区检查 |
失败模式(症状 → 检测器 → 处置)
| 症状 | 检测器 | 处置 |
|---|
| 字幕读不完 | 字数超上限 | 按字数带截断重写;必要时把该段拆成两条 |
| 字幕说的事画面里没有 | 事实来源混用了剧情设计 | 只允许引用镜头事实字段;无依据的句子删除 |
| 字幕压在脸上 | 未检查安全区 | 换 placement 或改用上方安全区;封面另选关键帧 |
| 结尾话术被改写 | 模型自作主张 | 结尾话术视为账号口径,原文保留 |
| 短镜被塞满字 | VMG 规则未执行 | 合并连续短镜;>3.9s 才在首镜给一条概括 |
7. 自检清单