Veo 视频生成
Veo 3.1 系列支持文生视频和图生视频。视频任务需要较长时间完成,建议统一使用异步流程:创建任务后保存 id,再轮询任务状态。
调用前准备
选择专用分组
创建令牌时必须选择 【图片视频专用分组】。视频按生成秒数计费,请根据模型单价和 seconds 估算费用。
| 模型 | 能力 | 参考价格 |
|---|---|---|
veo-3.1 | 文生视频 | ¥0.20/秒 |
veo-3.1-fast | 快速文生视频 | ¥0.10/秒 |
veo-3.1-i2v | 图生视频 | ¥0.20/秒 |
例如,veo-3.1-fast 生成 4 秒视频的参考费用为 ¥0.40。模型和价格可能调整,请以控制台及实时定价为准。
异步调用流程
| 步骤 | 方法与路径 | 说明 |
|---|---|---|
| 1. 创建任务 | POST /v1/videos | 立即返回任务 id 和 queued 状态 |
| 2. 查询任务 | GET /v1/videos/{id} | 建议每 10–15 秒轮询一次 |
| 3. 获取视频 | 响应中的 video_url | 状态为 completed 后直接下载 |
POST /v1/video/generations 也可创建任务,返回结构与 /v1/videos 一致。新项目建议统一使用 /v1/videos。
为什么推荐异步
视频生成通常需要数分钟。创建请求中的 wait: true 不保证同步等待,仍可能立即返回 queued,因此客户端应始终保存任务 ID 并轮询。
文生视频
bash
curl https://ai.flashapi.top/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3.1-fast",
"prompt": "a tiny red ball rolling across a wooden table, cinematic light",
"size": "1280x720",
"seconds": "4",
"generate_audio": false
}'图生视频
使用 veo-3.1-i2v,并通过 input_reference 传入公网可直连的图片 URL 或 data: base64。
bash
curl https://ai.flashapi.top/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3.1-i2v",
"prompt": "slow zoom in, gentle movement, keep the original composition",
"size": "1280x720",
"seconds": "4",
"input_reference": "https://example.com/reference.png"
}'请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 使用上表中的 Veo 模型名 |
prompt | string | 是 | 视频内容、运镜和风格描述 |
seconds | string | 否 | 视频时长,建议先用最低的 "4" 测试 |
size | string | 否 | 例如 1280x720 |
input_reference | string | 图生视频必填 | 公网图片 URL 或 data: base64 |
generate_audio | boolean | 否 | 是否生成音频,默认 true |
创建任务响应
创建成功后会立即返回任务信息。Veo 创建响应不保证回显 seconds 和 size,客户端只应依赖 id、model 与 status 等实际存在的字段。
json
{
"id": "task_fq3rMylJDGbVr0JmXJioKZoekVVc7ZHj",
"task_id": "task_fq3rMylJDGbVr0JmXJioKZoekVVc7ZHj",
"object": "",
"model": "veo-3.1-fast",
"status": "queued",
"progress": 0,
"created_at": 1786456082
}查询任务
bash
curl https://ai.flashapi.top/v1/videos/task_fq3rMylJDGbVr0JmXJioKZoekVVc7ZHj \
-H "Authorization: Bearer YOUR_API_KEY"Veo 任务处理中可能只返回状态,不一定包含 progress:
json
{
"id": "task_...",
"model": "veo-3.1-fast",
"status": "processing"
}完成后会返回 video_url:
json
{
"id": "task_fq3rMylJDGbVr0JmXJioKZoekVVc7ZHj",
"model": "veo-3.1-fast",
"status": "completed",
"video_url": "https://example-cdn.com/generated-video.mp4",
"created_at": 1786456082
}| 状态 | 含义 |
|---|---|
queued | 已进入队列 |
processing / in_progress | 正在生成 |
completed | 已完成,可读取 video_url |
failed | 生成失败,查看 error.message |
Python 完整示例
python
import os
import time
import requests
api_key = os.environ["FLASH_API_KEY"]
base_url = "https://ai.flashapi.top"
headers = {"Authorization": f"Bearer {api_key}"}
created = requests.post(
f"{base_url}/v1/videos",
headers=headers,
json={
"model": "veo-3.1-fast",
"prompt": "a tiny red ball rolling across a wooden table",
"size": "1280x720",
"seconds": "4",
"generate_audio": False,
},
timeout=60,
)
created.raise_for_status()
task_id = created.json()["id"]
deadline = time.monotonic() + 15 * 60
while time.monotonic() < deadline:
try:
response = requests.get(
f"{base_url}/v1/videos/{task_id}", headers=headers, timeout=30
)
response.raise_for_status()
task = response.json()
except requests.RequestException:
time.sleep(12)
continue
if task["status"] == "completed":
video = requests.get(task["video_url"], timeout=120)
video.raise_for_status()
with open(f"{task_id}.mp4", "wb") as file:
file.write(video.content)
break
if task["status"] == "failed":
raise RuntimeError(task.get("error", "视频生成失败"))
time.sleep(12)
else:
raise TimeoutError(f"任务 {task_id} 在 15 分钟内未完成,可稍后继续查询")注意事项
- 建议客户端整体超时不少于 15 分钟。
- 参考图必须能被服务端从公网直接访问;受防盗链保护的地址可能下载失败。
- 完成后直接使用轮询响应中的
video_url。当前不建议依赖/v1/videos/{id}/content。 video_url可能是短期有效的预签名地址,完成后应及时下载或转存。