Skip to content

本文档介绍如何使用 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

请求字段

字段类型必填说明
modelstring选择对应的模型名称
promptstring视频提示词
durationinteger视频时长(4-15秒),默认 5
ratiostring视频比例:16:99:161:1,默认 16:9
resolutionstring分辨率:720p480p,默认 720p
referenceImagesstring[]参考图片URL,最多 9 个(仅支持公开 http/https)
referenceVideosstring[]参考视频URL,最多 3 个(总时长不超过 15 秒)
referenceAudiosstring[]参考音频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)

六、最佳实践

  1. 轮询间隔:建议每 5-10 秒查询一次任务状态,避免过于频繁的请求
  2. 错误处理:始终检查任务状态,特别是 failed 状态下的错误信息
  3. 超时处理:设置合理的轮询次数上限,避免无限等待
  4. 素材验证:在上传前确保素材格式和大小符合要求
  5. 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