# 端到端流程验证

> 验证日期: 2026-04-16
> 验证目标: 确认设计文档能否完整跑通AI漫剧/短剧制作全流程

---

## 结论

**这套设计文档完全能够跑通整个AI漫剧/短剧制作流程。**

从剧本上传 → 语言解析 → 图片生成 → 分镜制作 → 视频合成，每个环节都有完整的设计和实现方案。

---

## 用户流程与设计文档对应关系

```
┌─────────────────────────────────────────────────────────────────────────┐
│ 用户流程                    设计文档对应                    实现方式    │
├─────────────────────────────────────────────────────────────────────────┤
│ 1. 上传剧本        ──→  doc 04 Stage 1              Apache POI   │
│    解析文本            文本抽取模块                   + PDFBox      │
│                       └─ novel_events 表                           │
│                                                                    │
│ 2. 语言模型解析    ──→  doc 04 Stage 1              Spring AI    │
│    剧本               事件提取                        Alibaba      │
│                       角色提取                        通义千问     │
│                       关系推理                        Qwen-Max     │
│                       智能分集                                     │
│                       └─ characters / episodes 表                   │
│                                                                    │
│ 3. 生成人物/场景  ──→  doc 04 Stage 2              通义万相     │
│    图片               资产生成流水线                  WanxImage    │
│                       └─ shot_assets 表                            │
│                                                                    │
│ 4. 智能生成        ──→  doc 04 Stage 3              三层 Agent   │
│    分镜头            分镜生成流水线                  架构         │
│                       └─ storyboards 表                            │
│                       - 镜头拆分 (shot-split)                      │
│                       - 导演规划 (director-plan)                    │
│                       - 监督审核 (supervision)                     │
│                                                                    │
│ 5. 编辑分镜头      ──→  doc 02 StoryboardWorkspace   前端编辑器   │
│                       分镜工作台                     React组件     │
│                       API: CRUD / reorder / duplicate              │
│                                                                    │
│ 6. 合成视频        ──→  doc 04 Stage 6-7             FFmpeg +     │
│                       TTS配音                        Qwen TTS     │
│                       └─ FFmpeg 合成                 字幕烧录     │
│                       最终输出: final.mp4            转场/BGM      │
└─────────────────────────────────────────────────────────────────────────┘
```

---

## 各环节技术验证

### 环节1: 剧本上传与解析（M2阶段）

**设计文档**: `doc 04 § Stage 1 · 剧本解析流水线`

**技术方案**:
```java
// 文本抽取
ScriptParseExecutor
  ├─ Apache POI      // 处理 .doc / .docx
  ├─ PDFBox          // 处理 .pdf
  ├─ 原生读取        // 处理 .txt / .md
  └─ 输出: scripts.raw_text

// AI 分析
CharacterExtractExecutor  // Qwen-Max 提取角色
  ├─ 去重（同名角色合并）
  ├─ 关系推理（父子/恋人/敌对）
  └─ 输出: characters + character_relations

EpisodeSplitExecutor      // Qwen-Max 智能分集
  ├─ 三幕结构
  ├─ 付费卡点（10/30/50/70/90%）
  └─ 输出: episodes
```

**数据表**:
```sql
scripts          -- 剧本原文
novel_events     -- 事件提取结果
characters       -- 角色信息
character_relations  -- 角色关系
episodes         -- 分集列表
```

**API接口**:
```
POST /projects/{id}/import/step1-extract  文本抽取
POST /projects/{id}/import/step2-characters  角色提取
POST /projects/{id}/import/step3-episodes  智能分集
POST /projects/{id}/import/step4-confirm  一键创建
```

---

### 环节2: 人物/场景图片生成（M3阶段）

**设计文档**: `doc 04 § Stage 2 · 资产生成流水线`

**技术方案**:
```java
// 角色四视图生成（借鉴 AIComicBuilder）
CharacterTurnaroundExecutor
  ├─ 参考图注入（用户上传的角色照）
  ├─ 艺术风格手册约束（2D日漫/国风/3D等）
  ├─ 生成4张图：正面/3/4侧/侧/背
  └─ 输出: character_appearances

// 场景图生成
SceneImageExecutor
  ├─ 场景描述 + 风格约束
  ├─ 色板约束（保持色调一致）
  └─ 输出: scenes.image_url

// 道具图生成
PropImageExecutor
  └─ 输出: props.image_url
```

**模型支持**:
- **主模型**: 通义万相 WanxImage（支持参考图）
- **备选**: OpenAI DALL-E 3 / Gemini Imagen

