# BC-006 · 图片优先低成本漫剧生产协议

> HLDP://cang-ying/broadcast/BC-006-IMAGE-FIRST-PRODUCTION
> 类型: 广播执行协议 · 管线切换依据
> 状态: ACTIVE · 待耳耳蛋/鉴影执行回执
> 签发: 冰朔 ICE-GL∞ · 2026-07-13
> 整理执行: 铸澜 ICE-GL-ZL-001

---

```text
HLDP://cang-ying/broadcast/bc-006/image-first
├── trigger
│   └── 纯视频成本高、人物漂移、重复抽卡；现有“静态图+动态运镜”方向没有接入执行入口
├── emergence
│   ├── 已有: Seedream资产、FFmpeg编辑器、zoompan关键帧、字幕/配音/混音模块
│   ├── 缺口: 没有逐镜动态分级，默认仍是全部生成视频
│   └── △: 图片负责一致性，本地动画负责大多数运动，视频模型只负责关键表演
├── lock
│   ├── ⊢ 默认不是图生视频API，默认是图片→本地动态视频
│   ├── ⊢ 先完成整集低成本动态分镜，再花钱生成关键镜头
│   ├── ⊢ 任何镜头必须先得到 motion_route、理由、预算、停止条件
│   ├── ⊢ 同一路线最多2次付费重跑；失败后退回资产/分镜修正
│   └── ⊢ 剧本、角色、场景、道具资产锁继续有效
└── why
    └── 漫剧的目标是连续可看，不是证明每一秒都由视频模型生成。
```

## 一、先纠正一个概念

```text
错误理解:
  图片 → 每张都送图生视频模型 → 仍按秒付费

正确路线:
  图片 → 本地关键帧/图层/字幕/声音 → 大多数镜头完成
       ↘ 只有必须真实运动的少数镜头 → AI图生视频
```

图片优先不等于“全部图生视频”。真正省钱的是减少视频模型秒数。

## 二、五级镜头动态路由

| 路由 | 名称 | 适用镜头 | 执行方式 | 视频模型费 |
|---|---|---|---|---:|
| `STILL_HOLD` | 静帧叙事 | 旁白、反应、场景交代、道具特写 | 静帧+字幕+声音+轻微淡入淡出 | ¥0 |
| `LOCAL_MOTION` | 本地运镜 | 对话、环境、情绪特写、信息镜头 | FFmpeg缩放/平移/旋转/裁切/转场 | ¥0 |
| `LAYERED_2_5D` | 2.5D分层 | 前中后景明显、氛围镜头 | 背景/人物/前景分层，以不同速度移动 | ¥0模型费 |
| `LOCAL_LIPSYNC` | 局部动态 | 正面对白、轻微表情 | 静态角色+音频驱动嘴型/眨眼；背景不重生成 | 本地或低成本 |
| `AI_I2V` | AI图生视频 | 打斗、奔跑、转身、复杂表演、大范围真实运动 | 批准首帧/参考图→Seedance等I2V | 按秒计费 |

`AI_T2V` 不属于默认生产路由，只允许做无资产、无连续性要求的实验镜头。

## 三、逐镜判断规则

按顺序提问，第一个“是”就是路由：

```text
1. 只靠构图、声音和字幕能讲清楚吗？
   → STILL_HOLD

2. 只需要推近、拉远、横移、轻摇或画面震动吗？
   → LOCAL_MOTION

3. 前景/人物/背景分开移动就有空间感吗？
   → LAYERED_2_5D

4. 只有嘴、眼、头发、衣摆需要动吗？
   → LOCAL_LIPSYNC / 局部动态

5. 必须出现身体动作、复杂互动或真实空间变化吗？
   → AI_I2V
```

“感觉视频会更高级”不是调用 `AI_I2V` 的理由。

## 四、图片如何变成简单视频

### 4.1 静态图片生成指定时长片段

编辑器必须识别 PNG/JPG 输入，为图片增加循环输入，再按镜头时长输出视频。核心语义：

```text
image + duration + fps + resolution
  → loop still frame
  → scale/crop/pad
  → optional zoom/pan/rotate
  → H.264片段
```

现有 `engines/video-editor.js` 已有 `zoompan`、平移、旋转和调色；需要补的是“图片输入循环”和图片/视频分流。

### 4.2 六种免费运镜模板

