Kling Motion Control API:让角色模仿视频中的动作
Kling Motion Control 把一张图片里的角色放进真实视频的动作中。本指南介绍要发送什么、按秒计费如何运作,以及如何通过一个 API 调用 Kling 3.0 和 2.6 Motion Control。
动作控制的作用
Kling Motion Control 需要两样东西:一张角色图片和一段有人在运动的视频。它会生成一段新视频,图片中的角色会做出视频中的动作,时间节奏、手势和肢体语言都与之相同。人们用它来制作舞蹈热潮视频、吉祥物视频和产品代言人,让它们像真人演员一样动起来,而无需拍摄角色本身。
Revana 提供两个版本:
| 模型 | 模型 id | 分辨率 | 每秒价格 | 线路 |
|---|---|---|---|---|
| Kling 3.0 Motion Control | kling-3.0-motion-control | 720p, 1080p | 720p 下 $0.13,1080p 下 $0.17 | 两条线路 |
| Kling 2.6 Motion Control | kling-2.6-motion-control | 720p, 1080p | 720p 下 $0.07,1080p 下 $0.12 | 两条线路 |
Kling 3.0 是较新的模型。Kling 2.6 在 720p 下的价格约为一半,所以值得先用你的素材测试一下。
要发送什么
image_url:角色,最好是全身、面向镜头、背景简洁。结果中出现的就是这个人物。video_url:动作视频。最好是一个人、清晰可见、镜头稳定。结果会跟随它的时长。resolution:720p或1080p。每次都要发送。prompt:可选,用于描述图片中没有的场景或细节。
两个文件都必须是 API 能够获取的链接。如果要发送你电脑上的文件,请先用 POST /v1/uploads 上传(视频最大 50 MB),然后使用它返回的链接;该链接 14 天内有效。
动作控制如何计费(2026 年 10 月)
价格按视频的每秒计算,时长由你的动作视频决定,向上取整到下一个整秒。一段 7.4 秒的舞蹈视频按 8 秒计费。
| 模型 | 分辨率 | 5 秒视频 | 10 秒视频 | 15 秒视频 |
|---|---|---|---|---|
| Kling 3.0 Motion Control | 720p | $0.65 | $1.30 | $1.95 |
| Kling 3.0 Motion Control | 1080p | $0.85 | $1.70 | $2.55 |
| Kling 2.6 Motion Control | 720p | $0.35 | $0.70 | $1.05 |
| Kling 2.6 Motion Control | 1080p | $0.60 | $1.20 | $1.80 |
发送之前请把动作视频裁剪到你需要的部分:每多一秒都要计费。把 max_cost_usd 设为你预期该视频时长所需支付的最高金额,超过该金额的任务会被拒绝而不会运行。失败的任务不收费,额度预付 $10 起,无需订阅;见价格页面。
制作一段动作控制视频
发送 POST /v1/generations,带上两个链接,然后轮询,直到任务出现 succeeded 或 failed。使用 10 秒的动作视频、720p,费用为 $1.30。
export REVANA_API_KEY="sr_live_..."
# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
-H "Authorization: Bearer $REVANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3.0-motion-control",
"input": {
"prompt": "The mascot dances on a sunny rooftop, city skyline behind.",
"image_url": "https://example.com/mascot-full-body.png",
"video_url": "https://example.com/dance-10s.mp4",
"resolution": "720p"
},
"max_cost_usd": 1.6
}'
# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JC2V8K5T \
-H "Authorization: Bearer $REVANA_API_KEY"import os
import time
import requests
API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}
resp = requests.post(f"{API}/generations", headers=HEADERS, json={
"model": "kling-3.0-motion-control",
"input": {
"prompt": "The mascot dances on a sunny rooftop, city skyline behind.",
"image_url": "https://example.com/mascot-full-body.png",
"video_url": "https://example.com/dance-10s.mp4",
"resolution": "720p",
},
"max_cost_usd": 1.6,
})
resp.raise_for_status()
job = resp.json()
while job["status"] in ("queued", "running"):
time.sleep(5)
job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()
if job["status"] == "succeeded":
print(job["output"]["urls"], job["cost_usd"])
else:
print("Failed:", job["error"])// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
"Content-Type": "application/json",
};
const res = await fetch(`${API}/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "kling-3.0-motion-control",
input: {
prompt: "The mascot dances on a sunny rooftop, city skyline behind.",
image_url: "https://example.com/mascot-full-body.png",
video_url: "https://example.com/dance-10s.mp4",
resolution: "720p",
},
max_cost_usd: 1.6,
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();
while (job.status === "queued" || job.status === "running") {
await new Promise((r) => setTimeout(r, 5000));
job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}
if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);{
"id": "gen_01JC2V8K5T",
"model": "kling-3.0-motion-control",
"status": "succeeded",
"output": {
"urls": [
"https://cdn.revana.si/g/gen_01JC2V8K5T/0.mp4"
],
"duration_s": 10
},
"cost_usd": 1.3,
"attempts": 1,
"error": null,
"created_at": "2026-10-28T10:14:02Z",
"completed_at": "2026-10-28T10:15:31Z"
}获得干净的结果
- 匹配取景。全身角色配全身舞蹈视频,效果远好于半身肖像配全身视频。
- 只有一个运动者。使用只有一个人在运动的视频。人群和切镜会让模型分不清要复制哪个动作。
- 镜头稳定。固定机位或缓慢移动的镜头能让背景保持稳定。
- 用 720p 出草稿。先用 720p 的 Kling 2.6 检查动作迁移的效果,再用 Kling 3.0 以 1080p 渲染满意的那一条。
关于 Kling 的文生视频和图生视频模型,请参阅 Kling 3.0 API 指南。两个动作控制模型都在模型页面上,所有字段见文档。获取 API 密钥即可试用。
常见问题
Kling Motion Control 的价格是多少?
2026 年 10 月,Kling 3.0 Motion Control 在 720p 下每秒 $0.13,1080p 下 $0.17。Kling 2.6 Motion Control 为 $0.07 和 $0.12。时长由你的动作视频决定。
Kling Motion Control 需要什么?
image_url 中的一张角色图片、video_url 中的一段动作视频,以及 720p 或 1080p 的分辨率。提示词是可选的。
Kling Motion Control 的视频有多长?
与你发送的动作视频一样长。按它的每秒计费,不足一秒的向上取整到整秒。
Kling 3.0 和 Kling 2.6 Motion Control 有什么区别?
Kling 3.0 是较新的模型。Kling 2.6 每秒更便宜。两者的输入相同,都提供 720p 和 1080p。
我可以上传自己的动作视频吗?
可以。用 POST /v1/uploads 上传(视频最大 50 MB),并把返回的链接传入 video_url。