OmniHuman 2.0 Audio to Video API
bytedance/omnihuman-2.0/audio-to-videoOmniHuman 2.0 Audio to Video 将一张角色图片与 4–300 秒语音或音乐转化为 720p 视频,口型、表情和手势跟随音频。图片保留角色外观与构图,可选提示词补充运镜和动作。
拖拽文件、粘贴剪贴板素材,或输入 URL。 必填,1 张 JPEG、PNG 或 WebP 角色图片。
1/1 个素材
拖拽文件、粘贴剪贴板素材,或输入 URL。 必填,1 个 WAV 或 MP3,4–300 秒,不超过 15 MB。
1/1 个素材
REST API
快速开始
三步完成首个 OmniHuman 2.0 请求,示例发送图片、语音和一句运镜提示。
连接 Vidgo API
创建 API Key,将它安全保存在服务端,并通过 Authorization 请求头以 Bearer Token 发送。
- 接口地址
- POST
https://api.vidgo.ai/api/generate/submit - 认证方式
- Authorization: Bearer VIDGO_API_KEY
提交一个生成任务
使用 1 张图片和 1 个驱动音频运行短示例,提示词可选。
curl --request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "bytedance/omnihuman-2.0/audio-to-video",
"input": {
"image_urls": [
"https://cdn.vidgo.ai/apis/models/bytedance/omnihuman-2.0/audio-to-video/v1/01/input-01.png"
],
"audio_url": "https://cdn.vidgo.ai/apis/models/bytedance/omnihuman-2.0/audio-to-video/v1/02/input-02.mp3",
"prompt": "She speaks warmly to the camera, nodding and gesturing with her right hand. The camera slowly pushes in from a medium shot to a close-up."
}
}'等待并获取结果
使用返回的 task_id 查询同一个任务,直到状态变为 finished 或 failed;成功后读取 data.files[].file_url。
查询状态
GET https://api.vidgo.ai/api/generate/status/{task_id}当状态为 not_started 或 running 时,建议约每 2 秒轮询一次;到达 finished 或 failed 后停止。成功时从 data.files[].file_url 读取视频地址;长任务可逐步延长间隔,也可在提交请求顶层添加 callback_url 异步接收最终结果。
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "8TBISH3H90QQBZ5X",
"status": "not_started",
"created_time": "2026-11-05T07:04:47"
}
}{
"code": 200,
"data": {
"task_id": "8TBISH3H90QQBZ5X",
"status": "finished",
"files": [
{
"file_url": "https://cdn.vidgo.ai/apis/models/bytedance/omnihuman-2.0/audio-to-video/v2/01/output-01.mp4",
"file_type": "video"
}
],
"created_time": "2026-11-05T07:04:47",
"error_message": null,
"progress": 100
}
}完整可运行示例
理解上面的三步流程后再展开。这里把提交、轮询、终态处理和结果读取合并在一个脚本中。
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "bytedance/omnihuman-2.0/audio-to-video",
"input": {
"image_urls": [
"https://cdn.vidgo.ai/apis/models/bytedance/omnihuman-2.0/audio-to-video/v1/01/input-01.png"
],
"audio_url": "https://cdn.vidgo.ai/apis/models/bytedance/omnihuman-2.0/audio-to-video/v1/02/input-02.mp3",
"prompt": "She speaks warmly to the camera, nodding and gesturing with her right hand. The camera slowly pushes in from a medium shot to a close-up."
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
while true; do
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep 2
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
done请求参数
model 和 callback_url 位于请求根层;生成参数位于 input。
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| model | string | 是 | — | 固定为 bytedance/omnihuman-2.0/audio-to-video。 |
| callback_url | string (URL) | 否 | — | 用于接收任务完成通知的公开 HTTP(S) 地址。 |
| input | object | 是 | — | 生成参数:image_urls 中 1 张图片、audio_url 中 1 个驱动音频,可选 prompt;视频长度跟随音频。 |
| input.image_urls | string[] | 是 | — | 1 个公开 HTTP(S) 角色或人像图片地址。 |
| input.audio_url | string | 是 | — | 公开 HTTP(S) 的 WAV 或 MP3 地址,不超过 15 MB,时长 4–300 秒,由服务端读取时长。 |
| input.prompt | string | 否 | — | 可选,用于描述运镜、动作和场景元素。 |
响应字段
提交响应会立即返回任务标识;随着任务推进,状态响应会补充进度、输出文件或失败信息。
| 字段 | 类型 | 说明 |
|---|---|---|
| code | integer | 应用层结果码,成功响应使用 0 或 200。 |
| message | string | 存在时返回便于阅读的响应或错误信息。 |
| data.task_id | string | 任务标识,用于拼接状态查询地址。 |
| data.status | string | 当前状态:not_started、running、finished 或 failed。 |
| data.created_time | string | 任务创建时间,采用日期时间格式。 |
| data.progress | number | 上游提供进度时返回的完成百分比。 |
| data.files[] | array | 任务成功后返回的生成文件列表。 |
| data.files[].file_url | string | 生成视频的公开访问地址。 |
| data.files[].file_type | string | 生成文件类型,例如 video。 |
| data.files[].watermark_url | string | null | 存在水印版本时返回对应地址。 |
| data.error_message | string | null | status 为 failed 时的失败详情。 |
任务生命周期
not_started 与 running 属于非终态;finished 与 failed 是两种终态,收到任意终态后都应停止轮询。
not_started任务已被接受,正在等待排队开始。
running视频正在生成中,请保持轮询查询。
finished任务完成,从 data.files[].file_url 读取视频地址。
failed生成失败,读取 data.error_message 了解原因并停止轮询。
轮询与错误处理
- 认证失败401 表示 Bearer API Key 缺失或无效,请在控制台确认密钥后重试。
- 参数校验400 表示参数不合法。请确认 image_urls 只有 1 个地址,audio_url 为可访问的 WAV 或 MP3,时长 4–300 秒、不超过 15 MB。
- 轮询间隔建议每 2 秒查询一次状态,长任务可按指数退避逐步延长间隔至 5 秒。
- 终态处理仅在 not_started 或 running 时轮询;收到 finished 或 failed 立即终止。
- 回调方式提供 callback_url 可以在生成完成时自动接收推送,无需持续轮询。
模型规格
| 规格 | 取值 | 说明 |
|---|---|---|
| 模型 | bytedance/omnihuman-2.0/audio-to-video | OmniHuman 2.0 异步音频驱动视频的模型标识。 |
| 输入方式 | 1 张图 + 1 段音频 + 可选提示词 | 音频驱动口型、表情和手势。 |
| 音频 | WAV 或 MP3,4–300 秒,≤15 MB | 视频长度跟随音频。 |
| 分辨率 | 720p | 构图跟随输入图片。 |
| 计费 | 预扣:音频秒数 × 21 积分 | 完成后按最终费用结算,差额退还。 |
相关模型
OmniHuman 2.0 Audio to Video API 常见问题
OmniHuman 2.0 Audio to Video API 是什么?
OmniHuman 2.0 Audio to Video 是字节跳动用于从单张图片进行音频驱动视频生成的模型。它把一张角色图片和 4–300 秒语音或音乐转化为 720p 视频,口型、表情和手势跟随音频。图片确定角色外观与构图,可选提示词补充运镜、动作和场景元素。你可以通过 API 进行程序化调用,也可以在上方体验区直接在线试用。
OmniHuman 2.0 Audio to Video 的音频最长多长?
4–300 秒,格式为 WAV 或 MP3,不超过 15 MB。视频长度跟随音频,无需单独设置时长。
OmniHuman 2.0 Audio to Video 如何扣除积分?
提交时按音频秒数 × 21 从余额预扣积分,例如 60 秒音频预扣 1,260 积分。任务完成后,预扣按生成视频的最终费用结算,差额退还。
OmniHuman 2.0 Audio to Video 的提示词控制什么?
可选提示词用于引导运镜、动作和新增场景元素;口型、情绪和节奏来自音频。
OmniHuman 2.0 Audio to Video 能驱动动物或卡通角色吗?
可以。除真人外,还支持动物、卡通与动漫角色、3D 形象、风格化画面以及多人图片。
OmniHuman 2.0 Audio to Video 输出什么分辨率?
输出 720p 视频,构图跟随输入图片,可先把图片裁成需要发布的形状。
什么样的音频能让 OmniHuman 2.0 口型最好?
清晰、背景噪声少、没有长时间静音的语音或人声。上传前把文件剪到需要的部分。
OmniHuman 2.0 Audio to Video 能唱歌吗?
可以。歌曲或人声音轨会驱动角色演唱,表情和肢体动作随音乐节奏变化。















