图生视频 API
把 1–2 张图片转换为一段视频。核心行为由你传入的图片数量决定:
- 1 张图片 → 首帧驱动模式。图片作为视频的第一帧,模型向后生成动态。
- 2 张图片 → 首帧 + 尾帧模式。第一张作为开场画面,第二张作为收尾画面,模型生成两者之间的过渡动画。
端点
POST https://api.evolink.ai/v1/videos/generations
Model ID: seedance-2.0-image-to-video
如果你希望自动识别首帧 / 首尾帧模式并获得更快速度,可改用
seedance-2.0-fast-image-to-video。
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
model | string | 是 | — | 固定为 seedance-2.0-image-to-video |
prompt | string | 是 | — | 动作 / 镜头 / 氛围的自然语言描述。中文 ≤ 500 字符,英文 ≤ 1000 单词 |
image_urls | array<string> | 是 | — | 1 或 2 个 公网可访问的图片 URL |
duration | integer | 否 | 5 | 视频时长(秒),范围 4–15 |
quality | string | 否 | 720p | 480p 或 720p |
aspect_ratio | string | 否 | 16:9 | 16:9、9:16、1:1、4:3、3:4、21:9、adaptive |
generate_audio | boolean | 否 | true | 是否生成同步音频 |
callback_url | string | 否 | — | 任务完成回调的 HTTPS URL,最长 2048 字符 |
注意: 图片只能以 URL 形式传入,不支持 Base64。所有 URL 必须无需认证即可被服务器直接 GET,且不能是需要跳转登录的页面。
图片输入要求
| 项 | 限制 |
|---|---|
| 数量 | 1 或 2 张 |
| 格式 | .jpeg、.png、.webp |
| 尺寸 | 单边 300–6000 像素 |
| 宽高比 | 0.4 – 2.5(即 2:5 到 5:2) |
| 单张大小 | ≤ 30 MB |
| 请求体合计 | ≤ 64 MB |
超出上述任一限制的请求会返回 invalid_request。不支持真实人脸上传,系统会自动拒绝。
首帧驱动模式(1 张图片)
curl -X POST https://api.evolink.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-image-to-video",
"prompt": "镜头缓慢推进,画面逐渐鲜活起来,微风吹动远处的草叶。",
"image_urls": ["https://example.com/first-frame.jpg"],
"duration": 5,
"aspect_ratio": "adaptive"
}'
aspect_ratio: "adaptive" 会让输出画面自动匹配输入图的宽高比。
首尾帧过渡模式(2 张图片)
curl -X POST https://api.evolink.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-image-to-video",
"prompt": "从黎明的海面平滑过渡到日落的同一片海",
"image_urls": [
"https://example.com/sunrise.jpg",
"https://example.com/sunset.jpg"
],
"duration": 6,
"quality": "720p",
"aspect_ratio": "16:9"
}'
两张图片的尺寸与宽高比应尽量接近,否则模型可能在过渡过程中产生形变。
Python 示例
import requests
response = requests.post(
"https://api.evolink.ai/v1/videos/generations",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"model": "seedance-2.0-image-to-video",
"prompt": "模特缓缓转身,头发在风中轻轻飘动",
"image_urls": ["https://example.com/portrait.jpg"],
"duration": 5,
"quality": "720p"
}
)
task = response.json()
print(f"Task ID: {task['id']}")
响应
{
"id": "task-unified-1774857405-abc123",
"object": "video.generation.task",
"created": 1774857405,
"model": "seedance-2.0-image-to-video",
"status": "pending",
"progress": 0,
"type": "video",
"task_info": {
"can_cancel": true,
"estimated_time": 165,
"video_duration": 5
},
"usage": {
"billing_rule": "per_second",
"credits_reserved": 50,
"user_group": "default"
}
}
字段含义与其他 Seedance 2.0 模型一致,详见 异步任务。
常见问题
我传了 3 张图会怎样?
返回 invalid_request。image-to-video 严格要求 1 或 2 张。如果你需要超过 2 张图片作为风格 / 主体参考,请使用 参考生视频。
图片 URL 必须是我自己托管的吗? 不必。任何可直接 GET 的公开 URL 均可。但对于需要稳定复现的生产流水线,建议使用你自己的对象存储(OSS / S3 / R2),避免第三方 URL 失效。
输出视频会保留输入图片里的人物面孔吗? 如果输入图片包含真实人脸,请求会被直接拒绝。如需面孔一致的虚拟人物,可以先用其他工具合成非真实人脸,再传入本 API。