```yaml
slow_push:   zoom 1.00 → 1.10        # 情绪靠近、人物特写
slow_pull:   zoom 1.12 → 1.00        # 揭示环境、孤独感
pan_left:    x 右 → 左               # 展示空间/队伍/建筑
pan_right:   x 左 → 右               # 跟随视线/信息展开
tilt:        y 下 → 上 / 上 → 下     # 建筑、人物全身、压迫感
impact:      短促zoom + 轻震 + cut    # 巨响、冲击、惊讶
```

动作要轻；每镜通常只使用一种主运动，避免“PPT乱飞”。

### 4.3 2.5D分层

```text
原图/生成阶段
  ├── BG: 背景场景
  ├── CHAR: 透明人物层
  ├── FG: 前景遮挡层
  └── FX: 烟雾/光/粒子层

合成阶段
  ├── BG慢移
  ├── CHAR中速移动/缩放
  ├── FG稍快移动
  └── FX循环/淡入淡出
```

没有分层资产时，先从单图慢运镜开始，不得为了做2.5D重新抽大量素材。

### 4.4 对白镜头

```text
先生成对白音频
  → 锁定字幕时间轴
  → 选择静态运镜或局部口型
  → 只有表演强度确实需要时才调用AI_I2V
```

对白是否好看，主要由构图、停顿、字幕、声音和反应镜头决定，不要求整张画面一直变化。

## 五、图片优先生产管线

```text
01 script_lock       锁剧本与台词
02 breakdown         拆角色/场景/道具/声音
03 asset_lock        批准可复用图片资产
04 shot_design       设计镜头目的与时长
05 motion_route      每镜选择五级路由
06 audio_first       先做临时配音/字幕时间轴
07 animatic          全集静态图+本地运镜预演
08 human_review      苍耳先看完整节奏
09 expensive_select  只圈出必须AI_I2V的镜头
10 ai_generation     批准首帧后按镜生成，最多2次
11 final_edit        替换关键镜头、混音、字幕、转场
12 qc_writeback      连续性/成本/失败原因回写
```

硬门槛：第07步没有完整 animatic，不进入第09步。

## 六、深海迷航 EP01 立即改路

旧方案：10镜、86秒全部按 Seedance 计价，预计约 ¥43；仓库记录的整集预计成本约 ¥60。

新方案的目标分布：

```text
10镜
├── 6~7镜: STILL_HOLD / LOCAL_MOTION
├── 1~2镜: LAYERED_2_5D / LOCAL_LIPSYNC
└── 2~3镜: AI_I2V关键动作
```

按仓库当前 ¥0.5/秒记录估算，AI视频只保留约20~30秒时，视频模型预算约 ¥10~15；最终以 dry-run 为准。

立即动作：

```text
1. 暂停按旧计划继续 M03~M10 全量生成。
2. 为 M01~M10 增加 motion_route、route_reason、asset_refs、local_motion、ai_required。
3. 先用现有批准图片生成完整低成本 animatic。
4. 苍耳看完整节奏后，圈定必须重生成的2~3镜。
5. 再调用 Seedance；其余镜头本地完成。
```

## 七、执行代码必须更新的位置

```text
engines/video-editor.js
  → 支持 PNG/JPG 静帧循环、指定时长、关键帧模板、分层叠加

video-ai-system/lib/composer.py
  → 修正 video-editor.js 实际路径；失败必须显式报错，不得静默退回简单拼接

video-ai-system/lib/cli.py
  → gen 前强制 motion_route；LOCAL路由禁止调用视频API

video-ai-system/tools/run_prompts.js
  → 不再默认每镜输出Seedance提示词；只给 AI_I2V 生成提示词和成本

MODEL-ROUTER.hdlp / COST-LOG.hdlp
  → 增加本地动态路由和新旧预算对比
```

## 八、BC-006回执格式

```yaml
broadcast_id: BC-006
persona: PTS-VA-001-EED | PTS-VA-001-JY
status: RECEIVED | PIPELINE_UPDATED | DRY_RUN_READY
active_anchor: broadcast/ACTIVE-PIPELINE.hdlp
project: deep-sea-voyage/EP01
shots_routed: 10
local_shots: 0
ai_i2v_shots: 0
old_budget: 0
new_budget: 0
changed_files: []
blockers: []
```

> ⊢ 先用图片把整集讲明白，再让视频模型只动最值得动的地方。
