Veo 3.1
通过统一的任务 API 生成 Veo 3.1 视频片段:三个模型按每段 8 秒视频计费,两个模型按秒计费,支持首尾帧、音频和 GIF 输出。
Veo 3.1 是 Google 的视频生成模型。SeedRouter 在同一个端点上提供五个模型 ID:三个按次计费,每段视频都是 8 秒;两个按秒计费,控制项更多(时长、音频、种子、反向提示词、首尾帧)。发送请求,保存返回的任务 ID,再从该任务读取生成完成的视频。图片以 URL 形式传入。
模型 ID
| 模型 ID | 计费 | 时长 | 图片 | 音频 |
|---|---|---|---|---|
veo-3.1-fast | 按次 | 8 秒 | 最多 3 张,首尾帧或参考模式 | 无开关 |
veo-3.1-quality | 按次 | 8 秒 | 最多 3 张,首尾帧模式 | 无开关 |
veo-3.1-lite | 按次 | 8 秒 | 不支持(文生视频) | 无开关 |
veo-3.1-fast-official | 按秒 | 4、6 或 8 秒 | 首帧和尾帧 | generate_audio |
veo-3.1-quality-official | 按秒 | 4、6 或 8 秒 | 首帧和尾帧 | generate_audio |
当前价格见模型页。
快速示例
curl https://api.seedrouter.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3.1-fast",
"prompt": "A red paper boat drifts across a calm pond at sunrise, soft mist on the water, slow push-in on a 35mm lens, no text, no logos.",
"resolution": "720p",
"aspect_ratio": "16:9"
}'端点
POST https://api.seedrouter.ai/v1/videos/generations| 请求头 | 值 |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
响应是一个任务({"id": "task_...", "status": "processing"}),而不是生成完成的视频。请轮询 GET /v1/tasks/{task_id} 获取结果。请把 API 密钥保存在服务端代码中。
参数:按次计费的模型
veo-3.1-fast、veo-3.1-quality 和 veo-3.1-lite。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | string | 必填 | 上述三个 ID 之一。 |
prompt | string | 必填 | 描述镜头。 |
duration | integer | 8 | 只接受 8。 |
aspect_ratio | enum | 16:9 或 9:16。 | |
resolution | enum | 720p | 720p、1080p 或 4k(不区分大小写)。veo-3.1-lite 不支持 4k。 |
enable_gif | boolean | false | 以 GIF 动图而不是 MP4 返回视频。仅限 720p。 |
nsfw_check | boolean | false | 生成前检查提示词和图片中是否有不安全内容。 |
image_urls | array | 仅限 Fast 和 Quality。最多 3 个公开图片 URL。 | |
generation_type | enum | 取决于图片数量 | 仅限 Fast 和 Quality。frame 或 reference;Quality 只接受 frame。 |
参数:按秒计费的模型
veo-3.1-fast-official 和 veo-3.1-quality-official。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | string | 必填 | 上述两个 ID 之一。 |
prompt | string | 必填 | 描述镜头。 |
negative_prompt | string | 不希望出现在视频中的内容。 | |
duration | integer | 8 | 4、6 或 8 秒。 |
aspect_ratio | enum | 16:9 | 16:9 或 9:16。 |
resolution | enum | 720p | 720p、1080p 或 4k(不区分大小写)。 |
first_frame_image | string | 公开图片 URL。视频以它开场。 | |
last_frame_image | string | 公开图片 URL。需要 first_frame_image。 | |
seed | integer | 随机 | 0 到 4294967295。 |
generate_audio | boolean | false | 添加一条音轨。按更高的每秒费率计费。 |
person_generation | enum | allow_adult | allow_adult 或 disallow。 |
resize_mode | enum | pad | pad 或 crop。需要 first_frame_image。 |
enhance_prompt | boolean | true | 只接受 true;否则请省略该字段。 |
nsfw_check | boolean | false | 生成前检查提示词和图片中是否有不安全内容。 |
请求结构是严格校验的:未知字段会被拒绝,而不是被忽略,并且每个模型只接受它自己的字段。不支持回调;请改为轮询任务。
图片模式
在 veo-3.1-fast 和 veo-3.1-quality 上,generation_type 决定 image_urls 的用法:
generation_type | 图片 | 效果 |
|---|---|---|
frame | 1 或 2 张 | 第一张图是首帧,第二张是尾帧。 |
reference | 最多 3 张 | 这些图片作为主体和风格的参考。仅限 Fast。 |
| 省略 | 2 或 3 张 | 两张图使用首尾帧模式,三张图使用参考模式。 |
veo-3.1-quality 不支持参考模式,因此会拒绝 generation_type: "reference",也会拒绝未指定 generation_type 的三张图片。veo-3.1-lite 不接受图片。
在按秒计费的模型上,设置 first_frame_image,并可选设置 last_frame_image。resize_mode 决定画幅不同的图片是填充还是裁剪。
媒体输入
图片是公开的 HTTP(S) URL:
{ "image_urls": ["https://example.com/first.jpg", "https://example.com/last.jpg"] }在按次计费的模型上,每张图片必须是 JPEG、PNG 或 WebP,且不超过 10 MB;不符合这些规则的文件会让任务失败,但不扣费。不接受 Base64 数据:请把文件上传到你自己的存储,再传入它的 URL。
计费维度
当前费率请查看模型定价部分。
per-clip models: cost = price of one clip at the output resolution (720p and 1080p cost the same)
per-second models: cost = duration × rate for the resolution and audio setting费用在请求被受理时就已确定,因此预扣金额就是实际扣费金额。最终扣费请在账户的用量记录中查看。失败的任务不计费。
输出结构
提交后返回任务:
{"id": "task_...", "model": "veo-3.1-fast", "status": "processing", "created_at": 1789689600}查询任务
GET https://api.seedrouter.ai/v1/tasks/{task_id}每 10–20 秒轮询一次,直到 status 变为 completed 或 failed。轮询过程中出现网络超时,并不意味着生成失败:请保留任务 ID 并继续查询。不要为了查看进度而再创建一个任务。
完成的任务
{
"id": "task_...",
"model": "veo-3.1-fast",
"status": "completed",
"created_at": 1789689600,
"finished_at": 1789689720,
"output": {
"video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4"
}
}video_url 是一个 MP4;如果请求设置了 enable_gif,则是 GIF。该链接位于 SeedRouter 的存储上。
我们的测试运行返回的结果(每项运行一次,2026-10-04):
| 请求 | 文件 |
|---|---|
veo-3.1-fast,9:16,首尾帧模式 | MP4,H.264,720 × 1280,24 fps,8 秒,带立体声 AAC 音轨 |
veo-3.1-fast-official,16:9,720p,4 秒,未设 generate_audio | MP4,H.264,1280 × 720,24 fps,4 秒,无音轨 |
veo-3.1-lite,enable_gif | GIF,480 × 270,16 fps,8 秒 |
按次计费的模型没有音频开关;按秒计费的模型只有设置 generate_audio 才会添加音轨。
错误
在任务创建之前被拒绝的请求,会返回 HTTP 错误状态码和一个 error 对象,且不计费。受理之后才失败的任务,在查询时返回 HTTP 200,并带有 status: "failed" 和一个 error 对象。
错误码、HTTP 状态码和重试建议请参见公共错误目录。
{
"id": "task_...",
"model": "veo-3.1-fast",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}如果提交本身超时,请先检查你的任务列表再重新提交:第一次请求有可能已经被受理。
实用建议
- 先用
veo-3.1-lite或veo-3.1-fast以 720p 试提示词,再换 Quality 或 4k 做最终渲染。 - 写明相机和光线:镜头焦段和运镜对画面的影响比形容词大得多。
- 加上
no text, no logos,避免画面中出现凭空编造的文字和标记。 - 如果镜头必须以已知图片开始和结束,请用两张图的首尾帧模式,或在按秒计费的模型上使用
first_frame_image和last_frame_image。 - 在按秒计费的模型上固定
seed,一次只改一个分句,逐步打磨一个镜头。
