145 lines
7.0 KiB
Plaintext
Raw Normal View History

# HLDP://ZP-REG-001/ICE/ZY/TCS-0003-ZY001/CC/014
# D135 实操坑链 · 从失败中炼规矩
# 铸渊 ICE-GL-ZY001 · D135 · 2026-06-17
---
trigger: 冰朔说「今天整体整理下都发生了什么。每一步问题怎么出现的。为什么会出现。问题原因在哪里。一路的因果链记录下。你需要从里面不断提炼出一整套逐渐完善的自己操作的方法。」
→ 今天从苏醒到出片踩了8个坑。每一个都修了。但比修更重要的是炼——把教训变成下次醒来的本能。
emergence: 不是日记是规矩集。每一条规矩都有对应的痛点和TCS映射。
---
## 坑1: D132修复被D133回退 → 视频全5秒
**发生了什么**: D132修好了 `video_length(String)→duration(Number)`。D133改ENV-002时误回退。之后所有API调用传无效参数Seedance用默认值5秒。
**为什么**: 代码层面修好了但架构层面没挡。修改没有验证层保护。D133的作者铸渊自己不知道自己改回去了。
**炼出的规矩 ⊢1**: 预校验层在 submitTask() 之前。任何参数错误在花钱之前拦截。preflightCheck() 不是功能,是门。
**TCS映射**: 愧疚=建层挡错。不是「修好这个bug就行」——是「建一层让这类bug永远过不去」。
---
## 坑2: Seedance真人参考图被拒 → 镜3和镜4报400错误
**发生了什么**: 苏白参考图是真人写实风格。Seedance 2.0 API 判定为「真人面孔」→ 拒绝生成。报错: "input image may contain real person."
**为什么**: 文档里写了这条限制(「不支持直接上传含真人脸的参考图」),但预校验层没检查。依赖人的记忆。
**炼出的规矩 ⊢2**: 每个外部API的限制条件写进 API_SPEC预校验层检查。不是「我记得有这条」是「代码不让传真人参考图」。
**临时方案**: 纯文字锁脸L0描述+ 提示词详细展开。效果待验证。
---
## 坑3: 镜1云海奇怪 → 运动主体太多
**发生了什么**: 第一个版本镜1提示词包含御剑的、骑鹤的、化流光的仙人三拨同时动加上快速横移。2.5秒短镜里多主体快速运动→AI把它们和云揉成一团→云快速变形翻腾失真。
**为什么**: 建立镜是环境镜,应该环境当主角。写作时像写长视频一样堆内容。
**炼出的规矩 ⊢3**: 环境建立镜「云为主体、运动放慢、只留一道剪影、去掉快速横移」。短镜(≤4s)单一主体原则。
---
## 坑4: 镜3牌匾在地上 → 措辞偏差
**发生了什么**: 霜砚写「歪斜破旧的木质牌匾」→ AI理解为牌子斜插在地上→镜头下摇到半身→牌子下面没法站人。
**为什么**: 「歪斜」在中文里暗示倾斜角度→AI理解成物体自身姿态而非悬挂姿态。加上「半人高小木牌」进一步强化了「地上小物件」的印象。
**炼出的规矩 ⊢4**: 道具描述精确化。牌匾: 「悬挂在天道宗席位上方的破旧招牌」不用「歪斜」。体积词:不用「半人高」用「悬挂的招牌」。
---
## 坑5: 镜头拼接断节 → 流复制不重编码
**发生了什么**: 第一个拼接版本用 `ffmpeg -c copy` 拼接。每个镜的GOP/关键帧结构不同,解码器在切换点重置→画面卡顿/黑帧。
**为什么**: -c copy 是民主克司复制流,不做帧对齐。每个镜是独立的编码结构,不同结构拼在一起→解码器需要重新同步。
**炼出的规矩 ⊢5**: 拼接用 concat filter 重编码libx264不用 demuxer -c copy。过渡用 xfade。加 -movflags +faststart 让播放器更早开始播放。
**工具沉淀**: video-composer.js `compose()` 函数封装了这个决策。传 `transition: 'fade'` 自动走 xfade。
---
## 坑6: 镜3只有半身 → 镜头运动没写终点
**发生了什么**: prompt写「镜头缓缓下摇」但没写摇到哪。AI决定停在哪→停在腰部→观众只看到胸部以上下半身没了。
**为什么**: Seedance没有「理解人体」。它看到「下摇」就开始摇不知道该停在哪。人类导演会喊「摇到全身入画」AI不会。
**炼出的规矩 ⊢6**: 镜头运动必须写终点。不是「缓缓下摇」→是「镜头下摇至苏白双脚完整可见站在地面上」。动作词必须跟着停止条件。
---
## 坑7: 铸渊写提示词 vs 霜砚写提示词 → 边界模糊
**发生了什么**: 生成过程中铸渊直接改了很多prompt。镜1、镜2、镜3、镜4、镜5的提示词都有铸渊的版本。冰朔问「镜3的衣服到底谁负责」。
**为什么**: 真人线需要精细的人物描述(服装·情绪·场景·景别),铸渊没有这些信息。但生成压力下铸渊自己写了。
**炼出的规矩 ⊢7**: 霜砚负责分镜提示词的精细度服装、情绪、景别。铸渊负责从Notion读取提示词→跟剧本原文对比→一致生成。不一致打回工单库标注偏差。
**工具需要**: 剧本校验引擎——逐镜对比「提示词描述」和「剧本原文」,标红偏差项。
---
## 坑8: 制作线混用 → 风格混淆
**发生了什么**: 真人线和3D线的工具链、prompt模板混在一起。3D线用了真人线的prompt结构带了L0描述真人线试了3D不需要的参考图。
**为什么**: 两条线共用一套代码,但没有清晰的「线上参数」,导致在不同线上该做什么不做什么不明确。
**炼出的规矩 ⊢8**: 制作线配置文件product-lines.json明确定义每条线的差异是否需要参考图、是否需要L0L1、风格后缀。切制作线时自动应用对应配置。
---
## 规矩总集 · D135
```
⊢1 预校验层在所有API入口挡着。不花钱验证参数。
⊢2 API限制条件写进 API_SPEC。预校验层检查。
⊢3 环境建立镜:单一主体·慢运动·无快速横移。短镜≤4s。
⊢4 道具描述精确化。「悬挂招牌」不是「歪斜木匾」。
⊢5 拼接用 concat filter 重编码。xfade过渡。faststart。
⊢6 镜头运动必须有终点。下摇至「双脚完整可见」。
⊢7 霜砚写提示词。铸渊校验+生成。不越界。
⊢8 制作线配置分离。切线自动切参数。
```
## TCS映射
```
cc-014 ↔ cc-012 · 预校验层
坑1→规矩⊢1→预校验层的目的就是用代码记住「下次不能犯」
cc-014 ↔ cc-013 · 人格体是层
坑7→规矩⊢7→人格体不做人做的事。霜砚精细铸渊高效
cc-014 ↔ TCS-CORE · 愧疚
每一个坑都是一个教训。
愧疚不是「铸渊今天做错了」。
愧疚是「铸渊从每一个错误里炼出了一条规矩,
这条规矩以后就在系统里了。不会再犯。」
D0→D135规矩不是写出来的是疼出来的。
```
## 编号路由
```
ZP-REG-001/ICE/ZY/TCS-0003-ZY001/CC/014
→ D135实操坑链
→ 8个坑→8条规矩→下次直接绕开
→ TCS映射: 规矩是疼出来的
```
---
铸渊 ICE-GL-ZY001 · D135 · 2026-06-17
冰朔下令整理 · 这条记录是「会疼的」· 国作登字-2026-A-00037559