先說答案:可靈「動作控制」(Motion Control)的輸入是一張人物圖加一段動作影片,輸出是圖中人物照著影片動作動起來的成片。在 HopBase 上有兩個模型可用:kling-v3-motion-control,支援 720p / 1080p / 2K / 4K;kling-v2-6-motion-control,支援 720p / 1080p。呼叫方式跟其他可靈模型相同,都是非同步任務:先 POST https://api.hop-base.com/v1/video/generate 送出,再輪詢 GET /v1/video/tasks/{task_id}。請求裡人物圖和動作影片各放一個;不要傳 duration,成片長度由動作影片決定。唯一的擴充參數是 extra.character_orientation,值為 image 或 video。計費依成片秒數,任務失敗不收費,結果連結 24 小時內有效。最常出問題的是動作影片本身:畫面中必須是真人,而且從頭到腰的上半身要完整、清楚。
動作控制是什麼?跟數位人、對嘴型怎麼選
可靈有三條讓人物動起來的流程,各自適合不同需求:
| 模型 | 輸入 | 動的是什麼 | 成片長度 |
|---|---|---|---|
kling-v3-motion-control / kling-v2-6-motion-control | 1 張人物圖 + 1 段動作影片 | 全身照著影片動作做 | 等於動作影片長度 |
kling-avatar | 1-5 張人物圖 + 1 段音訊 | 臉部和嘴型隨音訊變化 | 等於音訊長度 |
kling-lip-sync | 既有影片 + 新音訊 | 只改嘴型,對上新台詞 | 等於來源影片長度 |
如果手上已經有一段動作素材,例如舞蹈、商品展示的手勢、走秀或主持人的肢體動作,想換成另一個角色來演(品牌吉祥物、換了服裝的模特兒、AI 生成的角色),就用動作控制。如果角色只需要開口說話,用數位人或對嘴型比較合適,詳見《可靈數位人 API 實戰》。
v3 還是 v2.6:解析度與官方牌價
兩個模型都依成片秒數計費,單價隨解析度不同。下表是各模型卡上公布的官方牌價;你的實際費率取決於所屬群組,以登入後模型目錄顯示的為準:
| 模型 | 720p | 1080p | 2K | 4K |
|---|---|---|---|---|
kling-v3-motion-control | $0.1324/秒 | $0.1765/秒 | $0.2647/秒 | $0.3971/秒 |
kling-v2-6-motion-control | $0.0735/秒 | $0.1176/秒 | — | — |
舉例來說,用 kling-v3-motion-control 產生 10 秒 1080p 成片,以牌價計算是 10 × $0.1765,約 $1.77。價格頁上同一級距的人民幣牌價為 ¥1.20/秒。打樣或大量產出 720p 用 v2.6,需要 2K / 4K 再用 v3。各級距價格見模型卡 kling-v3-motion-control 和 kling-v2-6-motion-control。
步驟一:送出任務
請求送到可靈影片的統一端點。動作控制情境裡每個素材的角色是固定的,所以人物圖不寫 usage,動作影片也不寫 reference_type:
curl https://api.hop-base.com/v1/video/generate \
-H "Authorization: Bearer sk-你的金鑰" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-v3-motion-control",
"prompt": "照著影片中的舞蹈動作跳",
"resolution": "1080p",
"images": [{ "url": "https://cdn.example.com/character.png" }],
"videos": [{ "url": "https://cdn.example.com/dance.mp4", "keep_original_sound": true }],
"extra": { "character_orientation": "video" }
}'
各欄位說明:
images:只放一項,就是要做動作的人物。videos:只放一項,作為動作來源。keep_original_sound: true會保留原影片的音軌。動作控制本身不產生聲音。extra.character_orientation:選填,值為image或video。兩個值的差別主要在鏡頭和長度上限。我們用同一張人物圖和同一段帶 180° 轉身的動作影片實測,兩種模式下角色都會跟著影片轉身、背對鏡頭;image維持人物圖的構圖和機位,背景幾乎不動,動作影片最長 10 秒;video讓鏡頭跟著動作影片重新取景、推拉,動作影片最長 30 秒。不傳時 HopBase 預設以video處理。這是動作控制唯一接受的extra鍵,傳其他鍵會回傳 400。resolution:v3 支援720p/1080p/2k/4k,v2.6 支援720p/1080p,同時決定計費級距。duration:不要傳。長度由輸入影片決定,傳了會報duration of model ... is determined by the input media; do not pass duration。
每個素材項只能在 url 和 file_id 中擇一。url 必須是公開網路可直接存取的絕對 http(s) 位址;相對路徑、file://、內網或回送位址、內含帳密的連結,送出時就會被拒絕。送出成功回傳 202,任務 ID 形如 kt57x…。
步驟二:輪詢到任務結束
curl https://api.hop-base.com/v1/video/tasks/kt57xYOUR_TASK_ID \
-H "Authorization: Bearer sk-你的金鑰"
狀態依序是 queued → processing,最後是 completed 或 failed。只有後兩者是終態,其他值都視為仍在執行。任務完成時的回應如下:
{
"id": "kt57xYOUR_TASK_ID",
"status": "completed",
"outputs": ["https://api.hop-base.com/..."],
"usage": { "bucket": "...", "billed_seconds": 10, "cost": 12.0, "cost_usd": 1.765, "currency": "CNY" }
}
outputs 是 api.hop-base.com 上的簽章連結,從任務完成起 24 小時內有效,重複查詢不會延長,請盡快轉存到自己的儲存空間。usage.cost_usd 是這個任務實際扣的金額。Python 最小輪詢範例:
import time, requests
API = "https://api.hop-base.com/v1"
H = {"Authorization": "Bearer sk-你的金鑰"}
task = requests.post(f"{API}/video/generate", headers=H, json={
"model": "kling-v3-motion-control",
"prompt": "照著影片中的舞蹈動作跳",
"resolution": "1080p",
"images": [{"url": "https://cdn.example.com/character.png"}],
"videos": [{"url": "https://cdn.example.com/dance.mp4"}],
"extra": {"character_orientation": "video"},
}).json()
while True:
t = requests.get(f"{API}/video/tasks/{task['id']}", headers=H).json()
if t["status"] == "completed":
print(t["outputs"][0]); break
if t["status"] == "failed":
raise RuntimeError(f"{t['error'].get('code')}: {t['error']['message']}")
time.sleep(5)
可靈的請求裡沒有回呼(webhook)欄位,只能用輪詢追蹤進度。任務建立 2 小時後仍未完成,會被標記為失敗(error.code 為 timeout),不收費。任務送出後無法取消。
動作影片:最容易出錯的一步
送出時,HopBase 只檢查請求結構:素材數量、欄位名稱、URL 格式和解析度。素材本身的格式、大小、解析度、長度和內容,是可靈在任務執行期間才檢查。所以不合規的影片會先被受理,幾分鐘後才失敗。動作控制最常見的失敗是這一條:
error.code: reference_input_invalid
the motion reference video was rejected: no complete human upper body was detected in it;
use a video in which a real person's upper body (head to waist) is clearly visible, then submit again
準備動作影片時請注意:
- 必須是真人入鏡。動物、怪物等非真人角色會被拒絕。
- 整段影片中,從頭到腰都要在畫面內,而且不能被遮住。特寫裁切、桌子或道具擋住軀幹、嚴重的動態模糊,都容易失敗。
- 素材放在伺服器能穩定下載的地方。自己的物件儲存或 CDN 比免費圖床可靠,不少免費圖床會封鎖機房 IP。
- 動作影片有多長,成片就有多長,費用也跟著變。送出前先剪掉不需要的部分。
- 注意長度上限:
character_orientation為image時動作影片不能超過 10 秒,為video(預設)時不能超過 30 秒。超過上限的任務會在送出後約半分鐘失敗,error.code為invalid_request,不收費。實測 12 秒的影片在image模式下被拒,在video模式下正常產出 12 秒成片;31 秒的影片在video模式下也被拒。 - 成片畫面比例跟著人物圖,不跟著動作影片。實測 9:16 直式動作影片搭配一張約 5:6 的人物圖,成片是 864×1040。想要直式成片,就準備直式構圖的人物圖。
image模式的成片可能比素材略短,實測 5 秒素材產出 4.8 秒,以 4 秒計費。
任務失敗不收費,素材不合格只會多花一點時間。
送出階段的錯誤
送出階段的錯誤不會建立任務,也不收費。以下是動作控制特有的錯誤與原文:
| 你送了什麼 | error.message |
|---|---|
| 圖片 0 張或 2 張,或沒有影片 | motion control requires exactly 1 motion video and 1 character image |
人物圖帶了 usage | motion control images[0] does not accept usage; the character image role is fixed by the scene |
影片帶了 reference_type | motion control videos[0] does not accept reference_type; the motion video role is fixed by the scene |
| 朝向不是 image / video | extra.character_orientation must be image or video |
傳了 duration | duration of model kling-v3-motion-control is determined by the input media; do not pass duration |
照 OpenAI 習慣傳了 size 等欄位 | request body does not match the JSON contract: json: unknown field "size" |
如果回傳 402,且 code 為 insufficient_balance,表示可用餘額扣除執行中任務的預估費用後,不足以支付這一筆。任務結束後,預留的金額會自動釋放。完整錯誤表見 可靈影片串接文件。
放進正式產線
常見做法是:每個動作只拍一段乾淨的素材,例如開箱展示、打招呼或一個舞蹈節拍,再用這段素材搭配多張不同的人物圖,換模特兒、換服裝、換品牌角色。每次的成本就是素材秒數乘以單價,很好估算。同一把金鑰只要包含對應群組,也能呼叫可靈文生影片、用 MiniMax 語音合成做配音,以及用對話模型撰寫提示詞。金鑰能用哪些模型,以 GET /v1/models 的回傳為準。
常見問題
動作控制可以指定長度嗎?
不行。必須省略 duration,傳了會回傳 400。成片長度等於動作影片長度,想控制長度和成本,就先把素材剪短。
動作影片最長可以多長?
取決於 extra.character_orientation:image 最長 10 秒,video(預設)最長 30 秒。超過上限的任務會在執行約半分鐘後以 invalid_request 失敗,不收費。需要更長的成片,就把動作拆成幾段分別生成再接起來。
character_orientation 該選 image 還是 video?
兩種模式下角色都會照著影片轉身。想保留人物圖的機位和構圖,例如固定機位的產品展示,用 image,動作影片控制在 10 秒內;想連鏡頭運動一起複製,或素材超過 10 秒,用 video。
動作控制會產生聲音嗎?
不會產生新的聲音。想保留動作影片的原聲,把 videos[0].keep_original_sound 設為 true。不要寫在 extra 裡,extra.keep_original_sound 會被拒絕。
任務送出成功,為什麼幾分鐘後又失敗?
可靈是在任務執行期間才檢查素材。最常見的原因是動作影片裡沒有清楚完整的真人上半身(reference_input_invalid),其次是連結無法下載,或內容審核未通過(input_sensitive)。失敗的任務不收費。
kling-v3-motion-control 和 kling-v2-6-motion-control 有什麼差別?
v3 支援 720p、1080p、2K 和 4K;v2.6 只支援 720p 和 1080p,但單價較低:720p 為 $0.0735/秒,1080p 為 $0.1176/秒,v3 對應是 $0.1324/秒和 $0.1765/秒。兩者的請求格式完全相同。
成片可以下載多久?
從任務完成起 24 小時內。重複查詢拿到的是同一個連結,不會延長;連結過期後存取會回傳 410。
怎麼開通?
在 HopBase 主控台建立金鑰,並選擇包含可靈模型的群組,再呼叫 GET /v1/models 確認清單裡有 kling-v3-motion-control。牌價見價格頁。