AI 大模型推理

  • AI 大模型推理 > API 文档 > 视频生成 (sora系列)

    视频生成 (sora系列)

    最近更新时间: 2025-12-23 17:16:35

    七牛云 AI 大模型推理 API 支持 OpenAI Sora 2 模型的视频生成功能,包括文生视频(Text-to-Video)、图生视频(Image-to-Video)和视频 Remix,兼容 OpenAI Videos API 接口格式,方便您集成到各种业务和应用场景中。

    Sora-2 模型核心特点

    • 高清分辨率: 仅支持 720P 高清视频输出
    • 灵活时长: 支持生成 4秒8秒12秒 视频
    • 多种生成方式:
      • 文生视频 (Text-to-Video): 根据文本描述生成视频
      • 图生视频 (Image-to-Video): 基于参考图片生成动态视频,仅支持一个参考图片
      • 视频 Remix: 基于已生成视频使用新提示词重新生成
    • 有声视频: 生成的视频是有声音的

    接口说明

    Token API 接入点

    七牛云 AI 大模型推理 API 接入域名:

    支持接口列表

    接口名 说明
    /videos 视频创建接口,支持文生视频(根据文本描述生成视频)和图生视频(根据参考图片和文本描述生成视频)
    /videos/:id 查询视频生成状态接口,根据视频任务 ID 查询生成进度和结果
    /videos/:id/remix 视频 Remix 接口,基于已生成的视频使用新的提示词重新生成,保持原视频的时长和分辨率

    支持的模型

    模型 ID 模型名称 说明 状态
    sora-2 OpenAI Sora 2 OpenAI 的视频生成模型,支持高质量文生视频和图生视频,输出分辨率为 720P ✅ 已上线
    sora-2-pro OpenAI Sora 2 Pro OpenAI Sora 2 专业版,支持更高质量的视频生成 🔄 即将上线

    请求参数说明

    创建视频接口 (POST /videos)

    接口说明: 创建视频生成任务,提交后会返回任务 ID,您需要使用查询接口轮询任务状态并获取生成的视频。

    Header 参数

    参数名 类型 必填 说明
    Authorization string API Key,格式:Bearer YOUR_API_KEY
    Content-Type string 请求内容类型,固定值:application/json

    Body 参数 (JSON)

    参数名 类型 必填 默认值 说明
    model string - 视频生成模型名称,固定为:sora-2
    详细说明
    • 固定为 sora-2(OpenAI Sora 2 模型)
    prompt string - 视频生成的文本描述提示词,最大 2500 字符
    详细说明
    • 字符数限制:不超过 2500 个字符
    • 建议:提示词越详细、具体,生成的视频质量越好
    • 建议包含:场景描述、动作、风格、光线、氛围等细节
    • 示例:"一只橘色的猫坐在窗台上,温暖的阳光洒在它身上,它慢慢转头看向镜头,电影风格,高清画质"
    input_reference string - 参考图片 URL,用于图生视频功能,必须是公开可访问的图片 URL
    详细说明
    • 必须提供公开可访问的图片 URL
    • 仅支持图片 URL,不支持 Base64 编码或其他格式
    • 图片将作为视频生成的视觉参考基础,结合 prompt 描述生成动态视频
    重要:图片尺寸必须与 size 参数一致,例如:如果 size1280x720(横屏),图片尺寸也必须是 1280x720
    • 注意:图片必须可以通过 HTTP/HTTPS 公开访问
    seconds string 4 视频时长(秒),可选值:4812
    详细说明
    • 控制生成视频的时长(单位:秒)
    • 不同时长会影响生成成本和时间
    size string 720x1280 视频分辨率,格式:宽x高
    可选值:1280x720(横屏)、720x1280(竖屏)
    详细说明
    • 指定生成视频的分辨率,格式为 宽x高
    • 作用:主要用于判断横竖屏方向
      - 宽 > 高:横屏
      - 宽 < 高:竖屏

    响应体说明

    创建视频任务成功后,接口会立即返回任务基本信息。接口返回已创建的视频任务基本信息,包含任务 ID、模型、状态等字段。视频尚未生成完成,需要通过查询接口获取最终结果。响应体包含以下字段:

    字段名 类型 说明
    id string 视频任务唯一 ID,用于后续查询任务状态
    object string 对象类型,固定为 video
    model string 使用的模型名称,例如 sora-2
    status string 任务状态,通常为 queued(排队中)
    created_at integer 创建时间(Unix 时间戳,秒)
    updated_at integer 更新时间(Unix 时间戳,秒)

    响应示例:

    {
      "id": "qvideo-user123-1766453713089395279",
      "object": "video",
      "model": "sora-2",
      "status": "queued",
      "created_at": 1766453713,
      "updated_at": 1766453713,
      "seconds": "4",
      "size": "1280x720"
    }
    

    查询视频状态接口 (GET /videos/:id)

    接口说明: 根据视频任务 ID 查询视频生成状态和结果,建议定期轮询直到状态变为 completedfailed

    Path 参数

    参数名 类型 必填 说明
    id string 视频任务 ID,创建视频时返回的 id 字段,例如:qvideo-user123-1234567890123456789

    Header 参数

    参数名 类型 必填 说明
    Authorization string API Key,格式:Bearer YOUR_API_KEY

    响应体说明

    根据任务状态不同,返回的字段也有所不同。任务完成后会包含 task_result 字段,其中包含生成的视频下载链接。

    字段名 类型 说明
    id string 视频任务唯一 ID
    object string 对象类型,固定为 video
    model string 使用的模型名称
    status string 任务状态,见下方状态说明
    created_at integer 创建时间 (Unix 时间戳,秒)
    updated_at integer 更新时间 (Unix 时间戳,秒)
    completed_at integer 完成时间 (Unix 时间戳,秒),仅在已完成或失败时返回
    seconds string 视频时长 (秒)
    size string 视频分辨率 (宽 x 高)
    task_result object 任务结果,包含生成的视频列表,仅在已完成时返回
    task_result.videos array 生成的视频列表
    task_result.videos[].id string 视频 ID,全局唯一
    task_result.videos[].url string 视频下载 URL(注意:生成的视频会在 7 天后过期,请及时转存)
    task_result.videos[].duration string 视频时长 (秒)
    error object 错误信息,仅在失败时返回
    error.code string 错误码
    error.message string 错误描述

    任务状态说明

    状态值 说明
    initializing 初始化中,任务已创建
    queued 排队中,等待处理
    in_progress 处理中,模型正在生成视频
    downloading 下载中,正在下载结果
    uploading 上传中,正在上传到七牛云存储
    completed 已完成,视频生成成功
    failed 失败,视频生成失败
    cancelled 已取消,用户主动取消

    响应示例

    处理中状态

    {
      "id": "qvideo-root-1766453713089395279",
      "object": "video",
      "model": "sora-2",
      "status": "in_progress",
      "created_at": 1766453713,
      "updated_at": 1766453713,
      "seconds": "4",
      "size": "1280x720"
    }
    

    成功完成状态

    {
      "id": "qvideo-user123-1766453713089395279",
      "object": "video",
      "model": "sora-2",
      "status": "completed",
      "created_at": 1766453713,
      "updated_at": 1766453836,
      "completed_at": 1766453836,
      "seconds": "4",
      "size": "1280x720",
      "task_result": {
        "videos": [
          {
            "id": "qvideo-user123-1766453713089395279-1",
            "url": "https://aitoken-video.qnaigc.com/user123/qvideo-user123-1766453713089395279/1.mp4?e=1767058636&token=IDB69r4gicDbMd9Fbmn9w2bWuEENg9i5_yasXqhp:4_dy0_qmZfuzBPO0JjTVZeTdkng=",
            "duration": "4"
          }
        ]
      }
    }
    

    失败状态

    {
      "id": "qvideo-user123-1234567890123456789",
      "object": "video",
      "model": "sora-2",
      "status": "failed",
      "created_at": 1766453713,
      "updated_at": 1766453836,
      "completed_at": 1766453836,
      "error": {
          "code": "moderation_blocked",
          "message": "Your request was blocked by our moderation system."
      },
      "seconds": "4",
      "size": "1280x720"
    }
    

    视频 Remix 接口 (POST /videos/:id/remix)

    接口说明: 基于已完成的视频任务,使用新的提示词重新生成视频,保持原视频的时长和分辨率。

    Path 参数

    参数名 类型 必填 说明
    id string 原视频任务 ID,必须是已完成(状态为 completed)的视频任务

    Header 参数

    参数名 类型 必填 说明
    Authorization string API Key,格式:Bearer YOUR_API_KEY
    Content-Type string 请求内容类型,固定值:application/json

    Body 参数 (JSON)

    参数名 类型 必填 默认值 说明
    prompt string - 新的视频生成提示词,最大 2500 字符
    详细说明
    • 新的视频生成提示词,用于重新生成视频
    • 字符数限制:不超过 2500 个字符
    • 建议:描述希望在新视频中呈现的变化、风格或效果
    • 新视频将继承原视频的模型、时长和分辨率设置

    响应体说明

    Remix 接口返回格式与创建视频接口相同,会立即返回新视频任务的基本信息:

    字段名 类型 说明
    id string 新视频任务唯一 ID,用于后续查询任务状态
    object string 对象类型,固定为 video
    model string 使用的模型名称,继承自原视频
    status string 任务状态,通常为 queued(排队中)
    created_at integer 创建时间(Unix 时间戳,秒)
    updated_at integer 更新时间(Unix 时间戳,秒)
    seconds string 视频时长(秒),继承自原视频
    size string 视频分辨率(宽x高),继承自原视频
    remixed_from_video_id string 原视频任务 ID,标识此视频是从哪个视频 Remix 而来

    响应示例:

    {
      "id": "qvideo-user123-1766454050923137689",
      "object": "video",
      "model": "sora-2",
      "status": "queued",
      "created_at": 1766454050,
      "updated_at": 1766454050,
      "seconds": "4",
      "size": "1280x720",
      "remixed_from_video_id": "qvideo-user123-1766453713089395279"
    }
    

    HTTP 调用示例

    基础文生视频

    使用 sora-2 模型生成高分辨率 720P 视频:

    # 调用 sora-2 文生视频 API
    export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
    export OPENAI_API_KEY="<七牛云 AI API KEY>"
    
    curl "$OPENAI_BASE_URL/videos" \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $OPENAI_API_KEY" \
        -d '{
            "model": "sora-2",
            "prompt": "一只可爱的橘猫在阳光明媚的花园里追逐蝴蝶,照片风格,高清画质",
            "seconds": "4",
            "size": "1280x720"
        }'
    

    点击查看生成的视频

    图生视频

    使用 sora-2 模型基于参考图片生成视频:

    # 基于参考图片生成视频
    export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
    export OPENAI_API_KEY="<七牛云 AI API KEY>"
    
    curl "$OPENAI_BASE_URL/videos" \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $OPENAI_API_KEY" \
        -d '{
            "model": "sora-2",
            "prompt": "这个人在跑马拉松",
            "input_reference": "https://aitoken-public.qnaigc.com/example/generate-video/running-man.jpg",
            "seconds": "4",
            "size": "1280x720"
        }'
    

    点击查看生成的视频

    视频 Remix (sora-2)

    使用 Remix 功能,可以基于已生成的视频使用新的提示词重新生成视频,保持原视频的时长和分辨率:

    # 对已生成的视频进行 Remix
    export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
    export OPENAI_API_KEY="<七牛云 AI API KEY>"
    export VIDEO_ID="qvideo-user123-1234567890123456789"
    
    curl "$OPENAI_BASE_URL/videos/$VIDEO_ID/remix" \
        -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $OPENAI_API_KEY" \
        -d '{
            "prompt": "将场景改为夜晚,增加霓虹灯效果,赛博朋克风格"
        }'
    

    点击查看原视频

    点击查看 Remix 后的视频

    查询视频生成状态

    # 查询视频任务状态
    export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
    export OPENAI_API_KEY="<七牛云 AI API KEY>"
    export VIDEO_ID="qvideo-user123-1234567890123456789"
    
    curl "$OPENAI_BASE_URL/videos/$VIDEO_ID" \
        -H "Authorization: Bearer $OPENAI_API_KEY"
    

    响应示例 (处理中):

    {
      "id": "qvideo-user123-1234567890123456789",
      "object": "video",
      "model": "sora-2",
      "status": "in_progress",
      "created_at": 1234567890,
      "updated_at": 1234567895
    }
    

    响应示例 (已完成):

    {
      "id": "qvideo-user123-1766453713089395279",
      "object": "video",
      "model": "sora-2",
      "status": "completed",
      "created_at": 1766453713,
      "updated_at": 1766453836,
      "completed_at": 1766453836,
      "seconds": "4",
      "size": "1280x720",
      "task_result": {
        "videos": [
          {
            "id": "qvideo-user123-1766453713089395279-1",
            "url": "https://aitoken-video.qnaigc.com/user123/qvideo-user123-1766453713089395279/1.mp4?e=1767058636&token=IDB69r4gicDbMd9Fbmn9w2bWuEENg9i5_yasXqhp:4_dy0_qmZfuzBPO0JjTVZeTdkng=",
            "duration": "4"
          }
        ]
      }
    }
    

    响应示例 (Remix 已完成):

    {
      "id": "qvideo-user123-1766454050923137689",
      "object": "video",
      "model": "sora-2",
      "status": "completed",
      "created_at": 1766454050,
      "updated_at": 1766454320,
      "completed_at": 1766454320,
      "seconds": "4",
      "size": "1280x720",
      "remixed_from_video_id": "qvideo-user123-1766453713089395279",
      "task_result": {
        "videos": [
          {
            "id": "qvideo-user123-1766454050923137689-1",
            "url": "https://aitoken-video.qnaigc.com/user123/qvideo-user123-1766454050923137689/1.mp4?e=1767059120&token=IDB69r4gicDbMd9Fbmn9w2bWuEENg9i5_yasXqhp:UEqrXzkWZ3AECDmSHie52HCLXgk=",
            "duration": "4"
          }
        ]
      }
    }
    

    响应示例 (错误):

    {
      "id": "qvideo-user123-1234567890123456789",
      "object": "video",
      "model": "sora-2",
      "status": "failed",
      "created_at": 1766454050,
      "updated_at": 1766454320,
      "completed_at": 1766454320,
      "error": {
          "code": "moderation_blocked",
          "message": "Your request was blocked by our moderation system."
      },
      "seconds": "4",
      "size": "1280x720"
    }
    

    常见问题

    Q: 如何将生成的视频保存到七牛云对象存储?

    A: 生成的视频已经自动保存在七牛云对象存储 (Kodo) 中,返回的 URL 即为 Kodo 存储地址,但有效期仅有 7 天。如需转存到您自己的存储空间,推荐使用七牛对象存储的【SDK 中心】进行操作。更多对象存储信息欢迎参考对象存储的【产品使用文档】。

    Q: 视频生成需要多长时间?

    A: 视频生成时间取决于视频时长和当前队列情况。通常情况下:

    • 4 秒视频:2-5 分钟
    • 8 秒视频:5-10 分钟
    • 12 秒视频:10-15 分钟

    建议使用轮询方式查询任务状态。

    Q: 生成的视频会保存多久?

    A: 生成的视频会在 7 天后过期,建议在视频生成后及时下载或转存到您自己的存储空间。

    Q: 如何提高视频生成质量?

    A:

    • 详细的提示词:描述越详细,生成效果越好
    • 包含关键要素:场景、动作、风格、光线、氛围等
    • 使用具体的风格描述:如"电影风格"、"高清画质"等

    Q: 支持哪些视频格式和分辨率?

    A:

    • 输出格式:MP4
    • 分辨率:可通过 size 参数指定
      • 支持 1280x720(横屏)、720x1280(竖屏)
    • 视频时长:支持 4、8、12 秒

    Q: 如何控制生成成本?

    A:

    • 选择合适的时长:视频时长直接影响成本
    • 批量生成:提前规划好需求,避免重复生成

    Q: Remix 功能的使用场景是什么?

    A: Remix 功能适用于以下场景:

    • 快速迭代:对已生成的视频进行风格调整或场景变化
    • 内容变体:基于同一视频生成不同风格的版本(如将白天场景改为夜晚)
    • 参数保持:当需要生成与原视频相同时长和分辨率的新内容时

    Q: Remix 与直接创建新视频有什么区别?

    A:

    • Remix:基于原视频重新生成,自动继承原视频的模型、时长和分辨率,只需提供新的 prompt
    • 创建新视频:完全独立的视频生成任务,需要提供所有参数(model、prompt、seconds、size 等)
    • 建议:如果需要保持相同参数生成相似内容,使用 Remix 更方便;如果需要完全不同的视频,使用创建接口

    Q: Remix 任务失败的常见原因?

    A:

    • 原视频未完成:原视频任务状态必须为 completed
    • 视频不存在或无权限:原视频 ID 不存在或不属于当前用户
    • prompt 为空:Remix 请求必须提供 prompt 参数

    Q: 为什么我的视频生成任务返回了 moderation_blocked 错误?

    A: moderation_blocked 表示您的请求被内容审核系统拦截。这通常发生在以下情况:

    • 提示词包含敏感内容:您的 prompt 可能包含暴力、色情、政治敏感、违法违规等不当内容
    • 参考图片违规:使用图生视频功能时,提供的参考图片 (input_reference) 可能包含违规内容
    • 违反使用政策:请求内容违反了 AI 模型的使用政策和社区准则

    解决方法:

    • 检查并修改您的提示词,移除任何可能违规的内容描述
    • 如使用图生视频功能,确保参考图片内容合规
    • 使用更加中性、正面的描述方式
    • 避免描述暴力、仇恨、成人内容等敏感主题

    参考文档

    以上内容是否对您有帮助?