文档导航
API 与协议

视频生成

统一调用 Veo、Kling 和 MiniMax,查询生成进度并下载长期保存的视频。

本页目录
  1. 第一步:准备 Key 和模型
  2. 第二步:提交生成任务
  3. 第三步:查询进度
  4. 第四步:下载视频
  5. Python:提交、轮询和保存
  6. 计费怎么核对
  7. 常见问题

视频生成使用同一套异步接口:提交任务 -> 查询进度 -> 等待转存 -> 下载 MP4。 更换模型只需调整 model 和该模型支持的规格,不需要接入不同厂商的网址。

视频不是文本流式输出,也不会在提交请求中直接返回完整视频。生成通常需要几分钟;拿到任务 ID 后保存下来,不要因为暂时没看到结果就重复提交。

Client Client ZCloudAPI ZCloudAPI VideoProvider VideoProvider OSS OSS POST /v1/videos 提交模型、提示词和规格 创建生成任务 返回任务 ID GET /v1/videos/{id} 查询进度 视频生成完成 转存视频,长期保存 返回 ready 和临时签名下载 URL 下载 MP4,不发送 API Key

第一步:准备 Key 和模型

在控制台创建「视频模型」分组的 Key,或使用能够访问视频分组的 AUTO Key。模型白名单和自定义 AUTO 顺序仍然有效;用了 AUTO 不代表会绕过你设置的限制。创建方法见「获取 API Key」。

macOS / Linux:

export ZCLOUD_API_KEY="sk-你的-ZCloudAPI-Key"
export ZCLOUD_BASE_URL="https://api.zcloudapi.com/v1"

curl --fail-with-body "$ZCLOUD_BASE_URL/models" \
  -H "Authorization: Bearer $ZCLOUD_API_KEY"

Windows PowerShell 设置环境变量:

$env:ZCLOUD_API_KEY="sk-你的-ZCloudAPI-Key"
$env:ZCLOUD_BASE_URL="https://api.zcloudapi.com/v1"

下面的 shell 示例适用于 macOS / Linux;Windows 可以使用后文的 Python 示例。Key 只放在环境变量或服务端 Secret 中,不要写进网页前端、源码或公开日志。

截至 2026-10-17,公开视频模型包括以下四款。最终可用性以当前 Key 的 /v1/models 和模型广场为准。

模型名 当前开放分辨率 时长规则 音频规则
veo-3.1-lite 720p、1080p 4 / 6 / 8 秒;1080p 必须 8 秒 有声,不支持关闭
veo-3.1 720p 4 / 6 / 8 秒 有声,不支持关闭
kling-3.0 720p、1080p、4k 配置允许 3–15 整秒,首次建议 5 秒 可选,默认无声
minimax-h3 768p 4–15 整秒 当前接入只开放有声

开放配置不等于所有组合都逐项实测。 首次建议用 Veo Lite 的 720p / 4 秒横版、Kling 的 720p / 5 秒无声横版,或 Veo 3.1 的 720p / 4 秒有声竖版、MiniMax H3 的 768p / 4 秒有声竖版。其他组合需先做小规模验证;供应商可能调整或归一化部分参数,以实际文件为准。当前不开放 MiniMax H3 2K 和 Veo 3.1 标准版的高清档。

第二步:提交生成任务

下面的请求会真实生成并扣费。首次测试只提交一次:

curl --fail-with-body "$ZCLOUD_BASE_URL/videos" \
  -H "Authorization: Bearer $ZCLOUD_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "veo-3.1-lite",
    "prompt": "蓝色陶瓷杯放在木桌上,镜头缓慢横移,自然光,无文字",
    "seconds": 4,
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }'

成功响应的关键字段如下。task_example 只是示意,请保存你实际收到的 id:

{
  "id": "task_example",
  "object": "video",
  "model": "veo-3.1-lite",
  "status": "queued"
}

MiniMax H3 使用同一入口,请求体可以改成:

