创建对口型任务
POST /v1/videos/advanced-lip-sync:让视频中的人脸对上指定音频的口型,异步
POST/v1/videos/advanced-lip-sync
让视频中的人脸对上指定音频的口型。
| 项 | 值 |
|---|---|
| 模式 | 异步(提交 → 轮询 GET /v1/videos/advanced-lip-sync/{id},见查询对口型任务) |
| 计费 | 按输出视频实际时长计费,5 秒为单位向上取整,提交时按 60 秒预冻结 |
快速开始
curl https://api.vibelab.me/v1/videos/advanced-lip-sync \
-H "Authorization: Bearer $LOOPTOKEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"session_id": "850508686686064678",
"face_choose": [
{
"face_id": "0",
"sound_file": "https://example.com/speech.mp3",
"sound_start_time": 0,
"sound_end_time": 3000,
"sound_insert_time": 1000,
"sound_volume": 1,
"original_audio_volume": 1
}
]
}'响应示例:
{
"code": 0,
"message": "SUCCEED",
"request_id": "6a0d571e-d36c-4811-bb2b-698c94b19a8c",
"data": {
"task_id": "893605946402811985",
"task_status": "submitted",
"task_info": {
"external_task_id": "your-id"
},
"created_at": 1722769557708,
"updated_at": 1722769557708
}
}请求参数
请求头
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
Authorization | string | 是 | - | Bearer $LOOPTOKEN_API_KEY |
Content-Type | string | 是 | - | application/json |
请求体
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
session_id | string | 是 | - | 人脸识别返回的会话,只能使用自己识别得到的会话 |
face_choose | array | 是 | - | 指定人脸,目前仅支持 1 张 |
face_choose[].face_id | string | 是 | - | 人脸 ID |
face_choose[].sound_file | string | 是 | - | 音频 URL 或 Base64;mp3/wav/m4a/aac,不超过 5MB,2–60 秒 |
face_choose[].sound_start_time | integer | 是 | - | 音频裁剪起点(毫秒) |
face_choose[].sound_end_time | integer | 是 | - | 音频裁剪终点(毫秒),裁剪后不短于 2 秒 |
face_choose[].sound_insert_time | integer | 是 | - | 裁剪后音频插入视频的时间(毫秒),与该人脸可对口型区间至少重合 2 秒 |
face_choose[].sound_volume | number | 否 | 1 | 音频音量,0–2 |
face_choose[].original_audio_volume | number | 否 | 1 | 原视频音量,0–2 |
watermark_info.enabled | boolean | 否 | false | 是否同时生成含水印结果 |
callback_url | string | 否 | - | HTTPS 回调地址 |
external_task_id | string | 否 | - | 自定义任务 ID,同一账号下不可重复 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
code | integer | 0 表示成功,其余见错误 |
message | string | 错误信息 |
request_id | string | 请求 ID,排查问题时提供 |
data.task_id | string | 任务 ID |
data.task_status | string | submitted、processing、succeed、failed |
data.task_info.external_task_id | string | 创建时传入的自定义任务 ID |
data.created_at、data.updated_at | integer | Unix 毫秒时间戳 |
计费
按输出视频实际时长计费,不足 5 秒按 5 秒、向上取整到 5 秒的整数倍。提交时按 60 秒预冻结额度,任务结束后多退少补;失败全额退回。
错误
本页参数校验返回 400 / 1201,message 原文如下:
| HTTP | code | 触发场景 | 处理 |
|---|---|---|---|
| 400 | 1201 | session_id is required and must be a string | 传人脸识别返回的 session_id |
| 400 | 1201 | session_id not found | 会话不存在或不属于当前账号,重新初始化/识别后再用 |
| 400 | 1201 | face_choose must contain exactly one face | face_choose 恰好 1 项 |
| 400 | 1201 | face_id is required and must be a string / sound_file is required and must be a string | 补齐 face_choose[] 必填字段 |
| 400 | 1201 | audio_id is not supported, use sound_file | 改传 sound_file |
| 400 | 1201 | sound_start_time, sound_end_time and sound_insert_time are required numbers | 三个时间字段都传数字(毫秒) |
| 400 | 1201 | trimmed sound must be at least 2000 ms and start with non-negative times | 裁剪后不短于 2000 毫秒,起点和插入时间不为负 |
通用错误(鉴权、余额、并发、回调地址、上游错误)见 Kling 错误。
注意事项
- 前置步骤 → 先调用人脸识别得到
session_id和face_id。 - 与官方的差别 → 不支持
face_choose[].audio_id(它指向可灵账号里的历史作品,不属于你的账号),请改用sound_file;响应不返回final_unit_deduction、final_balance_deduction;callback_url由 LoopToken 投递,external_task_id在你的账号范围内去重。