跳转到主要内容
权限说明 SD2.0 暂未对所有用户开放。 如需开通调用权限,请联系YeLinAI 客服协助处理:hi@yelinai.com Base URL: https://api.yelinai.com 需要接入的接口: 2 个
  1. POST /v1/video/generations:创建视频生成任务
  2. GET /v1/video/generations/{task_id}:查询任务状态与获取结果 URL

接口流程

SD2.0 视频生成是异步任务接口。业务侧需要先创建任务,拿到 task_id 后轮询查询状态,直到任务完成并返回视频 URL。
  1. 创建任务
调用 POST /v1/video/generations,传入模型、提示词、视频参数和可选参考素材文件。
  1. 查询状态
调用 GET /v1/video/generations/{task_id},轮询 status
  1. 下载视频
status=completed 时,从响应中读取视频 URL 并下载 mp4。 常见状态流转:
pending -> running -> succeeded -> completed
失败时通常返回 failed,并在响应中包含 error 字段。

模型

模型说明推荐用途
seedance-2.0SD2.0 视频生成视频生成、图片参考、视频参考

创建任务

POST /v1/video/generations 创建 SD2.0 视频生成任务。

请求头

Header必填说明
AuthorizationBearer $API_KEY
Content-Typemultipart/form-data

请求参数

参数类型必填说明
modelstring模型 ID,固定为 seedance-2.0
promptstring视频生成提示词,支持引用上传的文件
durationinteger输出时长(秒),默认 5 秒
aspect_ratiostring输出比例,如 16:99:161:1,默认 16:9
filesfile参考素材文件,支持图片(jpg/png)和视频(mp4)
first_frame_imagefile首帧图片文件,指定视频开头画面
last_frame_imagefile尾帧图片文件,指定视频结尾画面

文件引用语法

prompt 中按上传顺序引用文件:
写法含义
@IMG_1第 1 个上传的图片文件
@IMG_2第 2 个上传的图片文件
@VID_1第 1 个上传的视频文件
@VID_2第 2 个上传的视频文件

文生视频示例

curl -X POST https://api.yelinai.com/v1/video/generations \
  -H "Authorization: Bearer $API_KEY" \
  -F "model=seedance-2.0" \
  -F "prompt=一只可爱的小猫在草地上玩耍,阳光明媚" \
  -F "duration=5" \
  -F "aspect_ratio=16:9"

图片参考示例

curl -X POST https://api.yelinai.com/v1/video/generations \
  -H "Authorization: Bearer $API_KEY" \
  -F "model=seedance-2.0" \
  -F "prompt=@IMG_1 中的人物在海边散步" \
  -F "duration=5" \
  -F "aspect_ratio=16:9" \
  -F "files=@/path/to/image1.jpg"

多素材参考示例

curl -X POST https://api.yelinai.com/v1/video/generations \
  -H "Authorization: Bearer $API_KEY" \
  -F "model=seedance-2.0" \
  -F "prompt=@IMG_1 和 @IMG_3 与 @VID_1 中的人一起跳舞" \
  -F "duration=5" \
  -F "aspect_ratio=16:9" \
  -F "files=@/path/to/image1.jpg" \
  -F "files=@/path/to/image2.jpg" \
  -F "files=@/path/to/video1.mp4"

首尾帧控制示例

curl -X POST https://api.yelinai.com/v1/video/generations \
  -H "Authorization: Bearer $API_KEY" \
  -F "model=seedance-2.0" \
  -F "prompt=一个人从房间走到户外的场景" \
  -F "duration=8" \
  -F "aspect_ratio=16:9" \
  -F "first_frame_image=@/path/to/first_frame.jpg" \
  -F "last_frame_image=@/path/to/last_frame.jpg"

创建响应

{
  "task_id": "task-20260501120000-abc123",
  "status": "pending",
  "created_at": "2026-05-01T12:00:00Z"
}
响应字段:
字段类型说明
task_idstring任务 ID,后续查询状态使用
statusstring初始状态,常见为 pending
created_atstring创建时间(ISO 格式)

查询任务

GET /v1/video/generations/{task_id} 查询视频生成任务状态。
curl https://api.yelinai.com/v1/video/generations/task-20260501120000-abc123 \
  -H "Authorization: Bearer $API_KEY"

路径参数

参数类型必填说明
task_idstring创建任务时返回的 task_id

查询响应

任务进行中:
{
  "task_id": "task-20260501120000-abc123",
  "status": "running",
  "progress": 50,
  "created_at": "2026-05-01T12:00:00Z",
  "updated_at": "2026-05-01T12:01:00Z"
}
任务完成:
{
  "task_id": "task-20260501120000-abc123",
  "status": "completed",
  "video_url": "https://example.com/generated-video.mp4",
  "created_at": "2026-05-01T12:00:00Z",
  "updated_at": "2026-05-01T12:05:00Z"
}
任务失败:
{
  "task_id": "task-20260501120000-abc123",
  "status": "failed",
  "error": {
    "code": "GENERATION_FAILED",
    "message": "视频生成失败"
  },
  "created_at": "2026-05-01T12:00:00Z",
  "updated_at": "2026-05-01T12:03:00Z"
}
响应字段:
字段类型说明
task_idstring任务 ID
statusstringpendingrunningsucceededcompletedfailed
progressinteger任务进度(0-100)
video_urlstring任务完成后返回的视频 URL
created_atstring创建时间
updated_atstring更新时间
errorobject失败时的错误信息

下载视频

查询响应进入 completed 后,读取 video_url 并直接下载:
curl -L "$VIDEO_URL" -o output.mp4
video_url 通常是临时签名 URL。生产环境建议任务完成后立即下载,或转存到自己的对象存储。

Python 完整示例

import os
import time
import requests

API_KEY = os.environ["API_KEY"]
BASE_URL = "https://api.yelinai.com/v1/video/generations"

headers = {
    "Authorization": f"Bearer {API_KEY}",
}

files = {
    "model": (None, "seedance-2.0"),
    "prompt": (None, "@IMG_1 中的人物在海边散步"),
    "duration": (None, "5"),
    "aspect_ratio": (None, "16:9"),
    "files": open("/path/to/image.jpg", "rb"),
}

create_resp = requests.post(BASE_URL, headers=headers, files=files, timeout=60)
create_resp.raise_for_status()
task_id = create_resp.json()["task_id"]

while True:
    query_resp = requests.get(f"{BASE_URL}/{task_id}", headers=headers, timeout=60)
    query_resp.raise_for_status()
    task = query_resp.json()
    status = task.get("status")

    if status == "completed":
        video_url = task.get("video_url")
        video_resp = requests.get(video_url, timeout=120)
        video_resp.raise_for_status()
        with open(f"{task_id}.mp4", "wb") as f:
            f.write(video_resp.content)
        break

    if status == "failed":
        raise RuntimeError(task.get("error") or task)

    time.sleep(20)

常见问题

文件上传有什么限制? 目前支持 jpg、png 图片格式和 mp4 视频格式。单个文件大小建议不超过 50MB。 如何正确引用上传的文件? 按文件上传顺序,图片使用 @IMG_1@IMG_2 引用,视频使用 @VID_1@VID_2 引用。 任务需要多久完成? 通常需要 20 - 30分钟,具体取决于视频时长和服务器负载。建议轮询间隔设为 20-30 秒。