短剧工作流 API:从剧本到成片
用一个请求把剧本变成角色定妆图、分镜、首帧和视频片段。POST /v1/workflows/short-drama 自动完成剧本分析、分镜、出图和出片,每一步按所用模型计价。
POST /v1/workflows/short-drama 接收一段剧本,按顺序自动完成:
- 提取角色:识别剧本里的人物和动物,生成外观描述;
- 拆分镜:按场景拆成镜头,给出景别、运镜、画面、台词和音效,并按视频模型的时长上限把镜头打包成片段;
- 角色定妆图:每个角色一张全身设定图,用来保持角色在各个镜头里长得一样;
- 首帧:每个片段生成一张首帧,带上出场角色的定妆图作参考;
- 视频片段:用首帧和片段提示词生成视频,对白和音效写在提示词里,支持原生音频的模型会直接出声音。
整个流程是一个异步任务。你提交剧本拿到工作流 ID,之后轮询结果。每一步都是一个普通的生成任务,按所用模型的单价计费,费用会出现在控制台「日志」里;失败的步骤不收费。
不想写代码?可以看看 AI 短剧方案 里的无代码工具。
#先预估费用
bash
curl https://bigmodel.io/v1/workflows/short-drama \
-H "Authorization: Bearer $BIGMODEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"script": "第一场 雨夜 便利店门口……", "max_segments": 6, "dry_run": true}'json
{"object": "quote", "workflow": "short_drama", "max_segments": 6, "estimated_cost_usd": 4.24}预估按 max_segments 个片段和典型片段时长计算,实际费用按实际生成的片段数和秒数结算,通常更低。
#创建工作流
cURL
curl https://bigmodel.io/v1/workflows/short-drama \
-H "Authorization: Bearer $BIGMODEL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: episode-01" \
-d '{
"script": "第一场 雨夜 街角便利店 外\n林小满(二十岁,短发,黄色雨衣)抱着一只湿透的小狗跑进屋檐下。\n林小满:别怕,我们到家了。",
"style": "温暖电影感,写实",
"aspect_ratio": "9:16",
"image_model": "qwen-image-2.1",
"video_model": "seedance-2.0-fast",
"max_segments": 6
}'Python
import os, time, requests
BASE = "https://bigmodel.io/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['BIGMODEL_API_KEY']}"}
wf = requests.post(f"{BASE}/workflows/short-drama", headers={**HEADERS, "Idempotency-Key": "episode-01"}, json={
"script": open("episode-01.txt", encoding="utf-8").read(),
"style": "温暖电影感,写实",
"aspect_ratio": "9:16",
"video_model": "seedance-2.0-fast",
"max_segments": 6,
}).json()
while wf["status"] in ("queued", "running"):
time.sleep(15)
wf = requests.get(f"{BASE}/workflows/{wf['id']}", headers=HEADERS).json()
print(wf["stage"], wf["progress"])
for seg in wf["segments"]:
print(seg["title"], (seg["video"] or {}).get("url"))
print("total", wf["cost_usd"])#请求字段
| 字段 | 默认值 | 说明 |
|---|---|---|
script |
必填 | 剧本正文,最多 20000 字。场景头、人物、动作和台词写得越清楚,分镜越准确。 |
style |
空 | 画面风格,例如「温暖电影感,写实」「日系动画」。会加到定妆图、首帧的提示词里。 |
aspect_ratio |
9:16 |
9:16(竖屏短剧)、16:9 或 1:1。 |
image_model |
qwen-image-2.1 |
生成定妆图和首帧的文生图模型。qwen-image-2.1 能把定妆图作为参考,角色一致性最好。 |
video_model |
seedance-2.0-fast |
生成片段的视频模型,必须支持图生视频。支持参考图的模型(如 seedance-2.0 系列、minimax-h3)会同时参考首帧和角色定妆图。 |
resolution |
模型默认(通常 720p) |
必须是该视频模型支持的分辨率。 |
audio |
模型默认 | 是否生成原生音频,仅支持音频的视频模型可用。 |
max_segments |
6 |
最多生成多少个片段(1–20)。剧本更长时只做前面的片段。 |
stop_after |
videos |
提前结束:storyboard(只要角色和分镜)、frames(再加定妆图和首帧)、videos(完整流程)。 |
dry_run |
false |
只返回预估费用。 |
请求头 Idempotency-Key 可选:同一个值重复提交,返回同一个工作流。
#查询进度和结果
GET /v1/workflows/{id} 返回:
json
{
"id": "e5d2c392-…",
"object": "workflow.short_drama",
"status": "running",
"stage": "videos",
"progress": {"clips_done": 1, "clips_total": 2},
"estimated_cost_usd": 0.60,
"cost_usd": 0.21,
"characters": [
{"name": "林小满", "look": "二十岁,短发,黄色雨衣……", "image": {"task_id": "…", "status": "succeeded", "url": "https://bigmodel.io/v1/media/…"}}
],
"segments": [
{
"index": 1, "title": "镜01 · 全景", "scene": "雨夜 街角便利店", "seconds": 4, "cast": ["林小满", "小狗"],
"picture": "店内暖光从右侧门玻璃透出……",
"video_prompt": "【镜头1|00:00-00:04】……",
"frame": {"task_id": "…", "status": "succeeded", "url": "https://bigmodel.io/v1/media/…"},
"video": {"task_id": "…", "status": "running"}
}
],
"storyboard": {"visualTone": "…", "scenes": [ … ]}
}| 字段 | 说明 |
|---|---|
status |
queued、running、succeeded、failed、canceled。 |
stage |
当前步骤:characters、storyboard、character_images、frames、videos、done。 |
characters[].image |
角色定妆图任务。 |
segments[].frame、segments[].video |
每个片段的首帧和视频任务。url 是 24 小时有效的签名链接,过期后重新查询即可。 |
storyboard |
完整分镜:场景、镜头(景别、运镜、画面、台词音效、出场角色)。可以拿去自己重新组合。 |
cost_usd |
已结算的费用,随步骤完成增加。 |
单个片段失败不会让整个工作流失败:首帧失败的片段不出视频,其他片段照常完成。只有全部首帧或全部视频都失败时,工作流才是 failed。
#取消
bash
curl -X POST https://bigmodel.io/v1/workflows/{id}/cancel -H "Authorization: Bearer $BIGMODEL_API_KEY"已经完成的步骤照常计费,正在进行的生成会被取消,不收费。
#用时与费用参考
| 步骤 | 用时(参考) | 计价 |
|---|---|---|
| 提取角色、拆分镜 | 1–3 分钟 | 每轮少量费用(通常不到 $0.05) |
| 定妆图、首帧 | 每张 20–60 秒,并行 | 图片模型单价 × 张数 |
| 视频片段 | 每段 1–5 分钟,并行 | 视频模型每秒单价 × 秒数 |
例如 6 个 5 秒片段、seedance-2.0-fast:视频约 30 秒,加上几张图和两轮分析,总价可以先用 dry_run 估算。
#拼成完整一集
工作流输出的是按顺序排好的片段。把它们拼起来,可以用剪辑软件,也可以用 ffmpeg:
bash
# 把 segments 的视频按顺序下载为 01.mp4、02.mp4 …
printf "file '%s'\n" *.mp4 > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy episode.mp4#常见问题排查
| 现象 | 处理 |
|---|---|
400 script is required |
script 为空。 |
400 video_model must be a video model that animates an image |
换一个支持图生视频的模型,见模型目录 → 视频。 |
402 |
余额不足以覆盖预估费用。充值或减少 max_segments。 |
failed,Script analysis failed |
剧本无法解析。补充场景头、人物和动作描写后重试。 |
| 角色前后不一致 | 用 qwen-image-2.1 作 image_model,并选择支持参考图的视频模型;在 style 里写清画风。 |
#相关文档
这篇文档有帮助吗?
更新于 · 以 Markdown 查看