{
  "model": "minimax-h3",
  "prompt": "蓝色陶瓷杯放在木桌上,竖版镜头缓慢横移,无文字",
  "seconds": 4,
  "resolution": "768p",
  "aspect_ratio": "9:16",
  "generate_audio": true
}
参数 用途与注意事项
model 必填,使用当前 Key 可见的完整模型名
prompt 必填,描述画面、动作和镜头
seconds 正整秒,支持数字或整数字符串;不是生成等待时间
resolution 分辨率档位,按上方模型表选择
aspect_ratio Veo 支持 16:9、9:16;Kling / H3 还支持 1:1
generate_audio 布尔值;Kling 可传 false,其他三款用 true
size 可选像素尺寸别名,如 1280x720;不要与分辨率、比例冲突;H3 推荐省略
duration seconds 的兼容别名,同时传入时必须一致
audio / sound generate_audio 的兼容别名,同时传入时必须一致

建议明确传时长。不传时 Veo 默认 8 秒,Kling 和 H3 默认 5 秒。H3 使用原生尺寸网格,例如 768p 竖版实测为 768×1344,不是精确 9:16 的像素比。视频容器可能有少量尾帧时长,不要据此自行计算额外账单。

不要传 stream、response_format,也不要把图片编辑参数直接搬过来。 本教程只覆盖文生视频,每次一个视频。两款新模型 veo-3.1 和 minimax-h3 的参考图片、输入视频及文件上传尚未开放;不能仅凭接口名称相似就认为支持图生视频、视频编辑、remix 或指定音色。

第三步:查询进度

export TASK_ID="替换为刚才返回的实际任务ID"

curl --fail-with-body "$ZCLOUD_BASE_URL/videos/$TASK_ID" \
  -H "Authorization: Bearer $ZCLOUD_API_KEY"

建议每 10–15 秒查询一次。客户端可以设置总等待预算;超出预算后保留任务 ID,稍后继续查询,而不是重新生成。

字段 值 含义
status queued / in_progress 正在排队或生成
status completed 生成完成,还需要看转存状态
status failed 生成失败,保留任务 ID 和错误信息
metadata.storage.status waiting_generation 等待生成完成
metadata.storage.status pending / uploading 正在准备或上传 OSS
metadata.storage.status ready 已转存,可以下载
metadata.storage.status failed 转存失败,不等同于生成失败,不要重新生成

可下载时的关键字段示意:

{
  "id": "task_example",
  "status": "completed",
  "metadata": {
    "storage": {
      "status": "ready",
      "retention": "permanent",
      "url": "https://oss-host.example/video.mp4?signature=example",
      "url_expires_at": 1792219600
    }
  }
}

第四步:下载视频

确认 status=completed 且 metadata.storage.status=ready 后,可以调用本站下载入口:

curl --fail --location "$ZCLOUD_BASE_URL/videos/$TASK_ID/content" \
  -H "Authorization: Bearer $ZCLOUD_API_KEY" \
  -o video.mp4

接口鉴权后返回 302,视频文件由 OSS 发送。普通 curl --location 不向不同主机转发 Authorization;不要加 --location-trusted。

也可以使用查询结果里的 metadata.storage.url 直接下载,保留全部签名参数,且不发送 API Key。签名 URL 是临时访问凭证,不要公开传播。

视频长期保存;下载链接临时有效。 当前签名链接默认约 1 小时有效,url_expires_at 是链接截止时间,不是视频删除时间。过期后重新查询任务获取新链接即可,不需要重新生成,也不会再次收取生成费用。

Python:提交、轮询和保存

先在你的项目环境安装 requests:python -m pip install requests,并设置前面的环境变量。以下示例只自动提交一次;轮询超时会保留任务 ID,禁止盲目重跑整个脚本。

import os
import time
import requests

base = os.getenv("ZCLOUD_BASE_URL", "https://api.zcloudapi.com/v1").rstrip("/")
headers = {"Authorization": "Bearer " + os.environ["ZCLOUD_API_KEY"]}

