视频接口
视频生成通常是异步任务:先提交生成请求,接口返回任务 ID;随后轮询任务状态;任务完成后再获取视频内容或下载地址。
接口信息
| 接口 | 方法 | 完整请求地址 | 用途 |
|---|---|---|---|
| 创建视频任务 | POST | https://api.gemai.cc/v1/videos | 提交异步视频生成任务 |
| 查询视频任务 | GET | https://api.gemai.cc/v1/videos/{id} | 查询任务状态 |
| 获取视频内容 | GET | https://api.gemai.cc/v1/videos/{id}/content | 获取生成后的视频内容 |
| Seedance 豆包原生提交 | POST | https://api.gemai.cc/api/v3/contents/generations/tasks | 提交豆包原生格式视频任务 |
| Seedance 豆包原生查询 | GET | https://api.gemai.cc/api/v3/contents/generations/tasks/{task_id} | 查询豆包原生格式任务状态 |
| OpenAI 兼容视频生成 | POST | https://api.gemai.cc/v1/video/generations | 提交 OpenAI 兼容格式视频任务 |
| OpenAI 兼容任务查询 | GET | https://api.gemai.cc/v1/video/generations/{task_id} | 查询 OpenAI 兼容格式任务状态 |
异步视频生成
提交任务
INFO
视频生成模型通常需要更长处理时间。提交任务后,请保存返回的任务 ID,后续查询和下载都要用到它。
bash
curl --location 'https://api.gemai.cc/v1/videos' \
--header 'Authorization: Bearer sk-你的令牌' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2",
"prompt": "一只橘猫在雨后的霓虹街道上奔跑,电影感,慢镜头",
"size": "1280x720",
"seconds": 5
}'查询任务状态
INFO
把 {id} 替换为提交任务后返回的任务 ID。建议每隔几秒查询一次,不要高频轮询。
bash
curl --location 'https://api.gemai.cc/v1/videos/video-task-id' \
--header 'Authorization: Bearer sk-你的令牌'获取视频内容
INFO
任务完成后,可以通过内容接口获取视频文件或视频下载地址。具体返回格式可能因模型而异。
bash
curl --location 'https://api.gemai.cc/v1/videos/video-task-id/content' \
--header 'Authorization: Bearer sk-你的令牌' \
--output output.mp4Seedance 2.0
Seedance 2.0 相关文档已经按使用方式拆分为多个页面:
OpenAI 兼容提交示例
INFO
如果你的程序按 OpenAI 风格封装视频生成,可以使用 /v1/video/generations。
bash
curl --location 'https://api.gemai.cc/v1/video/generations' \
--header 'Authorization: Bearer sk-你的令牌' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-2-0-260128",
"prompt": "海边日落,镜头缓慢推进,真实摄影风格",
"seconds": "5",
"metadata": {
"ratio": "16:9",
"resolution": "720p"
}
}'查询兼容格式任务
bash
curl --location 'https://api.gemai.cc/v1/video/generations/task-id' \
--header 'Authorization: Bearer sk-你的令牌'JavaScript 轮询示例
等待任务完成
INFO
下面示例演示基本轮询逻辑。生产环境建议增加最大重试次数、错误处理和任务超时。
javascript
const apiKey = process.env.GEMAI_API_KEY
async function createVideo() {
const response = await fetch('https://api.gemai.cc/v1/videos', {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'sora-2',
prompt: '海边日落,镜头缓慢推进,真实摄影风格',
size: '1280x720',
seconds: 5,
}),
})
if (!response.ok) {
throw new Error(`创建视频任务失败:${response.status}`)
}
return response.json()
}
async function getVideoStatus(id) {
const response = await fetch(`https://api.gemai.cc/v1/videos/${id}`, {
headers: {
Authorization: `Bearer ${apiKey}`,
},
})
if (!response.ok) {
throw new Error(`查询视频任务失败:${response.status}`)
}
return response.json()
}
const task = await createVideo()
const taskId = task.id || task.task_id
for (let index = 0; index < 60; index += 1) {
const status = await getVideoStatus(taskId)
if (status.status === 'succeeded' || status.status === 'completed') {
console.log('视频任务已完成:', status)
break
}
if (status.status === 'failed') {
throw new Error('视频任务失败')
}
await new Promise((resolve) => setTimeout(resolve, 5000))
}注意事项
- 视频接口大多是异步任务,不要期待提交请求后立即拿到视频文件。
- 轮询间隔建议控制在 3-10 秒,避免频繁请求。
- 不同视频模型的参数名可能略有差异,例如
seconds、duration、size、aspect_ratio。 - 视频生成失败时,优先检查模型是否可用、提示词是否违规、余额是否充足。