Appearance
本文档介绍如何使用 OpenAI 兼容方式对接视频生成服务,包括创建视频异步任务和查询任务结果。
公共基础信息
- Base URL:
https://ai.7code.cc - 通用请求头 (Headers):
Authorization:Bearer YOUR_API_KEY(API密钥)Content-Type:application/json
一、创建视频任务
该接口用于创建一个视频生成异步任务,返回任务ID用于后续查询。
- 接口地址:
https://ai.7code.cc/v1/videos - 请求方式:
POST
请求字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 选择对应的模型名称 |
| prompt | string | 是 | 视频提示词 |
| duration | integer | 否 | 视频时长(4-15秒),默认 5 |
| ratio | string | 否 | 视频比例:16:9、9:16、1:1,默认 16:9 |
| resolution | string | 否 | 分辨率:720p、480p,默认 720p |
| referenceImages | string[] | 否 | 参考图片URL,最多 9 个(仅支持公开 http/https) |
| referenceVideos | string[] | 否 | 参考视频URL,最多 3 个(总时长不超过 15 秒) |
| referenceAudios | string[] | 否 | 参考音频URL,最多 3 个(总时长不超过 15 秒,建议 MP3/WAV) |
JavaScript 调用代码
javascript
const BASE_URL = 'https://ai.7code.cc';
const API_KEY = 'YOUR_API_KEY'; // 替换为实际API密钥
/**
* 创建视频生成任务
*/
async function createVideoTask(taskData) {
try {
const response = await fetch(`${BASE_URL}/v1/videos`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
body: JSON.stringify(taskData)
});
const data = await response.json();
return data;
} catch (error) {
console.error('创建视频任务失败:', error);
throw error;
}
}
// 使用示例
const taskData = {
model: 'videos-mini',
prompt: 'A cinematic shot of a person walking through a neon city street at night, realistic lighting, handheld camera',
duration: 5,
ratio: '16:9',
resolution: '720p'
};
createVideoTask(taskData)
.then(result => {
console.log('任务创建成功:', result);
console.log('任务ID:', result.task_id);
})
.catch(error => console.error('错误:', error));请求示例(包含图片和音频参考)
javascript
const taskDataWithReferences = {
model: 'videos-mini',
prompt: 'Cinematic action scene, realistic motion, dramatic lighting',
duration: 5,
ratio: '16:9',
resolution: '720p',
referenceImages: [
'https://example.com/person.jpg'
],
referenceAudios: [
'https://example.com/voice.mp3'
]
};
createVideoTask(taskDataWithReferences);响应示例
json
{
"id": "videos-mini_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"task_id": "videos-mini_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"object": "video",
"model": "videos-mini",
"status": "queued",
"progress": 0,
"created_at": 1782690295,
"completed_at": null,
"seconds": "5",
"url": null,
"video_url": null,
"metadata": {},
"error": null
}二、查询视频任务状态
该接口用于查询指定任务的当前状态和结果。
- 接口地址:
https://ai.7code.cc/v1/videos/{task_id} - 请求方式:
GET
任务状态说明
| 状态 | 说明 |
|---|---|
| queued | 已入队,等待处理 |
| in_progress | 正在处理或上游生成中 |
| completed | 已完成 |
| failed | 失败 |
JavaScript 调用代码
javascript
/**
* 查询视频任务状态
*/
async function queryVideoTask(taskId) {
try {
const response = await fetch(`${BASE_URL}/v1/videos/${taskId}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
}
});
const data = await response.json();
return data;
} catch (error) {
console.error('查询视频任务失败:', error);
throw error;
}
}
// 使用示例
const taskId = 'videos-mini_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
queryVideoTask(taskId)
.then(result => {
console.log('任务状态:', result.status);
console.log('进度:', result.progress);
if (result.status === 'completed') {
console.log('视频URL:', result.video_url);
console.log('内容URL:', result.metadata.content_url);
} else if (result.status === 'failed') {
console.log('错误信息:', result.error);
}
})
.catch(error => console.error('错误:', error));生成中响应示例
json
{
"id": "videos-mini_xxx",
"task_id": "videos-mini_xxx",
"object": "video",
"model": "videos-mini",
"status": "in_progress",
"progress": 50,
"created_at": 1782690295,
"completed_at": null,
"seconds": "5",
"url": null,
"video_url": null,
"metadata": {
"cached": false,
"cost_credits": 70
},
"error": null
}完成响应示例
json
{
"id": "videos-mini_xxx",
"task_id": "videos-mini_xxx",
"object": "video",
"model": "videos-mini",
"status": "completed",
"progress": 100,
"created_at": 1782690295,
"completed_at": 1782690494,
"seconds": "5",
"url": "https://media.7code.cc/v1/videos/videos-mini_xxx/content",
"video_url": "https://media.7code.cc/v1/videos/videos-mini_xxx/content",
"metadata": {
"cached": true,
"content_url": "https://media.7code.cc/v1/videos/videos-mini_xxx/content",
"local_url": "https://media.7code.cc/v1/videos/videos-mini_xxx/content",
"expires_in": 86400,
"cost_credits": 70
},
"error": null
}失败响应示例
json
{
"id": "videos-mini_xxx",
"task_id": "videos-mini_xxx",
"object": "video",
"model": "videos-mini",
"status": "failed",
"progress": 100,
"created_at": 1782690000,
"completed_at": 1782690010,
"seconds": "5",
"url": null,
"video_url": null,
"metadata": {},
"error": {
"message": "素材格式不被支持,请更换素材或转码后重试。",
"code": "unsupported_material"
}
}三、完整调用流程示例
javascript
const BASE_URL = 'https://ai.7code.cc';
const API_KEY = 'YOUR_API_KEY'; // 替换为实际API密钥
/**
* 完整的视频生成流程
*/
async function generateVideo(taskData) {
console.log('开始创建视频任务...');
// 1. 创建任务
const createResult = await createVideoTask(taskData);
const taskId = createResult.task_id;
console.log('任务创建成功,ID:', taskId);
// 2. 轮询查询任务状态
let result;
const maxAttempts = 60; // 最多轮询60次(约10分钟)
let attempt = 0;
while (attempt < maxAttempts) {
attempt++;
console.log(`第${attempt}次查询任务状态...`);
result = await queryVideoTask(taskId);
console.log('当前状态:', result.status, '进度:', result.progress);
// 检查任务状态
if (result.status === 'completed') {
console.log('视频生成完成!');
console.log('视频URL:', result.video_url);
console.log('内容URL:', result.metadata.content_url);
return result;
} else if (result.status === 'failed') {
console.error('视频生成失败:', result.error);
throw new Error(`视频生成失败: ${result.error.message}`);
}
// 等待5秒后再次查询
await new Promise(resolve => setTimeout(resolve, 5000));
}
throw new Error('查询超时,任务未完成');
}
// 使用示例
const taskData = {
model: 'seedance-2.0-mini-720p',
prompt: 'A cinematic shot of a person walking through a neon city street at night, realistic lighting, handheld camera',
duration: 5,
ratio: '16:9',
resolution: '720p'
};
generateVideo(taskData)
.then(result => {
console.log('视频生成流程完成');
})
.catch(error => {
console.error('视频生成流程失败:', error.message);
});四、常见错误码
| 错误码 | 说明 |
|---|---|
| unsupported_material | 素材格式不支持 |
| material_policy_violation | 图片或素材未通过审核 |
| unsupported_request | 请求参数、模型、素材组合不被支持 |
| content_policy_violation | 提示词或内容未通过审核 |
| material_limit_exceeded | 素材大小或时长超限 |
| upload_failed | 素材上传失败 |
| download_failed | 素材或结果下载失败 |
| generation_failed | 视频生成失败 |
| generation_timeout | 视频生成超时 |
| upstream_network_error | 上游网络异常 |
| server_error | 服务内部异常 |
五、素材要求
图片要求
- 必须是公网可访问的 http/https URL
- 最多 9 张
- 单文件建议不超过 20MB
- 建议使用 JPG/PNG/WEBP 格式
- 避免带防盗链、登录态、短期签名的链接
视频要求
- 必须是公网可访问的 http/https URL
- 最多 3 个
- 总时长不超过 15 秒
- 总大小建议不超过 200MB
音频要求
- 必须是公网可访问的 http/https URL
- 最多 3 个
- 总时长不超过 15 秒
- 总大小建议不超过 50MB
- 推荐 MP3/WAV 格式
- 不建议 OGG(部分上游组合会返回 invalid media type)
六、最佳实践
- 轮询间隔:建议每 5-10 秒查询一次任务状态,避免过于频繁的请求
- 错误处理:始终检查任务状态,特别是
failed状态下的错误信息 - 超时处理:设置合理的轮询次数上限,避免无限等待
- 素材验证:在上传前确保素材格式和大小符合要求
- URL 有效性:确保所有素材 URL 是公网可访问的,且在任务处理期间保持有效
七、Curl 命令示例
创建任务
bash
curl https://ai.7code.cc/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "seedance-2.0-mini-720p",
"prompt": "A cinematic shot of a person walking through a neon city street at night, realistic lighting, handheld camera",
"duration": 5,
"ratio": "16:9",
"resolution": "720p"
}'查询任务状态
bash
curl https://ai.7code.cc/v1/videos/videos-mini_xxx \
-H "Authorization: Bearer YOUR_API_KEY"下载视频内容
bash
curl -L https://ai.7code.cc/v1/videos/videos-mini_xxx/content \
-o output.mp4