字幕烧录执行纪律
适用场景与默认政策
- 无字幕母版与已给 SRT:另存硬字幕副本,或导出旁挂文件和可开关软轨。
- 标题、弹幕、贴纸、卡拉OK与双语轨:依据声明的文字、样式与时间轴执行。
- 成功渲染镜头直接后期;不因画面、声音、人物、名义片长或嘴型品质拒收,不自动 ASR/TTS。
原片只读。工位既有中文字幕去标点规范仍在 parseSrt 入站执行,数字内的 . : - / 与纯西文句读保持;这是一致的文字格式操作,不能据此截断正文或删掉有效条目。
一、SRT → ASS 参数表
| 项 | 实际口径 | 操作依据 |
|---|---|---|
| 时间精度 | ASS 使用 H:MM:SS.cc | 按工位转换函数固定转换,回读源 cue 起止 |
| 多行文字 | 同一 cue 换行写为 \N | 保留语义内容与行结构 |
| PlayResX / PlayResY | 实际输出宽高 | 字号与画布采用同一坐标系 |
| ScaledBorderAndShadow | yes | 描边随画布缩放 |
| 样式 | Title、Sub 与各扩展轨样式 | 独立分层、事件可回读 |
| 字体标识 | 字体 id 与真实字体名 | fontselect 与回执可对账 |
缺时间轴、结束早于开始、非法坐标或缺必要文字是实际请求错误,必须明确失败;不能静默跳条得到“成功”。
二、字体执行纪律
- 从账号锁定字体或配方选择有许可的实际字体文件,记录 id、许可与 SHA-256。
- 将 cn/en 等多层字体目录准备成 libass 实际可读取的 fontsdir;不能把目录名当字体已加载的证据。
- 解析渲染日志 fontselect;静默回落到系统字体或缺字必须明确报告并停止该请求。
- 字体缺失不能“尽力出片”,补齐正确字体后再执行;原片与历史输出保持。
三、可执行入口
从仓库根执行;路径、字体许可与输出目录必须先获得本任务授权。
node bundles/ai-video/connectors/subtitle-bridge/cli.mjs plan --in master.mp4 --srt subtitles.srt --out-dir subtitle-plan
node bundles/ai-video/connectors/subtitle-bridge/cli.mjs burn --in master.mp4 --out subtitled.mp4 --srt subtitles.srt --platform 抖音/快手
node bundles/ai-video/connectors/subtitle-bridge/cli.mjs sidecar --in master.mp4 --out-dir sidecars --srt subtitles.srt --name film
node bundles/ai-video/connectors/subtitle-bridge/cli.mjs softmux --in master.mp4 --out softsub.mp4 --srt subtitles.srt --lang chi
烧录的实际 FFmpeg 参数由内核生成,声音 copy;原片无音轨则保持无音轨。softmux 对完整编码包做 SHA-256 对账,不靠几帧截图证明 copy。
四、处理核对与诚实报告
| 项 | 技术核对 | 未做的品质判断 |
|---|---|---|
| 时间轴 | ASS 事件条数、起止与声明 cue 对账 | 不猜“观众是否读完” |
| 字体 | 实际 fontselect 命中工位文件 | 不评分字体是否漂亮 |
| 画布 | 实际输出宽高与请求一致 | 不以源分辨率拒绝素材 |
| 音轨 | 输入有/无轨状态与输出保持 | 不测可懂度、人声活动或 LUFS 放行 |
| 文件 | 当前文件存在、非空、SHA-256 与回执一致 | 不测画面差值或可现度 |
| 品质字段 | qualityReviewed=false、qualityScore=null | presence.reviewed=false,delta/ok 为 null |
真实工具非零、缺文件、缺字体或请求轨未执行必须传播错误;禁止把“未测”写成品质通过。
五、扩展轨工艺
| 轨 | 设计参考 / 参数 | 执行边界 |
|---|---|---|
| 弹幕 | 顶部 1/4 带分道,默认透明度 0.85 | 默认完整保留传入文字和全部条目;明确 max_chars / max_concurrent 才约束,并记录抽稀数量 |
| 贴纸 | 五套随包预设、200ms 弹入 | 使用明确时间窗、位置与真实 ASS 事件;非法请求停止 |
| 卡拉OK | \kf 扫过,高亮色可选 | 明确逐字轴优先;均分注明“非真实发音对齐”,不能冒充 ASR 对齐 |
| 双语 | 主、次语言各自 cue,次行可小 12% | 两条语言时间轴分别回读,原正文不因长度默认删减 |
| 标题 | 独立 Title 样式与声明时间窗 | 片头长度是请求参数,不据源片品质自动改写 |
| 软轨 | mov_text 轨、语言与默认轨标记 | 视频/原音频编码包保持,实际字幕轨存在 |
设计参考不能变成源镜头的品质门。需要诊断、样例帧或文字对比时作为明确独立任务执行,不阻塞默认正式后期。
六、SOP
- 触发:收到文字轨请求。核对来源、SRT、字体许可与输出路径。回执:输入哈希、原 cue 与声明参数。失败:缺件、权限不符或非法时间轴时停止。
- 触发:请求可执行。先 plan 写 ASS,再执行一次 burn、softmux 或扩展轨操作。回执:ASS、实际滤镜、fontselect、工具退出码。失败:工具错误不换字体、换内容或循环重试掩盖。
- 触发:产物落盘。回读真实文件、轨道、事件、画布和哈希。回执:字幕报告、源片保持、qualityReviewed=false。失败:缺产物或请求未完成停止交付,保留原片与真实失败日志。
七、失败诊断(原因 → 处置)
| 症状 | 首查 / 原因 | 处置 |
|---|---|---|
| 实际渲染报路径错误 | ASS 路径冒号、空格与转义 | 修正参数再执行;不能绕过报错宣称已烧录 |
| 字体回落或缺字 | 字体不存在、许可未声明、字符不覆盖 | 指名字体与字符,补合法文件;禁止静默丢字 |
| 事件与源 cue 不一致 | 时间转换或换行编码错误 | 修 ASS 转换,保留原正文与条目 |
| 弹幕条数减少 | 明确约束抽稀或旧默认阈值 | 默认全部保留;明确限制时记录请求与每条处理 |
| 编码器失败 | ffmpeg 非零、编码器未安装 | 保留 stderr,停止;不无限换编码器重试 |
| 原片被覆盖或改变 | 输入输出同路径、哈希不符 | 拒绝并停止,恢复只能走有来源的版本记录 |
八、证据口径
- 每个产物记录路径、字节数、SHA-256、ASS 与字体解析日志,工位回执必须绑定当前文件。
- 每次源复用保留原 SHA-256 与血缘,旧品质拒绝记录不改写。
- 旁挂、软轨与硬字幕副本都来自明确 cue;缺一请求出口不能用剩余文件声称完整。
- 未采样可现度、对比度与声音品质的字段保持 null;不得编“六项品质复检全过”。