2026-08-26 《擦干净》剧本口径审计与补图承接位 · 复盘 v1
项目:66_擦干净 B 站互动悬疑短片(v45 审片反馈版) 上一阶段:2026-08-24_擦干净_从素材到动态化制片_全链路复盘_v1 本次范围:剧本同步飞书 → 照剧本审全部资产 → 写补图 prompt → 引擎侧承接位 本次没有出图、没有重渲成片,产出全是文档与代码
事实记录(不可修改区)
| 项 | 事实 |
|---|---|
| 起点 | 用户要把完整剧本同步一份飞书文档给朋友看 |
| 会话内飞书能力 | 无。工具清单里只有钉钉 dws 系列,.mcp.json 无 Lark server,机器上无 feishu/lark CLI |
| 转机 | 用户提示「查知识库」→ 命中 07_skill存档/feishu-doc-publish/SKILL.md → CLI 在 E:\pb-arena\tools\feishu-doc-sync\sync.mjs |
| 发布结果 | 成功。anyone_readable + external_access: open,用户账号 full_access |
| 引擎体检 | asset_check.cjs 报 70/70 全部命中,0 缺失 |
| 剧本口径审计 | 同一批资产,按剧本审出 4 条 P0(露脸三连零素材 / S26 卧室闪现无素材无代码 / 双结局零画面素材 / 第二幕线条画物件当前为零) |
| 补图 prompt | 8 条 MJ v8.2(下半脸特写 ×3、双结局 ×4、线条勾边卧室 ×1) |
| sref 悬案 | 融合底图 v2 是否挂 --sref 悬置多日;本次依据 sref纯净性原则 裁决为不挂 |
| 引擎改动 | 新增 SceneInsert 机制 + 结局铺图分支 + SoundEvent 的 dur/trimBefore + asset_check 剥注释 |
| 改后复验 | tsc --noEmit 干净 / 资源 70/70 / 总长 5338f = 2:57.93 / S37 = 5158f,四项与改前逐一致 |
| 机制真机验证 | 临时把一张现成图接进 S17 的 insert,渲第 2140 帧(窗口内)与第 2100 帧(窗口外)各一张,两条路径都符合预期,验完回滚 |
一、这次真正的发现:两套口径,两个结论
asset_check.cjs 报 70/70 全绿,同一批资产按剧本审出 4 条 P0。两个结论都是对的,因为它们验的根本不是同一件事。
体检器的检查项是这样来的:正则扫 videoConfig.ts 的 asset / video 字段、扫 Scene.tsx 里字面量的 staticFile('...')、扫 audioLayers.ts 的 file。
也就是说——它的清单是从实现里抽出来的。
于是它能查出”引用了但文件不在”(损坏),永远查不出”剧本要求但从没被引用”(缺失)。
露脸三连、S26 卧室闪现、双结局画面,这三样从来没进过 videoConfig,
在体检器的视野里根本不存在这些条目,跑一万次也是 70/70。
已抽成独立一句话律:绿勾只覆盖它自己那张清单_v1。
同一条律在本次咬了第二口
审计做完之后,我为了验证新写的切入机制,渲了一张 S17 的对照帧。
肉眼看到:S17_运动会_MJ_v1.png 里少年是清晰正脸,而剧本 S17 分帧表 0-0.8s 要求”逆光剪影、脸全黑”,
项目红线 6 写着”林涛全程不露全脸”;另外剧本写的是”廉价蓝色运动服”,图里是白 T 恤。
这条我的审计文档也没查出来——因为我的清单同样是从文本层(videoConfig + prompt 清单)抽的, 查得出”S29 的 asset 是妈妈背影,错配”,查不出”这张图本身违规”。 要查后者,清单得来自剧本,工具得是眼睛。 与 自动化产出双重验收_机器验参数人眼验内容_v1 同源。
二、知识库这次是当工具用的,不是当资料看的
两处直接改变了产出:
1. 飞书链路:会话内零飞书能力,是知识库里那篇 skill 存档把链路补齐的——
CLI 位置、凭证查找顺序、owner_open_id 为什么不可省、手机号/邮箱两条路早已证伪。
没有它,我给出的方案会停在”你自己把 md 拖进飞书导入”。
2. sref 悬案:融合底图 v2 该不该挂 --sref,卡在”锚点待填”多日。
sref纯净性原则 那篇的案例母本恰好就是本项目(妈妈背影当 sref 跑年轻女孩,风格被整个放弃)。
照那条推:融合底图的主体是写实纪录照片,只有一件小物件是线条画,
挂”纯线条+大留白”的咖啡杯锚点等于制造同一个矛盾。结论:不挂,锚点表作废。
由此扩出一条可迁移判据,已回填 sref纯净性原则: 决定挂不挂 sref,看的是画面主体的媒介,不是画面里有没有那个风格的元素。
三、方法论沉淀
1. 镜内切入优于拆镜 ⚠️首次
剧本有四处”一镜之内切一下再切回来”(S17 / S20 / S29 的下半脸特写、S26 的 0.3s 卧室闪现)。
直觉方案是把 S17 拆成 S17a/S17b/S17c,但那会改 starts,进而改 S37 互动点的帧号——
而 5158f = 2:52 是要填进 B 站互动配置的、已经对外承诺过的数。
改成在本镜 durationInFrames 内部做一次硬切,时间轴一帧没动。
已抽成 镜内切入优于拆镜_保住下游帧锚_v1。
2. 承接位要能”素材不在也照常渲” ⭐⭐
SceneInsert 的 asset/video 都为空时整段忽略,画面与 v45 逐像素同路径。
这条是沿用本项目 S10 puton 占位器的既有做法(见 图片占位到视频替换的工作流_v1),
但这次多做了一步:用一张现成素材临时接上去真渲一帧,验证”接管路径”本身能跑。
编译通过只证明类型对。窗口内那帧渲出来,才知道图铺满了、screenText 字卡按预期收掉了。
验完回滚,成本约两次 still 渲染。
3. 从策划文档取词:取正文的描写,不取附录的概括 ⚠️首次
剧本附录把 S17 概括成”笑(克制不住)“,我第一版 prompt 照着写成
a wide unguarded grin, corners pulled back hard——大笑。
回头核剧本正文,写的是”嘴角先动,笑容蔓延,牙齿微露(羞涩)”。
“克制不住”指的是笑容压不住地蔓延,不是笑得开。两者的区别决定这张图成不成立: 大笑会把 S17 / S20 / S29 的三级情绪梯度直接压平,而那三级正是剧本自称的”全片最重要视觉等式”。
同一份文档里,附录是给人记的,正文是给相机拍的。取词取正文。 ⚠️ 单例,未二次验证,暂不立律。
4. 长骨架锁的是取景,不是脸
露脸三连要”构图严格统一”,写法用了 骨架篇幅即权重_v1 的长骨架路线(90 词共用骨架、三张只换末句)。 但那篇明确写着”❌ 不适用于人物锁脸”——所以骨架锁的是取景(裁切线、机位、下颌可见), 下巴形状与唇形在三张之间仍可能漂。
退路写进了清单:E1 定稿后当 sref 跑 E2/E3。这是 sref纯净性原则 允许的用法—— 同主体、同取景、只换光线和嘴部,不存在”妈妈背影跑少女”那种主体错配。
四、判断与事实的分界
| 项 | 性质 |
|---|---|
| 70/70 与 4 条 P0 并存 | 事实,两条命令的输出 |
| 结局码率 0.49 / 1.27 vs 主线 5.30 Mbps | 事实,v45_probe 数据 |
| ”结局画面信息量差一个数量级” | 推断,由码率倒推,未逐帧核对 |
| ”双结局是本片作为互动视频最要命的一条” | 判断,基于”互动视频的兑现点在分支”这一前提 |
| S17 底图违反红线 6 | 事实(渲染帧目视)+ 判断(是否需要重出由主创定) |
| 融合底图不该挂 sref | 推论,由 sref纯净性原则 推出,本次未做 A/B 实证 |
最后一条要特别留一句:结论是推出来的,不是跑出来的。 出图时若发现不挂 sref 的物件线条风格与素材库脱节,这条推论就要回来改。
五、下次改进
- 审计要分两轮:先按实现口径跑体检(快、免费),再按意图口径人工过一遍剧本。 两轮的清单来源必须不同,否则第二轮是第一轮的复读。
- 文档与代码的默认值会漂:
feishu-doc-publish的 SKILL 与 CLI README 都写着 “默认组织内可阅读”,而sync.mjs的实际默认早已是anyone_readable。 本次已回填修正。照文档描述做决策前,先看一眼代码里的默认值。 - 占位机制交付时附一次真机验证,别只交”类型通过”。
- 剧本 v1 与成片 v45 的时长/文案差异已列成对账表,但剧本正文没有回改。 下次定版后应决定:是回改剧本,还是永久保留”剧本=设计值 / 成片=实测值”两套数。
关联文档
- 2026-08-24_擦干净_从素材到动态化制片_全链路复盘_v1 —— 上一阶段,同项目
- 绿勾只覆盖它自己那张清单_v1 —— 本次抽出的一句话律
- 镜内切入优于拆镜_保住下游帧锚_v1 —— 本次抽出的工程律
- 自动化产出双重验收_机器验参数人眼验内容_v1 —— 互补面:那条管”验得够不够深”,本次那条管”验的集合对不对”
- sref纯净性原则 —— 本次的裁决依据,并已回填”看主体媒介”的判据
- 骨架篇幅即权重_v1 —— 露脸三连的写法依据与边界
- MJ_v8.2_行为档案_v1 —— 尾参与
--stylize反压依据 - 图片占位到视频替换的工作流_v1 —— 承接位思路的母档
- 04_方法论与洞察索引