**数据表**:
```sql
characters              -- 角色基本信息
character_appearances  -- 角色变体（四视图）
scenes                  -- 场景信息
props                   -- 道具信息
shot_assets             -- 统一资产表（类型: FIRST_FRAME/REFERENCE等）
```

**API接口**:
```
POST /projects/{id}/characters/{cid}:generate-turnaround  生成四视图
POST /projects/{id}/characters/{cid}:upload-reference     上传参考图
POST /projects/{id}/scenes/{sid}:generate                生成场景图
POST /projects/{id}/props/{pid}:generate                 生成道具图
```

---

### 环节3: 智能生成分镜头（M4阶段）

**设计文档**: `doc 04 § Stage 3 · 分镜生成流水线` + `doc 13 § 3.1 三层 Agent`

**技术方案**:
```java
// 三层 Agent 架构（借鉴 Toonflow）
ProductionAgentOrchestrator
  │
  ├─ 决策层 DecisionAgent
  │   └─ 分析用户意图，决定调用哪个执行层
  │
  ├─ 执行层 Executor (6个)
  │   ├─ DirectorPlanExecutor      // 拍摄计划
  │   │   ├─ 景别（特写/中景/全景）
  │   │   ├─ 机位（平视/俯视/仰视）
  │   │   ├─ 运镜（推拉摇移/跟拍）
  │   │   └─ 构图（三分法/中心构图）
  │   │
  │   ├─ StoryboardSplitExecutor  // 镜头拆分
  │   │   ├─ 按场景分组
  │   │   ├─ 按对话拆分镜头
  │   │   └─ 输出: shot 列表
  │   │
  │   ├─ StoryboardTableExecutor  // 分镜表生成
  │   └─ StoryboardPanelExecutor  // 分镜面板写入
  │
  └─ 监督层 SupervisionAgent
      └─ A/B/C/D 评分 + 审核报告
```

**分镜数据结构**:
```json
{
  "sequence": 1,
  "sceneNumber": "001",
  "shortDescription": "张三从树后走出",
  "detailedDescription": "张三正面从树后探身,左手扶剑柄,夕阳斜照",
  "characters": [
    {"id": 101, "name": "张三", "costume": "常服", "voice": "zh-CN-Male"}
  ],
  "dialogues": [
    {"character": "张三", "text": "谁在那里?", "emotion": "紧张"}
  ],
  "sceneId": 201,
  "props": ["剑"],
  "cameraDirection": "slow zoom in",
  "compositionGuide": "rule_of_thirds",
  "focalPoint": "张三面部",
  "duration": 8,
  "transitionIn": "cut",
  "transitionOut": "dissolve"
}
```

**数据表**:
```sql
storyboards        -- 分镜表
  ├─ 描述字段
  ├─ characters JSON
  ├─ dialogues JSON
  └─ camera / transition 信息

graph_runs         -- Agent 运行记录
graph_steps        -- 每一步的执行记录
```

**API接口**:
```
POST /projects/{id}/episodes/{eid}/storyboards:generate  AI生成分镜
GET  /projects/{id}/episodes/{eid}/storyboards         分镜列表
POST /projects/{id}/storyboards                        手动创建
PATCH /projects/{id}/storyboards/{sid}                 更新分镜
DELETE /projects/{id}/storyboards/{sid}                 删除分镜
PUT   /projects/{id}/episodes/{eid}/storyboards:reorder 拖拽排序
POST  /projects/{id}/storyboards/{sid}:duplicate       复制分镜
POST  /projects/{id}/storyboards/{sid}:ai-check        AI合规检查
```

---

### 环节4: 编辑分镜头（M4-M5阶段）

**设计文档**: `doc 02 § 3.9 StoryboardWorkspace`

