Skip to content

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立即返回任务 idqueued 状态
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"
  }'

请求参数

参数类型必填说明
modelstring使用上表中的 Veo 模型名
promptstring视频内容、运镜和风格描述
secondsstring视频时长,建议先用最低的 "4" 测试
sizestring例如 1280x720
input_referencestring图生视频必填公网图片 URL 或 data: base64
generate_audioboolean是否生成音频,默认 true

创建任务响应

创建成功后会立即返回任务信息。Veo 创建响应不保证回显 secondssize,客户端只应依赖 idmodelstatus 等实际存在的字段。

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 可能是短期有效的预签名地址,完成后应及时下载或转存。

下一步

一个 Base URL 接入 GPT、Claude、Gemini