Volcengine 视频对口型
本页由 ModelFold 文档站根据上游官方 OpenAPI 文档同步生成。接口路径、参数、示例与官方保持一致;品牌与 API 域名已替换为 ModelFold。
接口
POST /jobs/createTask
完整 URL: https://ai.modelfold.online/v1/jobs/createTask
鉴权:所有请求都需要
Authorization: Bearer <API_KEY>请求头。
创建任务
调用该接口可创建一个新的视频口型同步任务。上传一段视频和一段音频文件,模型将驱动视频中的口型与目标音频匹配。
- 查询任务详情 — 提交任务后,可通过统一查询接口查看任务进度并获取生成结果
TIP
生产环境建议优先使用 callBackUrl 参数接收任务完成通知,而不是持续轮询任务状态接口。
文件上传
TIP
调用该接口前需要先上传文件?请参阅 文件上传 API 快速入门。
输出规格
生成的视频将以 MP4 格式返回,帧率为 25 fps。最终输出视频时长以音频时长为准:如果原始视频长于音频,视频将被截断;如果原始视频短于音频,视频将循环播放。
相关资源
请求参数
请求体 (application/json)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 用于视频口型同步的模型名称。必填字段。 - 该端点必须使用 volcengine/video-to-video-lip-sync 模型 默认值:"volcengine/video-to-video-lip-sync"。 可选值:volcengine/video-to-video-lip-sync。 示例:volcengine/video-to-video-lip-sync。 |
input | object | 是 | 视频口型同步任务的输入参数。 |
input.mode | string | 是 | 口型同步生成的服务模式。 - lite:适用于单人正面视频,处理速度更快。- basic:适用于单人复杂场景,支持场景分割和说话人识别。 可选值:lite / basic。 示例:lite。 |
input.video_url | string | 是 | 视频素材 URL。支持分辨率:360p–1080p。超过 1080p 的视频将自动压缩至 1080p,小于 360p 的视频暂不支持。支持格式:MOV、MP4、HDR、MKV。推荐编码:H.264。其他格式或编码可能会被转码。最大文件大小:500 MB。码率:1–30 Mbps。帧率:24–60 fps。 |
input.audio_url | string | 是 | 目标纯人声音频 URL;用于驱动视频口型运动。lite模式音频时长>1s&<=240s,basic模式音频时长>1s&<=210s。支持的文件类型:audio/mpeg、audio/wav、audio/x-wav、audio/aac、audio/mp4、audio/ogg。最大文件大小:10MB。 |
input.separate_vocal | boolean | 否 | 是否启用人声分离以抑制背景噪音。默认值:false。 默认值:false。 示例:false。 |
input.open_scenedet | boolean | 否 | 是否启用场景分割和说话人识别。仅在 Basic 模式下支持。默认值:false。 默认值:false。 示例:false。 |
input.align_audio | boolean | 否 | Lite 模式下支持。当音频时长超过视频时长时,是否循环播放视频。默认值:true。 默认值:true。 示例:true。 |
input.align_audio_reverse | boolean | 否 | Lite 模式下支持。是否倒序循环播放视频。需要 align_audio 设置为 true。默认值:false。 默认值:false。 示例:false。 |
input.templ_start_seconds | number | 否 | Lite 模式下支持。模板视频的起始时间,单位为秒。默认值:0。 默认值:0。 示例:0。 |
callBackUrl | string | 否 | 回调 URL。任务完成后,ModelFold 会将结果发送到该业务回调地址。回调签名校验见 Webhook 签名校验指南。 |
请求示例
bash
curl -X POST "https://ai.modelfold.online/v1/jobs/createTask" \
-H "Authorization: Bearer $MODELFOLD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "volcengine/video-to-video-lip-sync",
"input": {
"mode": "lite",
"video_url": "https://your-domain.com/video/example.mp4",
"audio_url": "https://your-domain.com/audio/speech.mp3",
"separate_vocal": false,
"open_scenedet": false,
"align_audio": true,
"align_audio_reverse": false,
"templ_start_seconds": 0
},
"callBackUrl": "https://your-domain.com/api/callback"
}'json
{
"model": "volcengine/video-to-video-lip-sync",
"input": {
"mode": "lite",
"video_url": "https://your-domain.com/video/example.mp4",
"audio_url": "https://your-domain.com/audio/speech.mp3",
"separate_vocal": false,
"open_scenedet": false,
"align_audio": true,
"align_audio_reverse": false,
"templ_start_seconds": 0
},
"callBackUrl": "https://your-domain.com/api/callback"
}响应
200 — 请求成功
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | integer | 是 | 请求状态码。请求失败时 HTTP 状态仍为 200,请始终以本字段判断:200 表示成功,其他值均表示失败,原因见 msg。常见值:401 API key 无效或缺失;402 积分不足;429 超出频率限制;422 或 500 请求未能处理(请先查看 msg、检查参数,再决定是否重试)。 可选值:200 / 401 / 402 / 404 / 422 / 429 / 433 / 455 / 500 / 501 / 505。 示例:200。 |
msg | string | 是 | 响应消息,失败时的错误描述 |
data | object | 是 | — |
data.taskId | string | 是 | 可以使用任务 ID 与“获取任务详细信息”端点一起查询任务状态。 |
json
{
"code": 200,
"msg": "success",
"data": {
"taskId": "task_volcengine-video-to-video-lip-sync_1234567890"
}
}回调
videoTaskCompleted
回调地址:{request.body#/callBackUrl}(即请求体里的 callBackUrl)。
当 volcengine/video-to-video-lip-sync 任务成功或失败时,系统会发送此回调。
回调体参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | integer | 是 | 统一回调状态码:成功为 200,失败为 501。 可选值:200 / 501。 示例:200。 |
msg | string | 是 | 统一回调消息。 可选值:Playground task completed successfully. / Playground task failed.。 示例:Playground task completed successfully.。 |
data | object | 是 | — |
data.taskId | string | 是 | 任务唯一标识符。 |
data.model | string | 是 | 任务使用的模型。 可选值:volcengine/video-to-video-lip-sync。 示例:volcengine/video-to-video-lip-sync。 |
data.state | string | 是 | 任务最终状态。 可选值:success / fail。 示例:success。 |
data.param | string | 是 | 包含已提交任务参数的 JSON 字符串。 |
data.resultJson | string | 否 | 任务成功时,包含 resultUrls、firstFrameUrl、lastFrameUrl 或 resultObject 的 JSON 字符串。仅在 state 为 success 时出现。 |
data.failCode | string | 否 | 失败码,数字字符串,如 "400"、"500"。仅在 state 为 fail 时出现。 |
data.failMsg | string | 否 | 失败原因,仅在 state 为 fail 时出现。 |
data.costTime | integer | 否 | 处理耗时(秒),成功和失败回调都会返回。 |
data.completeTime | integer | 否 | 任务完成时间戳。 |
data.createTime | integer | 否 | 任务创建时间戳。 |
data.updateTime | integer | 否 | 完成时间请以 completeTime 为准;updateTime 可能与 createTime 相同。 |
data.creditsConsumed | number | 否 | 本任务消耗的积分;失败任务为 0。 |
任务成功完成
json
{
"code": 200,
"msg": "Playground task completed successfully.",
"data": {
"taskId": "task_example_video_webhook_001",
"model": "volcengine/video-to-video-lip-sync",
"state": "success",
"param": "{\"input\":\"{\\\"mode\\\":\\\"lite\\\",\\\"video_url\\\":\\\"https://example.com/input-video.mp4\\\",\\\"audio_url\\\":\\\"https://example.com/input-audio.mp3\\\",\\\"separate_vocal\\\":false,\\\"open_scenedet\\\":false,\\\"align_audio\\\":true,\\\"align_audio_reverse\\\":false,\\\"templ_start_seconds\\\":0}\",\"callBackUrl\":\"https://example.com/callback\",\"model\":\"volcengine/video-to-video-lip-sync\"}",
"resultJson": "{\"resultUrls\":[\"https://example.com/generated-video.mp4\"]}",
"costTime": 12,
"completeTime": 1234567890,
"createTime": 1234560000,
"updateTime": 1234567890,
"creditsConsumed": 1.23
}
}任务失败
json
{
"code": 501,
"msg": "Playground task failed.",
"data": {
"taskId": "task_example_video_webhook_001",
"model": "volcengine/video-to-video-lip-sync",
"state": "fail",
"param": "{\"input\":\"{\\\"mode\\\":\\\"lite\\\",\\\"video_url\\\":\\\"https://example.com/input-video.mp4\\\",\\\"audio_url\\\":\\\"https://example.com/input-audio.mp3\\\",\\\"separate_vocal\\\":false,\\\"open_scenedet\\\":false,\\\"align_audio\\\":true,\\\"align_audio_reverse\\\":false,\\\"templ_start_seconds\\\":0}\",\"callBackUrl\":\"https://example.com/callback\",\"model\":\"volcengine/video-to-video-lip-sync\"}",
"failCode": "400",
"failMsg": "<error detail>",
"costTime": 12,
"creditsConsumed": 0
}
}