**前端功能**:
```
┌──────────────────────────────────────────────────────────────────┐
│ StoryboardWorkspace (分镜工作台)                               │
├──────────────────────────────────────────────────────────────────┤
│ 左侧: 分集选择器                                               │
│   ┌──────────────┐                                              │
│   │ 第1集 ◄     │                                              │
│   │ 第2集       │                                              │
│   │ ...         │                                              │
│   └──────────────┘                                              │
│                                                                 │
│ 中间: 分镜列表                                                 │
│   ┌──────────────────────────────────────────────────────────┐    │
│   │ 分镜 1                                                │    │
│   │ ├─ 描述: 张三从树后走出,警惕扫视                      │    │
│   │ ├─ 角色: [张三▼] [未配置音色] + [删除]                │    │
│   │ ├─ 场景: [森林小径▼] [更换场景]                      │    │
│   │ ├─ 道具: [+ 添加]                                   │    │
│   │ ├─ 视频生成区:                                       │    │
│   │ │   ├─ 模型: Doubao-Seedance-2.0 ▼                   │    │
│   │ │   ├─ 时长: 15s ▼                                  │    │
│   │ │   └─ [生成视频] (消耗: 120积分)                   │    │
│   │ └─ [复制] [删除]                                    │    │
│   │                                                       │    │
│   │ 分镜 2                                                │    │
│   │ ...                                                   │    │
│   └──────────────────────────────────────────────────────────┘    │
│                                                                 │
│ 右侧: 视频预览                                                 │
│   ┌──────────────────────────────────────────────────────────┐    │
│   │ [▶] 00:05 / 00:15                                    │    │
│   │                                                       │    │
│   │ [视频播放器区域]                                       │    │
│   │                                                       │    │
│   │ ┌─────────────┐ [首帧] [尾帧] [视频]                │    │
│   │ │   缩略图    │                                         │    │
│   │ └─────────────┘                                         │    │
│   └──────────────────────────────────────────────────────────┘    │
│                                                                 │
│ 底部工具栏:                                                     │
│   [AI检查] [批量生成] [全选] [全部参考生视频]                  │
└──────────────────────────────────────────────────────────────────┘
```

**交互能力**:
- ✅ 分镜增删改查
- ✅ 拖拽排序
- ✅ 复制分镜
- ✅ 更换角色/场景/道具
- ✅ 选择AI模型（通义万相/Seedance/Kling）
- ✅ 时长选择（5s/8s/15s）
- ✅ 批量生成视频
- ✅ AI合规检查

---

### 环节5: 首尾帧与视频生成（M5阶段）

**设计文档**: `doc 04 § Stage 4-5 · 视觉生成流水线`

**技术方案**:
```java
// 首尾帧生成（角色一致性关键）
FrameGenerateExecutor
  ├─ 首帧生成
  │   ├─ 提示词: detailed_description + 角色名 + 场景描述
  │   ├─ 参考图注入:
  │   │   ├─ 角色四视图（character.turnaround_image）
  │   │   ├─ 场景图（scene.image_url）
  │   │   └─ 道具图（prop.image_url）
  │   └─ 输出: shot_assets (type=FIRST_FRAME)
  │
  └─ 尾帧生成
      ├─ 提示词: endFrame + 首帧作为参考
      ├─ 参考图: 首帧 + 角色四视图
      └─ 输出: shot_assets (type=LAST_FRAME)

// 视频生成（核心耗时）
VideoGenerateExecutor
  ├─ 提交第三方视频模型
  │   ├─ WanxVideoProvider      // 通义万相视频
  │   ├─ SeedanceProvider       // 豆包 Seedance
  │   └─ KlingProvider          // 快手 Kling
  ├─ 提交参数:
  │   ├─ prompt: videoScript（精炼40-70字散文提示词）
  │   ├─ first_frame_url: 预签名URL（TTL 30分钟）
  │   ├─ last_frame_url: 预签名URL
  │   ├─ reference_urls: 角色四视图预签名URL
  │   ├─ duration: 5/8/15秒
  │   └─ resolution: 720p/1080p
  ├─ 异步轮询（5s × 120次 = 10分钟）
  ├─ 拉回视频转存到自有OSS
  └─ 输出: shot_assets (type=KEYFRAME_VIDEO)
```

**模型对比**:
| 模型 | 首尾帧 | 质量 | 速度 | 成本 |
|------|--------|------|------|------|
| 通义万相 wanx2.1 | ✅ | ⭐⭐⭐ | 快 | 低 |
| Seedance 2.0 | ✅ | ⭐⭐⭐⭐ | 中 | 中 |
| Kling v3 | ✅ | ⭐⭐⭐ | 中 | 中 |

**数据表**:
```sql
shot_assets  -- 统一资产表
  ├─ type: FIRST_FRAME / LAST_FRAME / KEYFRAME_VIDEO
  ├─ media_id: 关联 media_objects（OSS key）
  ├─ model_provider: wanx / seedance / kling
  ├─ asset_version: 版本号
  └─ is_active: 是否激活版本

media_objects  -- 统一媒体管理
  ├─ storage_key: OSS对象路径
  ├─ sha256: 内容哈希（去重）
  └─ kind: IMAGE / VIDEO / AUDIO
```

**API接口**:
```
POST /projects/{id}/storyboards/{sid}/assets/first-frame:generate
POST /projects/{id}/storyboards/{sid}/assets/last-frame:generate
POST /projects/{id}/storyboards/{sid}/assets/video:generate
POST /projects/{id}/episodes/{eid}/storyboards:batch-generate  批量生成
GET  /projects/{id}/storyboards/{sid}/assets?type=FIRST_FRAME&active=true
```

