- name
- ai_videos__拼接调优
- description
- AI 短剧「首尾帧接缝」一键调优+拼接+评分工具。当用户说"调优/拼接 epN""用 seam_tune 拼 epN""给 epN 接缝调参/评分""seam 调优""拼接 ep2""出 ep3 的片"或想对某集出片并优化承接缝平滑度时触发。它对指定 ep 跑 tools/seam_tune.py(扫 裁切/交叉融帧/RIFE直采补帧/光流变速重排 候选为每个承接缝找最平滑接法·写回 seam_plan.json·拼出 ep{NN}.mp4)+ tools/seam_metrics.py(光流+SSIM 打分·存 dashboard sidecar),报告每缝最优接法/分数/秒数区间;帧差>40 的缝扫 trim/blend/外部桥接救援集并报 prompt 问题。参数=ep 编号(如 ep2、3)。
# 首尾帧接缝调优 + 拼接 + 评分(seam tune / stitch / score)
把「找最优裁切&补帧参数 → 用最优方案拼成片 → 客观打分存 dashboard」串成一条命令工序,对**任意一集**反复调用。底层是两个仓库工具:`tools/seam_tune.py`(调优+拼接)与 `tools/seam_metrics.py`(评分),本 skill 只是按标准流程驱动它们并把结果讲清楚。
## 何时用
用户给一个 ep 编号要「调优 / 拼接 / 出片 / 接缝评分」时。典型:「调优 ep2」「拼接 ep3」「给 ep2 接缝调参并出片」「ep5 接缝评分」「seam_tune 跑一下 ep4」。
## 入参
**唯一参数 = ep 编号**(`ep2` / `2` / `ep02` 都接受)。可选:用户指定 drama(默认 `wushen_juexing`)、是否只调不出片、是否要多接法对比。
## 步骤
### 1. 解析 ep 目录
把编号零补到两位(`2`→`ep02`),用 Glob 找含 `seam_plan.json` 的 ep 目录:
`ai_videos/**/episodes/ep{NN}/seam_plan.json`
- 命中唯一 → 用它。
- 命中多个(多个 drama)→ 用 `AskUserQuestion` 问哪个 drama(AUTONOMOUS 模式则选 `wushen_juexing` 并在结尾注明)。
- 命中 0 个 → 报「ep{NN} 没有 seam_plan.json / 该集还没分镜」,停。
记 `EPDIR` = 该 ep 目录(路径含中文 `5_6_分镜与prompt`,下面命令务必整段加引号)。
### 2. 调优 + 拼接(seam_tune)
从仓库根 `C:\workspace\spec_coding` 跑(**必须** `PYTHONIOENCODING=utf-8`,否则中文路径的 print 在 Windows cp1252 stdout 上会崩):
```bash
PYTHONIOENCODING=utf-8 python -u tools/seam_tune.py "<EPDIR>" --apply --build
```
- 它对每个**首尾帧承接缝**(由 shot 的 `衔接=承接` 决定,与当前 plan 方法无关,故已调过的缝仍会被重调)扫**四类候选**(2026-07-05 智能补帧升级,follow-up 155):`trim`(裁切平接)、`blend`(交叉融帧=剪映帧融合,`--blends 2,4,6` × 全裁切网格——2026-07-08 起与 rife 同等采样,旧版只在 trim=0.10 一个点上扫、3 个候选 vs RIFE 18 个,是「全选 RIFE」的采样偏置来源之一)、`rife`(RIFE **直接时间步**补帧 `-s t`,`--frames 3,5,7` × 全裁切网格;旧 `--depths` 二分法默认关闭、opt-in)、`retime`(**光流变速**重排——不裁内容、按光流运动量把减速-加速曲线拉平,`--windows 0.35,0.5,0.65`)。RIFE 一律带 `-m` 模型(默认自动选 exe 旁最新 v4 模型,如 rife-v4.25;老代码不传 `-m` 等于在用 2021 年的 v2.3)。每缝还测一次 **LAB 色差**(A 尾窗 vs B 头窗,follow-up 156):≥5 自动开**色彩对齐**(对 B 头部 ~0.6s 做衰减式色彩迁移、接缝处对齐 A、时长不变),全部候选统一施加后再比。每个候选用与 dashboard **同一套 cv2 四指标**打分,按**「无短板」分层规则**选最优(2026-07-07 用户指示「让四个面向没有短板——91/91/91/91 比 100/100/100/90 好」):**先比四项是否全 ≥80(达标的优先);两档内均按 leximin(字典序 maximin——先最大化最短板,再比次短板,依次类推),不是按加权平均**——达标档用整数桶(1 分的最短板优势即胜,故均衡的 91/91/91/91 胜过尖峰的 100/100/100/90),未达标档用 5 分死区(低分硬伤板往往结构性无法修复、其 13.2-vs-13.7 噪声不该左右选择,跨过持平最短板去比下一档);**加权分仅在指标向量并列时做最后 tiebreak**;仍不达标时走**方法公平的升级阶梯**(2026-07-08 补齐最短板指示——救援不许只喂 RIFE):① 深裁切 0.24/0.30/0.40(越带缝也可用)→ ② 大融帧 8/12(最优融帧裁切上;越带缝也可用)→ ③ 更长直采桥 11/15 帧(难缝的接缝突变随桥变长而摊薄,实测 ep01 shot10→11 15f 优于 blend)→ ④ 备选 RIFE 模型轴 → ⑤ 更长变速窗 0.7/0.9s;**基础扫描不达标就整梯全跑、无级间早停**(早停会让「谁先擦过及格线谁赢」取决于梯级顺序而非 leximin 优劣),跑完对全部候选统一按 leximin 选优;候选按参数签名全局去重、不重复构建。每缝结尾打印**「各方法最优」对比行**,RIFE 赢/输一眼可审计。`--apply` 写回 `seam_plan.json`,`--build` 拼出 **`ep{NN}.mp4`**(默认正式名)。承接缝不会被选成裸硬切(至少裁切)。
- 该命令较慢(每缝建多个临时拼接 + RIFE 试桥),用 `run_in_background` 跑、跑完读输出。
- 变体:用户只想看参数不出片 → 去掉 `--build`;只想试不写盘 → 去掉 `--apply`。
**prompt 问题识别与救援**:输出里若有 `seam ...: ... PROMPT problem`(承接帧差 >40,首尾帧根本不匹配)→ 光流补帧会糊,该缝只扫**救援集**(trim / blend / external),**如实报给用户这是该 shot 的 prompt/承接帧问题**(建议重锁首尾帧或改运镜对齐景别)。临时出路:把两张接缝帧喂给 即梦/Kling「首尾帧」生成过渡段,命名 `bridge_{前镜}_{后镜}.mp4` 放进 `<EPDIR>/bridges/`,重跑本 skill 即自动作为 `external` 候选参与评分。另一条更根治的通道:该缝若剧情上确属运动中承接,按 ai_video.md 衔接与接缝契约 v2 §4 把 B 镜改「运动承接」重生——平台视频延续/延展、或上镜末 3s 作运动参考 + ~1s 动作重叠——比后期桥接优先。
### 3. 评分 + 存 dashboard(seam_metrics)
```bash
PYTHONIOENCODING=utf-8 python -u tools/seam_metrics.py "<EPDIR>" --no-compare --save
```
- 给每个承接缝打分(M1 速度连贯 / M2 无冻结 / M3 无跳变 / M4 结构=SSIM 与运动补偿残差比取更差,加权均)+ **秒数区间**,`--save` 写 `ep{NN}.seam_scores.json`(打开该集页面自动显示 dashboard)。打分前**先按运动补偿残差的局部突出度经验定位真实接缝帧**(不信时长推算,dedup 会偏一两帧),否则硬切会因定位偏移漏测而虚高、RIFE 反被比下去。
- 用户要「多接法对比排名」→ 去掉 `--no-compare`(慢,每缝再跑硬拼/裁切/RIFE)。
### 4. 报告
给用户讲清楚:
- 每个承接缝:最优接法 + 参数(如 `trim@0.10`)、**分数**、在成片里的 **@秒数(区间)**。
- 全集 **总分 + 等级**(A/B/C/D)。
- ep{NN}.mp4 是否已生成。
- 若有 prompt 问题缝:单独列出、说明要改 prompt 不是改参数。
## 注意
- 只动**首尾帧承接缝**;硬切缝不碰。
- 反复可调用:对已是 trim 的缝也会重调,不会跳过。
- 仅按 plan 拼请走 webapp「拼接成片」按钮;**调优必须用本 skill / `seam_tune`**(webapp 不调优)。
- 评分慢(光流),`seam_metrics` 也用 `run_in_background`。
- 默认 INTERACTIVE:drama 不明就问;AUTONOMOUS 模式不问、按默认并注明。
عرض على GitHub