Skip to content

视频生成 Videos ​

提交视频生成任务 ​

POST /api/v1/videos
Authorization: Bearer sk-xxx
Content-Type: application/json

异步视频生成接口,提交任务后返回 taskId,通过轮询获取结果。

Request ​

字段类型必填说明
modelstring*视频生成模型 ID,如 happyhorse-1.1-t2v、wan2.7-i2v
promptstring*视频描述文本

HappyHorse 子模型参数说明 ​

HappyHorse 系列视频模型根据子模型类型不同,所需参数也不同。请根据你使用的模型 ID 后缀判断子模型类型:

子模型类型模型 ID 后缀必需参数可选参数说明
t2v(文生视频)-t2vmodel, promptsize, duration纯文本描述生成视频,无需图片
i2v(图生视频)-i2vmodel, prompt, first_frame_urlsize, duration, last_frame_url从首帧图片生成视频
r2v(参考图视频)-r2vmodel, prompt, ref_image_urlssize, duration参考一张或多张图片生成视频
video-edit(视频编辑)video-editmodel, prompt, video_urlsize对输入视频做编辑;输出时长跟随输入视频,duration 对该族不生效

各参数详细说明:

字段类型说明
first_frame_urlstring首帧图片 URL(i2v 必需)
video_urlstring待编辑视频的 URL(video-edit 必需;旧写法把视频地址填进 first_frame_url / image_url 同样接受)
last_frame_urlstring尾帧图片 URL(仅 i2v 可选,用于首尾帧控制)
ref_image_urlsarray参考图 URL 数组(r2v 必需),如 ["https://...jpg"]
sizestring视频分辨率,如 1920*1080、1280*720
durationnumber请求的视频时长(秒),不传按 5 秒。对 video-edit 族只是预扣基数,不改变实际输出长度,见下方「计费说明」

请求示例 ​

t2v 文生视频:

json
{
  "model": "happyhorse-1.1-t2v",
  "prompt": "一只金毛犬在海边奔跑,阳光明媚,慢动作"
}

i2v 图生视频:

json
{
  "model": "happyhorse-1.1-i2v",
  "prompt": "图片中的人物缓缓转身微笑",
  "first_frame_url": "https://example.com/photo.jpg"
}

r2v 参考图视频:

json
{
  "model": "happyhorse-1.1-r2v",
  "prompt": "参考图中的人物在公园里散步",
  "ref_image_urls": ["https://example.com/ref1.jpg", "https://example.com/ref2.jpg"]
}

video-edit 视频编辑:

json
{
  "model": "happyhorse-1.0-video-edit",
  "prompt": "把画面改成夜晚,霓虹灯反光",
  "video_url": "https://example.com/input.mp4"
}

Wan2.7 i2v 首尾帧控制:

json
{
  "model": "wan2.7-i2v",
  "prompt": "从第一帧过渡到最后一帧,花瓣飘落",
  "first_frame_url": "https://example.com/start.jpg",
  "last_frame_url": "https://example.com/end.jpg"
}

错误提示 ​

如果缺少必需参数,接口会返回清晰的错误提示:

json
{
  "code": 400,
  "msg": "模型 happyhorse-1.1-i2v 为图生视频(i2v)模型,必须提供 first_frame_url(首帧图片URL)。示例: {\"model\": \"happyhorse-1.1-i2v\", \"prompt\": \"...\", \"first_frame_url\": \"https://...\"}"
}

查询任务状态 ​

GET /api/v1/videos/{taskId}
Authorization: Bearer sk-xxx

状态说明:

task_status含义说明
PENDING排队中任务已提交,等待处理
RUNNING生成中视频正在生成
SUCCEEDED已完成生成成功,返回 video_url
FAILED失败生成失败,已自动退款

PENDING / RUNNING 响应:

json
{
  "request_id": "xxx",
  "output": {
    "task_id": "6eea9a05-eb65-48eb-9ed1-4d2f0908994c",
    "task_status": "PENDING"
  }
}

SUCCEEDED 响应:

json
{
  "request_id": "xxx",
  "output": {
    "task_id": "6eea9a05-eb65-48eb-9ed1-4d2f0908994c",
    "task_status": "SUCCEEDED",
    "video_url": "https://dashscope.oss.aliyuncs.com/xxx.mp4"
  },
  "usage": {
    "duration": 5,
    "video_count": 1
  }
}

💡 建议轮询间隔 5~10 秒,视频生成通常需要 1~3 分钟。

计费说明 ​

视频按秒计价,单价由模型与分辨率档决定。计费秒数取上游实际交付的时长,也就是轮询响应里的 usage.duration,不是请求里填的那个数。

扣费分两步:

  1. 提交任务时预扣 —— 按请求的 duration(不传按 5 秒)乘以单价先扣一笔。
  2. 任务 SUCCEEDED 时结算差额 —— 用 usage.duration 与预扣基数比对,少扣了补扣、多扣了退回,差额在账单上单独成行;任务 FAILED 则预扣全额退回,不收费。

因此「请求填 5 秒、账单不是 5 秒」是正常的:以实际交付为准。

video-edit(视频编辑)这一族:计费秒数 = 输入 + 输出两段 ​

其它族(t2v / i2v / r2v)从头生成,usage.duration 就是输出视频时长。video-edit 是在一段已有视频上改,上游把「读进去的输入视频」和「改完输出的视频」两段时长相加作为计费量,usage 里会拆给你看:

json
{
  "usage": {
    "duration": 12.12,
    "input_video_duration": 6.06,
    "output_video_duration": 6.06,
    "video_count": 1,
    "SR": 720
  }
}

两个实际影响:

  • 输出时长跟随输入视频,duration 在这族上不生效。 实测同一段 6.06 秒的输入,请求填 duration: 3 和填 duration: 5,交付完全一致(都是输入 6.06s + 输出 6.06s,计费 12.12 秒)。该字段在这族上只起预扣基数作用。
  • 成本按输入视频长度线性增长。 6 秒输入约计 12 秒,30 秒输入就约计 60 秒。用 video-edit 前请按输入素材的实际时长估算预算,别按 duration 估。

LimAPI — 大模型聚合网关