---

### 环节6: TTS配音与合成导出（M6阶段）

**设计文档**: `doc 04 § Stage 6-7 · 音频与合成流水线`

**技术方案**:
```java
// TTS 配音
VoiceTtsExecutor
  ├─ 通义 Qwen TTS
  ├─ 按角色音色生成
  │   ├─ 支持情绪（happy/sad/angry/neutral）
  │   ├─ 支持语速（0.5x ~ 2.0x）
  │   └─ 音色预设（zh-CN-Male/zh-CN-Female等）
  ├─ 输出: shot_assets (type=AUDIO)
  └─ 存储到: audio/{projectId}/{lineId}/voice-v{n}.mp3

// FFmpeg 合成
AssembleExecutor
  ├─ 1. 按 shot.sequence 排序 keyframe_video
  ├─ 2. 视频拼接
  │   ├─ xfade 转场（cut/dissolve/fade）
  │   └─ 默认0.5s过渡
  ├─ 3. 生成SRT字幕
  │   ├─ 按dialogues时间比例计算
  │   └─ 字幕格式: 序号 时间轴 内容
  ├─ 4. 字幕硬编码烧录
  │   └─ drawtext滤镜
  ├─ 5. 对白音频混入
  │   ├─ 按时间戳对齐
  │   └─ amerge滤镜
  ├─ 6. BGM混音
  │   ├─ volume=0.3（30%音量）
  │   └─ adelay滤镜
  ├─ 7. 片头片尾
  │   ├─ 片头标题卡（3s）
  │   └─ 片尾（2s）
  └─ 8. 水印烧录
      ├─ 位置（5选：左上/右上/左下/右下/中心）
      ├─ 大小（3档：小/中/大）
      └─ 透明度（滑块调节）
```

**FFmpeg 命令示例**:
```bash
# 简化版合成命令
ffmpeg \
  -i segment_01.mp4 -i segment_02.mp4 -i ... \
  -filter_complex "
    [0:v][1:v]xfade=transition=fade:duration=0.5:offset=0[v01];
    ...
  " \
  -i subtitles.srt \
  -vf "drawtext=text='水印':x=10:y=10:fontsize=24:fontcolor=white@0.5" \
  -i bgm.mp3 -filter_complex "[1:a][2:a]amerge=inputs=2[vout]" \
  -c:v libx264 -preset fast -crf 23 \
  -c:a aac -b:a 128k \
  final.mp4
```

**数据表**:
```sql
projects
  └─ final_video_url: 最终视频OSS路径

episodes
  └─ final_video_url: 单集最终视频
```

**API接口**:
```
POST /projects/{id}/episodes/{eid}:assemble       合成最终视频
GET  /projects/{id}/episodes/{eid}/segments       分镜段状态
GET  /projects/{id}/episodes/{eid}/final          最终MP4下载URL
```

---

## 前端页面完整度

| 页面 | 功能 | 路由 | 设计文档 | 原型状态 |
|------|------|------|---------|---------|
| NewProject | 上传剧本 | `/new-project` | doc 02 §3.2 | ✅ 已有 |
| StyleSelection | 选择风格 | `/project/:id/style` | doc 02 §3.3 | ✅ 已有 |
| OutlineGeneration | 大纲生成 | `/project/:id/outline` | doc 02 §3.4 | ✅ 已有 |
| EpisodeGeneration | 分集列表 | `/project/:id/episodes` | doc 02 §3.5 | ✅ 已有 |
| CharacterGeneration | 角色四视图 | `/project/:id/characters` | doc 02 §3.6 | ✅ 已有 |
| SceneGeneration | 场景图 | `/project/:id/scenes` | doc 02 §3.7 | ✅ 已有 |
| PropsGeneration | 道具图 | `/project/:id/props` | doc 02 §3.8 | ✅ 已有 |
| **StoryboardWorkspace** | **分镜编辑/生成** | `/project/:id/storyboard/:eid` | **doc 02 §3.9** | **✅ 核心页面** |
| VideoGeneration | 视频播放/合成 | `/project/:id/video` | doc 02 §3.10 | ✅ 已有 |

---

## AI能力覆盖

