视频生成
视频生成为异步任务模式:提交任务后获得任务 ID,通过轮询查询状态,完成后下载视频内容。
完整流程
提交任务 → 获得 task_id → 轮询状态 → 状态变为 completed → 下载视频第一步:提交任务
POST /v1/videos
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | ✅ | 视频生成模型,如 sora-2、kling-v2、wan-2.1 |
prompt | string | ✅ | 视频内容描述提示词 |
seconds | string | — | 视频时长(秒),如 "5"、"8"、"10" |
size | string | — | 视频分辨率,如 "1920x1080"、"1280x720" |
image_url | string | — | 参考图片 URL(图生视频时使用) |
示例
bash
curl https://api.idreame.com/v1/videos \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxx" \
-d '{
"model": "kling-v2",
"prompt": "一只柯基犬在夕阳下的海滩上冲浪,慢动作,电影质感",
"seconds": "8"
}'响应示例
json
{
"id": "video_abc123",
"object": "video",
"status": "pending",
"created": 1752600000,
"model": "kling-v2",
"prompt": "一只柯基犬在夕阳下的海滩上冲浪,慢动作,电影质感"
}第二步:轮询状态
GET /v1/videos/{video_id}
bash
curl https://api.idreame.com/v1/videos/video_abc123 \
-H "Authorization: Bearer sk-xxxxxxxx"任务状态说明
| status | 含义 |
|---|---|
pending | 排队等待中 |
processing | 生成中 |
completed | 已完成,可下载 |
failed | 生成失败,查看 error 字段 |
完成时的响应
json
{
"id": "video_abc123",
"object": "video",
"status": "completed",
"created": 1752600000,
"completed_at": 1752600120,
"model": "kling-v2",
"prompt": "一只柯基犬在夕阳下的海滩上冲浪,慢动作,电影质感",
"video_url": "https://cdn.idreame.com/videos/video_abc123.mp4",
"duration": 8,
"usage": { "total_credits": 10 }
}第三步:下载视频
bash
curl https://api.idreame.com/v1/videos/video_abc123/content \
-H "Authorization: Bearer sk-xxxxxxxx" \
--output my_video.mp4Python 完整示例
python
import time
import httpx
from openai import OpenAI
API_KEY = "sk-xxxxxxxx"
BASE_URL = "https://api.idreame.com/v1"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
# 1. 提交任务
resp = httpx.post(
f"{BASE_URL}/videos",
headers=headers,
json={
"model": "kling-v2",
"prompt": "一只柯基犬在夕阳下的海滩上冲浪,慢动作,电影质感",
"seconds": "8",
},
)
video_id = resp.json()["id"]
print(f"任务已提交,ID: {video_id}")
# 2. 轮询状态
while True:
status_resp = httpx.get(
f"{BASE_URL}/videos/{video_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = status_resp.json()
status = data["status"]
print(f"状态: {status}")
if status == "completed":
print(f"视频 URL: {data['video_url']}")
break
elif status == "failed":
print(f"生成失败: {data.get('error')}")
break
time.sleep(5) # 每 5 秒轮询一次可用视频模型
| 模型 | 最大时长 | 分辨率 | 特点 |
|---|---|---|---|
kling-v2 | 10s | 1280×720 / 1920×1080 | 运动流畅,写实风格 |
wan-2.1 | 8s | 720×480 – 1280×720 | 中文提示词优化 |
sora-2 | 20s | 480p – 1080p | OpenAI 官方,高质量 |
TIP
视频生成耗时通常为 30 秒到 3 分钟不等,具体取决于模型和视频时长。建议轮询间隔设为 5–10 秒。