# 已有任务时设置 ZCLOUD_VIDEO_TASK_ID,只查询下载,不再创建。
task_id = os.getenv("ZCLOUD_VIDEO_TASK_ID")
if not task_id:
    response = requests.post(base + "/videos", headers=headers, json={
        "model": "veo-3.1-lite",
        "prompt": "蓝色陶瓷杯,镜头缓慢横移,自然光,无文字",
        "seconds": 4,
        "resolution": "720p",
        "aspect_ratio": "16:9",
        "generate_audio": True,
    }, timeout=120)
    response.raise_for_status()
    task_id = response.json()["id"]
print("请保存任务 ID:", task_id, flush=True)

deadline = time.monotonic() + 20 * 60
while time.monotonic() < deadline:
    response = requests.get(base + "/videos/" + task_id, headers=headers, timeout=60)
    response.raise_for_status()
    task = response.json()
    storage = task.get("metadata", {}).get("storage", {})
    print(task.get("status"), storage.get("status"), flush=True)
    if task.get("status") == "failed":
        raise RuntimeError(f"任务失败:{task_id},{task.get('error')}")
    if storage.get("status") == "failed":
        raise RuntimeError(f"转存异常,请保留任务 ID 联系支持:{task_id}")
    if task.get("status") == "completed" and storage.get("status") == "ready":
        # OSS 使用签名 URL,不携带本站 Authorization。
        with requests.get(storage["url"], stream=True, timeout=120) as video:
            video.raise_for_status()
            with open("video.mp4", "wb") as target:
                for chunk in video.iter_content(1024 * 1024):
                    target.write(chunk)
        print("已保存 video.mp4")
        break
    time.sleep(15)
else:
    raise TimeoutError(f"仍未完成;设置 ZCLOUD_VIDEO_TASK_ID={task_id} 后继续查询")

提交请求本身超时、没有拿到 ID 时,可能已经在上游创建任务。先检查控制台日志或联系支持,不要自动重试 POST。查询或下载失败后可使用同一任务 ID 恢复,不必再次付生成费用。

计费怎么核对

生成费用 = 对应规格的平台基础秒价 × 有效分组倍率 × 计费秒数。 按输出视频规格和计费时长收费,不按排队或生成等待的几分钟收费,也不是按文件 MB 或文本 Token 收费。

以 2026-10-17 视频分组 1.8 倍率的基础档为例:

模型 规格 分组价 / 视频秒 示例计费时长 预计平台扣费
veo-3.1-lite 720p,有声 0.6570 4 秒 2.6280
veo-3.1 720p,有声 5.2560 4 秒 21.0240
kling-3.0 720p,无声 1.0800 5 秒 5.4000
minimax-h3 768p,有声 0.9000 4 秒 3.6000

页面 $ 表示平台额度,不是真实美元。上表分组价已经含倍率,不要再乘一次 1.8。实际日志可能存在整数额度换算的极小误差;价格、规格和分组可能调整,下单前以模型广场为准。官方参考价只用于比较,不直接决定实际扣费。

常见问题

现象 怎么处理
400,参数或规格不支持 检查模型、时长、分辨率、音频;H3 不要传 2K,不要传 stream
401 / 403 检查 Key 是否有效、额度、模型白名单及分组权限
503,无可用渠道 确认 Key 可见模型、自定义 AUTO 含视频组,以及当前渠道可用性
生成完成,但拿不到下载链接 继续查询 metadata.storage.status;完成生成不等于完成转存
/content 返回 202 尚未转存完成,按 Retry-After 等待;不要把 JSON 响应当成 MP4
/content 返回 503 转存或存储异常,稍后查询或联系支持,不要因此重新生成
OSS 返回 403 签名可能过期,重新查询任务获取新链接;不要删除 URL 的签名参数
查询任务返回 404 检查任务 ID 和账号;只能访问所属账号的任务
轮询等待很久 记录任务 ID,隔一段时间继续查询;不要把 HTTP 超时当作任务已取消

联系支持时提供模型名、任务 ID、请求时间、响应中的 request ID 和错误信息即可,不要发送完整 API Key 或签名下载 URL。