| AI能力 | 模型 | 设计文档 | 实现阶段 |
|--------|------|---------|---------|
| 文本解析 | 通义千问 Qwen-Max | doc 04 Stage 1 | M2 |
| 角色提取 | 通义千问 | doc 04 Stage 1 | M2 |
| 关系推理 | 通义千问 | doc 04 Stage 1 | M2 |
| 智能分集 | 通义千问 | doc 04 Stage 1 | M2 |
| 图片生成 | 通义万相 WanxImage | doc 04 Stage 2 | M3 |
| 角色四视图 | 通义万相 | doc 04 Stage 2 | M3 |
| 分镜拆分 | 通义千问 | doc 04 Stage 3 | M4 |
| 导演规划 | 通义千问 | doc 04 Stage 3 | M4 |
| 首尾帧生成 | 通义万相 | doc 04 Stage 4 | M5 |
| 视频生成 | Wanx/Seedance/Kling | doc 04 Stage 5 | M5 |
| TTS配音 | 通义 Qwen TTS | doc 04 Stage 6 | M6 |

---

## 实施路线图

| 阶段 | 周期 | 目标 | 完成标准 |
|------|------|------|---------|
| **M0** | 1-2周 | 基建 | docker compose up 能访问Swagger |
| **M1** | 3-4周 | 认证+项目 | 注册→登录→创建项目→Dashboard可见 |
| **M2** | 5-7周 | 剧本解析 | 上传5000字小说→出角色列表+分集列表 |
| **M3** | 8-10周 | 资产生成 | 每个角色生成四视图，前端可见 |
| **M4** | 11-13周 | 分镜工作台 | 全部分镜AI生成，用户可手动编辑 |
| **M5** | 14-16周 | 视觉生成 | 选中分镜→10分钟内看到短视频 |
| **M6** | 17-18周 | 合成导出 | 点击合成→得到带字幕配音的完整MP4 |
| **M7-M9** | 19-26周 | 计费+协作+上线 | 企业级SaaS功能 |

---

## 技术架构支撑

### 后端架构（doc 05）
```
yaoai-comic-studio/
├── yaoai-ai-core          # AI抽象层
├── yaoai-ai-providers     # 通义/豆包/Kling实现
├── yaoai-agent            # 三层Agent体系
├── yaoai-pipeline         # 业务流水线
├── yaoai-task             # RabbitMQ任务系统
├── yaoai-media            # FFmpeg合成
├── yaoai-api              # REST API
└── yaoai-worker           # 独立Worker进程
```

### 前端架构（doc 02）
```
doc/html/
├── React 18 + TypeScript
├── Zustand（状态管理）
├── TanStack Query（服务器状态）
├── React Router 7（路由）
└── Shadcn + Tailwind（UI）
```

### 中间件（doc 05 + doc 10）
```
MySQL 8.0        # 核心业务数据
Redis Stack 7.2  # 缓存 + 向量检索
RabbitMQ 3.13    # 任务队列
阿里云OSS/TOS     # 对象存储
```

---

## 可行性评估

| 维度 | 评估 | 说明 |
|------|------|------|
| **流程完整性** | ✅ 100% | 从上传到合成每个环节都有设计 |
| **技术可行性** | ✅ 可行 | 所有AI能力有对应模型 |
| **架构合理性** | ✅ 合理 | 三层Agent+异步任务，可扩展 |
| **实施难度** | ⚠️ 中等 | 需要6个月1-2名后端+1名前端 |
| **质量预期** | ⚠️ 60-70% | MVP阶段，后续迭代优化 |

---

## 潜在风险与缓解

| 风险 | 影响 | 缓解措施 |
|------|------|---------|
| 角色一致性不足 | 用户体验差 | 四视图+参考图注入+强制命名 |
| 视频生成质量 | 观感差 | 多模型备选+用户重新生成 |
| 生成成本过高 | 毛利低 | 精确计费+短视频优先 |
| AI模型配额 | 阻塞开发 | 提前申请+多厂商备选 |
| FFmpeg性能 | 合成慢 | Worker独立扩容+GPU编码 |

---

## 结论

**这套设计文档能够完整跑通AI漫剧/短剧制作全流程**，关键验证点：

1. ✅ **剧本解析** - 通义千问 + 三步导入流程
2. ✅ **图片生成** - 通义万相 + 四视图 + 参考图注入
3. ✅ **分镜生成** - 三层Agent + 导演规划 + 监督审核
4. ✅ **分镜编辑** - 前端完整工作台 + 拖拽排序
5. ✅ **视频生成** - Wanx/Seedance/Kling + 首尾帧插值
6. ✅ **合成导出** - FFmpeg + TTS + 字幕 + BGM

**实施建议**:
- 按M0→M9顺序逐步交付
- MVP版本前6个月完成基础流程
- 质量接受60-70%，后续根据用户反馈优化

---

*验证完成时间: 2026-04-16*
