视频生成接口
介绍
LinkAI 统一视频生成接口,通过一组接口接入Seedance、即梦、可灵等多家视频生成模型,支持:
- 文生视频:根据文本描述生成视频
- 图生视频:传入参考图,生成动起来的视频;支持首尾帧模式
- 视频续写 / 编辑:基于已有视频进行延展或修改
- 多模型聚合:通过切换
model参数即可使用不同厂商的视频模型,响应格式统一
视频生成耗时较长(通常数十秒到数分钟),接口采用 异步任务 模式:先调用「创建任务」接口提交生成请求拿到 task_id,再轮询「查询任务」接口获取生成结果。
在线接口调试:API接口调试
一、创建视频生成任务
接口地址
POST https://api.link-ai.tech/v1/videos/generations
请求头
| 参数 | 取值 | 说明 |
|---|---|---|
| Authorization | Bearer YOUR_API_KEY | 参考 接口鉴权说明 创建 API Key 并填入 |
| Content-Type | application/json | 表明使用 JSON 格式请求 |
请求体
| 参数 | 类型 | 是否必传 | 说明 |
|---|---|---|---|
| prompt | string | 是 | 视频生成提示词,描述想要生成的视频内容 |
| model | string | 是 | 视频模型编码,所有可选模型见 模型列表 |
| images | list<string> | 否 | 参考图地址列表,传入时为 图生视频。首尾帧模式下按顺序作为首帧 / 尾帧 |
| videos | list<string> | 否 | 参考视频地址列表,用于视频续写 / 视频编辑场景 |
| audios | list<string> | 否 | 参考音频地址列表,仅 Seedance 2.0 系列支持,用于音画同步等场景,其他模型会忽略 |
| size | string | 否 | 视频分辨率,取值范围由具体模型决定,常见取值 480P / 720P / 1080P,详见 模型列表 |
| aspect_ratio | string | 否 | 视频宽高比,常见取值 16:9 / 9:16 / 1:1 / 4:3 / 3:4,默认 16:9 |
| duration | int | 否 | 视频时长(秒),取值范围由具体模型决定,详见 模型列表 |
| mode | string | 否 | 生成模式,仅 kling 系列生效,可选 std(标清 720P) / pro(高清 1080P) |
| image_mode | string | 否 | 图片输入模式:reference(参考图) / first_last_frame(首尾帧),不同模型支持的模式不同(详见 模型列表) |
| generate_audio | bool | 否 | 是否在输出视频中生成配音 / 音效,仅 Seedance 2.0 / 2.0 Fast、kling-v3-omni 生效,默认 true。注意:可灵 V3 Omni 传入 videos 做视频编辑时,该字段会被自动置为 false(保留原视频音轨) |
| watermark | bool | 否 | 是否添加水印,默认 false |
注:关于
images/videos/audios字段,元素必须为 公网可访问的 URL,暂不支持 base64
请求示例(文生视频):
{
"model": "jimeng_t2v_v30",
"prompt": "傍晚海边,少女白色长裙被海风扬起。镜头从背后跟随推进,长焦虚化,电影感",
"aspect_ratio": "16:9",
"duration": 5,
"size": "1080P"
}
请求示例(首尾帧补帧):
传入两张图作为首帧 / 尾帧,模型自动生成中间过渡:
{
"model": "jimeng_t2v_v30",
"prompt": "镜头平稳推进,光线由冷转暖",
"images": [
"https://cdn.link-ai.tech/example/frame_first.jpg",
"https://cdn.link-ai.tech/example/frame_last.jpg"
],
"image_mode": "first_last_frame",
"duration": 5
}
请求示例(Seedance 多模态参考):
doubao-seedance-2-0 支持同时传入 参考图 + 参考视频 + 参考音频,可一次性融合角色、运镜节奏和音乐律动:
{
"model": "doubao-seedance-2-0",
"prompt": "穿同款外套的女孩走进咖啡店,画面随音乐节拍律动",
"images": ["https://cdn.link-ai.tech/example/character.jpg"],
"videos": ["https://cdn.link-ai.tech/example/motion_ref.mp4"],
"audios": ["https://cdn.link-ai.tech/example/beat.mp3"],
"duration": 8,
"size": "1080P"
}
注意:
- 数量上限:
images≤ 9、videos≤ 3、audios≤ 3,videos与audios总时长 ≤ 15 秒,超出会被截断 audios不能单独使用,必须同时传入至少一张图片或一段视频- 多模态参考目前仅
doubao-seedance-2-0/doubao-seedance-2-0-fast支持
请求示例(可灵 V3 Omni 视频编辑 + 有声):
kling-v3-omni 支持视频编辑、风格化、有声视频生成。传入 videos 时输出会自动保留原视频音轨,generate_audio 会被忽略;不传 videos 走文生视频时,可通过 generate_audio 控制是否生成音效:
{
"model": "kling-v3-omni",
"prompt": "整体切换为吉卜力手绘风格,色调温暖",
"videos": ["https://cdn.link-ai.tech/example/source.mp4"],
"mode": "pro"
}
响应结果
接口同步返回任务创建结果,不包含视频数据,需后续通过 task_id 轮询任务状态获取视频:
{
"task_id": "vt_xxxxxxxxxxxxxxxx",
"status": "queued",
"model": "jimeng_t2v_v30",
"created_at": null
}
| 字段 | 说明 |
|---|---|
task_id | 任务 ID,用于后续查询任务状态 |
status | 任务初始状态,通常为 queued(队列中)或 processing(处理中) |
model | 实际使用的模型编码 |
created_at | 创建时间占位字段,当前可能为 null,请以业务侧时间为准 |
二、查询视频生成任务
接口地址
POST https://api.link-ai.tech/v1/videos/tasks
请求体
| 参数 | 类型 | 是否必传 | 说明 |
|---|---|---|---|
| task_id | string | 是 | 创建任务接口返回的 task_id |
请求示例:
{
"task_id": "vt_xxxxxxxxxxxxxxxx"
}
响应结果
进行中
任务尚未完成时,响应只包含状态字段:
{
"task_id": "vt_xxxxxxxxxxxxxxxx",
"status": "processing",
"model": "jimeng_t2v_v30"
}
已完成
任务完成时,响应包含视频地址:
{
"task_id": "vt_xxxxxxxxxxxxxxxx",
"status": "completed",
"model": "jimeng_t2v_v30",
"video_url": "https://cdn.link-ai.tech/user/generate/xxxxxxxx.mp4",
"thumbnail_url": "https://cdn.link-ai.tech/user/generate/xxxxxxxx.jpg",
"enhanced_prompt": "A white fox running across a snowy plain under the moonlight, cinematic ..."
}
| 字段 | 说明 |
|---|---|
video_url | 视频地址(已转存至 LinkAI CDN,URL 长期有效) |
thumbnail_url | 视频封面图地址(部分模型返回) |
enhanced_prompt | 模型对原 prompt 的增强结果(部分模型返回,可用于追溯) |
失败
{
"task_id": "vt_xxxxxxxxxxxxxxxx",
"status": "failed",
"model": "jimeng_t2v_v30",
"error_message": "视频生成失败:内容审核不通过"
}
任务状态码
| 状态值 | 说明 |
|---|---|
init | 已初始化 |
queued | 队列等待中 |
processing | 生成中 |
completed | 已完成(响应中包含 video_url) |
failed | 任务失败(响应中包含 error_message) |
unknown | 系统异常 / 未知状态,建议稍后重试查询 |
轮询建议:
- 视频生成通常耗时 30 秒到几分钟,建议每 5~10 秒 查询一次
- 当
status为completed或failed时为最终态,停止轮询 - 单次任务建议最长轮询 10 分钟,超时仍未完成可视为失败
错误响应
接口异常时返回如下结构:
{
"error": {
"message": "模型不存在或用户无权限使用: xxx",
"type": "invalid_request_error"
}
}
| HTTP 状态码 | 描述 |
|---|---|
| 400 | 请求参数错误,如 prompt 为空、参考资源不可访问等 |
| 401 | 接口鉴权失败,请检查 API Key 是否填写正确 |
| 402 | 模型不存在或当前账号无权限使用该模型 |
| 406 | 账号积分额度不足 |
| 409 | 内容审核不通过,提示词或参考资源中可能包含敏感内容 |
| 503 | 接口调用异常,联系客服处理 |
三、模型列表
接口支持的视频生成模型如下,完整模型列表可在平台 模型服务 页面查看。
总览:
| 模型编码 (model) | 名称 | 输入能力 |
|---|---|---|
doubao-seedance-2-0 | Seedance 2.0 | 文 / 图 / 视频 / 音频 多模态参考 |
doubao-seedance-2-0-fast | Seedance 2.0 Fast | 文 / 图 / 视频 / 音频 多模态参考,速度更快 |
jimeng_t2v_v30 | 即梦 3.0 | 文 / 图(首尾帧)生视频 |
jimeng_ti2v_v30_pro | 即梦 3.0 Pro | 文 / 图(单帧)生视频 |
kling-v3-omni | 可灵 V3 Omni | 文 / 图(参考/首尾帧) / 视频编辑,支持生成有声视频 |
kling-video-o1 | 可灵 O1 | 文 / 图(首尾帧)生视频 |
sora-2 | Sora-2 | 文 / 图(参考)生视频 |
veo_3_1 | Veo-3.1 | 文 / 图(参考)生视频 |
各模型详细参数:
Seedance 2.0
模型编码:doubao-seedance-2-0
基础参数:
| 参数 | 取值范围 | 默认值 |
|---|---|---|
| aspect_ratio | 16:9 / 1:1 / 9:16 | 16:9 |
| duration | 4 / 5 / 8 / 10 / 15(秒) | 5 |
| size | 480P / 720P / 1080P | 720P |
参考输入:
- images:最多 9 张,支持
image_mode= reference(1~9 张)/ first_last_frame(1~2 张) - videos:最多 3 段,总时长 ≤ 15 秒
- audios:最多 3 段,总时长 ≤ 15 秒,不可单独使用
Seedance 2.0 Fast
模型编码:doubao-seedance-2-0-fast
基础参数:
| 参数 | 取值范围 | 默认值 |
|---|---|---|
| aspect_ratio | 16:9 / 1:1 / 9:16 | 16:9 |
| duration | 4 / 5 / 8 / 10 / 15(秒) | 5 |
| size | 480P / 720P | 720P |
参考输入:与 Seedance 2.0 相同(images ≤ 9 / videos ≤ 3 / audios ≤ 3)
即梦 3.0
模型编码:jimeng_t2v_v30
基础参数:
| 参数 | 取值范围 | 默认值 |
|---|---|---|
| aspect_ratio | 16:9 / 1:1 / 9:16 | 16:9 |
| duration | 5 / 10(秒;接口传 1~5 视为 5 秒,≥6 视为 10 秒) | 5 |
| size | 720P / 1080P | 720P |
参考输入:images ≤ 2,仅支持 image_mode = first_last_frame
即梦 3.0 Pro
模型编码:jimeng_ti2v_v30_pro
基础参数:
| 参数 | 取值范围 | 默认值 |
|---|---|---|
| aspect_ratio | 16:9 / 1:1 / 9:16 | 16:9 |
| duration | 5 / 10(秒;规则同 jimeng_t2v_v30) | 5 |
参考输入:images ≤ 1,仅支持 image_mode = first_last_frame(单帧)
可灵 V3 Omni
模型编码:kling-v3-omni
基础参数:
| 参数 | 取值范围 | 默认值 |
|---|---|---|
| aspect_ratio | 16:9 / 9:16 / 1:1 / 4:3 / 3:4 | 16:9 |
| duration | 3 / 5 / 8 / 10 / 15(秒;视频编辑模式下该字段无效) | 5 |
| mode | std(标清 720P) / pro(高清 1080P) | std |
| generate_audio | 是否生成有声视频;传入 videos 时会被强制关闭 | true |
参考输入:
- images:最多 7 张,
image_mode= reference(1~7 张)/ first_last_frame(1~2 张) - videos:最多 1 段,用于视频编辑
可灵 O1
模型编码:kling-video-o1
基础参数:
| 参数 | 取值范围 | 默认值 |
|---|---|---|
| aspect_ratio | 16:9 / 1:1 / 9:16 | 16:9 |
| duration | 5 / 10(秒) | 5 |
| size | 720p(标清) / 1080p(高清) | 720p |
参考输入:images ≤ 2,仅支持 image_mode = first_last_frame
Sora-2
模型编码:sora-2
基础参数:
| 参数 | 取值范围 | 默认值 |
|---|---|---|
| aspect_ratio | 16:9 / 1:1 / 9:16 | 16:9 |
| duration | 4 / 8 / 12(秒;其它值会自动就近吸附) | 8 |
参考输入:images ≤ 5,仅支持 image_mode = reference
Veo-3.1
模型编码:veo_3_1
基础参数:
| 参数 | 取值范围 | 默认值 |
|---|---|---|
| aspect_ratio | 16:9 / 1:1 / 9:16 | 16:9 |
| duration | 8(固定) | 8 |
参考输入:images ≤ 3,仅支持 image_mode = reference
四、示例代码
1. CURL 完整流程
Step 1:创建任务
curl --request POST \
--url https://api.link-ai.tech/v1/videos/generations \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "jimeng_t2v_v30",
"prompt": "一只白色狐狸在月光下的雪原中奔跑,电影质感",
"duration": 5
}'
Step 2:轮询查询任务
curl --request POST \
--url https://api.link-ai.tech/v1/videos/tasks \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"task_id": "vt_xxxxxxxxxxxxxxxx"
}'
2. Python 完整流程
import time
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.link-ai.tech"
HEADERS = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
# Step 1: create task
create_body = {
"model": "jimeng_t2v_v30",
"prompt": "一只白色狐狸在月光下的雪原中奔跑,电影质感",
"duration": 5
}
create_res = requests.post(
f"{BASE_URL}/v1/videos/generations",
json=create_body, headers=HEADERS
).json()
task_id = create_res["task_id"]
print(f"任务已创建: task_id={task_id}")
# Step 2: poll for task status
while True:
query_res = requests.post(
f"{BASE_URL}/v1/videos/tasks",
json={"task_id": task_id},
headers=HEADERS
).json()
status = query_res.get("status")
print(f"任务状态: {status}")
if status == "completed":
print(f"视频地址: {query_res['video_url']}")
break
elif status == "failed":
print(f"生成失败: {query_res.get('error_message')}")
break
time.sleep(8)
注意: 在 YOUR_API_KEY 处填入你创建的 API Key。