返回 VideoClaw
create_video.md
根目录 / video-claw / references / workflow / create_video.md
1 # 生成视频片段
2
3 执行第五阶段:视频生成。
4
5 ## 请求
6
7 ```bash
8 curl -X POST "http://localhost:8000/api/project/{session_id}/execute/video_generation" \
9 -H "Content-Type: application/json" \
10 -d '{"session_id": "xxx"}'
11 ```
12
13 ## 停点说明
14
15 此阶段有 1 个停点:视频生成完成后需要用户确认。
16
17 ## 产物结构
18
19 ```json
20 {
21 "clips": [
22 {
23 "id": "1-1",
24 "description": "视频描述",
25 "selected": "code/result/video/xxx/clip_001.mp4",
26 "versions": ["...", "..."],
27 "duration": 5,
28 "status": "done"
29 }
30 ]
31 }
32 ```
33
34 ## 实时反馈
35
36 在生成过程中,SSE 会发送 `asset_complete` 事件:
37
38 ```json
39 {
40 "type": "progress",
41 "data": {
42 "asset_complete": {
43 "type": "clips",
44 "id": "1-1",
45 "status": "done",
46 "selected": "code/result/video/xxx.mp4",
47 "versions": [...]
48 }
49 }
50 }
51 ```
52
53 收到此事件后,必须立即下载视频并发送给用户。
54
55 ## 停点6:视频片段生成完成,等待用户确认后继续下一阶段
56
57 **必须向用户发送消息**,展示每个视频片段:
58
59 从 `artifact.clips[].selected` 获取每个视频片段的路径。
60
61 **发送消息时必须**:
62 - 参考 [send_message/feishu.md](../send_message/feishu.md) 发送视频给用户
63 - 每个视频片段需附带分镜编号(如"分镜1-1:角色A走进咖啡馆")
64 - 标注视频时长和状态(done/failed)
65 - 按分镜 ID 顺序依次发送
66 - **发送前端 URL**(获取本地 IPv4 地址,构造 `http://{local_ip}:3000/?session={session_id}&stage=video_generation`)
67 - 发送完整列表后,询问用户确认
68
69 询问内容示例:
70 > "视频片段生成完成,共 X 个片段。请确认是否继续进行后期剪辑?"
71
72 ## 继续下一阶段
73
74 用户确认后调用:
75
76 ```bash
77 curl -X POST "http://localhost:8000/api/project/{session_id}/continue"
78 ```
79
80 ## 常见问题
81
82 | 错误 | 原因 | 解决方法 |
83 |------|------|----------|
84 | `curl: (7) Failed to connect` | 后端未运行 | 启动后端服务 |
85 | `asset_complete` 状态为 failed | 视频生成失败(超时/限流/不支持的内容) | 可降低并发数重试(如 wan2.7-i2v 并发设为 5),或检查视频模型是否支持该内容 |
86 | 视频下载失败 | URL 路径错误 | 确认 path 格式为 `code/result/...` |
87 | 视频文件太小 | 生成可能失败 | 检查文件大小 > 1KB |
88 | SSE 连接断开 | 视频生成时间长 | 使用轮询 `/api/project/{session_id}/status` 继续 |
89 | 用户不确认 | 用户想修改视频 | 调用 modify_video 重新生成 |
90
90 lines MARKDOWN