Skip to content
API 文档

视频生成总览

这一页是视频能力的共享参考——异步模型、四种生成模式、轮询状态机、错误码、长期存储都在这儿。

具体怎么调,看对应端点的独立页:

操作OpenAI 兼容层原生透传层
生成视频生成视频生成视频
编辑视频编辑视频编辑视频
扩展视频扩展视频扩展视频
查询 / 下载查询视频任务查询视频任务

视频是异步的 ​

视频不是一次请求就拿到结果。完整链路固定是三步:

① POST 提交任务  →  拿到任务 ID
② GET  轮询状态  →  直到 status 变成终态
③ 取视频地址     →  下载 mp4

两层的任务 ID 和状态值完全不同:

原生透传OpenAI 兼容
提交POST /xai/v1/videos/generationsPOST /v1/videos/generations
轮询GET /xai/v1/videos/{request_id}GET /v1/videos/{task_id}
任务 ID 字段request_idtask_id
状态值pending / done / expired / failedqueued / processing / succeeded / failed
视频地址video.urlurl

两层 ID 不通用:拿 request_id 去 /v1/videos/{id} 查会找不到任务,反之也一样。选一层就一路用到底。

四种生成模式 ​

POST …/videos/generations 按你传了哪些字段自动进入不同模式:

模式要传的字段说明
文生视频只有 prompt纯文字生成
图生视频prompt + image把这张图当首帧动起来
参考图 / 参考音prompt + reference_images / reference_audios用参考素材控制风格、主体、声音
首尾帧image + last_frame(可只给 last_frame)钉死首帧和/或尾帧

prompt 只有文生视频必填。只要带了 image、reference_images、reference_audios 或 last_frame,prompt 就可以省略。

图生视频 ​

不传 aspect_ratio 时,输出跟随输入图的比例;显式传了就会按你给的比例拉伸画面。

参考图 / 参考音 ​

字段限制
reference_images参考图数组,写法同 image
reference_audios最多 3 条。每条用 voice_id 选内置音色,或用 url 传真人有声素材(最长 15 秒,需申请开通)
指代方式图用 <IMAGE_0>、<IMAGE_1>…,音用 <AUDIO_0>、<AUDIO_1>、<AUDIO_2>

voice_id 和 文生音 TTS 用的是同一套内置音色 ID,大小写不敏感;写错了会返回 400 并附上可用音色列表。

参考音的三个前提

  1. 只有 grok-imagine-video-1.5 支持;
  2. 参考图模式下分辨率最高 720p;
  3. 内置音色可直接用,用自己的音频文件做音色参考需要单独开通。

首尾帧(last_frame) ​

传法效果
image + last_frame首帧和尾帧都钉死,模型在两者之间插值
只传 last_frame钉死尾帧,模型自己生成开头并落到这张图
last_frame + 参考素材钉死尾帧,同时受参考图/参考音引导

last_frame 的写法(URL / base64 data URI / file_id)和 image 完全一样。prompt 可以省略。

last_frame 只在 grok-imagine-video-1.5 上可用

经典模型 grok-imagine-video 会直接拒绝 last_frame,也会拒绝把 image 和参考素材混用。

反过来的限制:grok-imagine-video-1.5 上,image 一旦和 reference_images / reference_audios / last_frame 同时出现,含义就变成「钉死首帧 + 参考引导」,而不是把这张图当风格参考。

时长 / 分辨率 / 比例 ​

参数生成编辑扩展
duration1–15 秒,默认 8忽略(继承源片,上限 8.7 秒)2–10 秒,默认 6,指新增部分
resolution480p(默认)/ 720p / 1080p忽略(继承源片,上限 720p)跟随源片
aspect_ratio7 个值,默认 16:9忽略(继承源片)跟随源片

aspect_ratio 全部取值:1:1、16:9、9:16、4:3、3:4、3:2、2:3。

1080p 不是所有场景都能用

  • grok-imagine-video-1.5 的文生视频 / 图生视频支持 1080p;
  • 参考图 / 参考音模式上限 720p;
  • 编辑模式跟随源片且上限 720p(1080p 源会被降到 720p)。

扩展的 duration 是增量

源视频 10 秒 + duration: 6 → 输出 16 秒(10 秒原片 + 6 秒新增)。

很多人以为 duration 是总时长——不是。

轮询节奏 ​

网关查上游的默认值,你的客户端不必照抄:

项值
网关查询间隔10 秒
最多查询次数60 次
失败退避从 5 秒逐步退到最长 60 秒
任务硬超时600 秒(自任务创建起算),超时标记失败并退还本次额度

失败或超时都会自动退款,不需要手动申请。

失败错误码 ​

异步任务的 error.code 和同步 HTTP 错误码不是同一套:

error.code含义怎么办
invalid_argument参数不合法:时长超范围、图片/视频输入有问题、提示词过长、请求模式冲突、被内容审核拦下改参数或素材后重新提交
permission_deniedKey 或团队没有该操作的权限确认 Key 所属分组和模型权限
failed_precondition该模型/设置不支持这个操作(模型不支持编辑/扩展,或分辨率超了)换模型、模式或分辨率
service_unavailable上游暂时过载稍后重试
internal_error上游内部错误重试;持续出现就带上任务 ID 找客服

注意:鉴权失败、模型不存在、限流这些错误是在创建任务之前同步返回的标准 API 错误,不会出现在任务结果的 error.code 里。

保存生成的视频 ​

视频 url 是临时的,拿到后尽快下载转存。三种正规做法:

做法怎么做
直接下载(推荐)拿 video.url(兼容层是 url)立刻下载——这是 xAI 官方的做法
让上游长期保存提交时带 storage_options
走网关下载代理兼容层可以用 GET /v1/videos/{task_id}/content;这是本网关额外提供的,xAI 官方没有这个端点

storage_options 的字段:

字段必填说明
filename是存储用的文件名
expires_after否多少秒后自动过期,最大 2592000(30 天)。不传则不过期
public_url否是否额外生成公网直链

完成后 video.file_output 里会多出 file_id、filename、expires_at(有 TTL 时)、public_url(申请了才有)。存失败不影响出片:video.storage_error 给出原因,video.url 照常可用。

自带存储:提交时传 output.upload_url(你自己提供的、签好名的 HTTP PUT 地址),xAI 生成完会直接把视频 PUT 到你这里,不落在它的临时桶里:

json
"output": { "upload_url": "https://your-bucket.example.com/put/..." }

适合已经有对象存储、不想再多一跳下载的场景。

容易踩的坑 ​

  • 别把轮询写成死循环:服务端 600 秒后判定超时并退还额度,客户端也要有自己的超时上限。
  • 两层 ID 不能互换:request_id 只对 /xai/... 有效,task_id 只对 /v1/... 有效。
  • prompt 在大部分模式里可以省略,但文生视频必须给。
  • last_frame 挑模型:经典 grok-imagine-video 会拒绝。
  • 编辑/扩展忽略 duration / aspect_ratio / resolution:传了不报错,但也不生效。
  • 参考音上限 3 条、单条最长 15 秒。
  • 源视频必须是 .mp4:链接要带后缀,编码用 H.265 / H.264 / AV1 等。

相关页 ​

基于 Apache-2.0 许可发布