配音

通过 Direct API 用 dub_media 在 Morphic Dub 上把视频配音成另一种语言:先报价,跟踪生成任务,并读取结算后的费用。

dub_media 以说话者自己的声音把一段录音配音成另一种语言。在 Morphic Dub(mdl_h2z5a7af7y50)上,它接收最长 10 分钟的视频,并返回同一个视频、同样的时长,每位说话者都以自己的声音重新配音,特写镜头的口型与新语音同步。这是一次耗时很长的生成,每分钟视频最多约 13 分钟,启动时扣除的是估算费用,之后按本次运行的实际消耗结算。

选择模型

模型model_id输入输出
Morphic Dubmdl_h2z5a7af7y50一个视频,最长 10 分钟该视频,已配音并同步口型
ElevenLabs Dubbing见 目录一个音频或视频文件,最长 30 分钟一个音频文件,时长与源文件相同

省略 model_id 时,视频会在你组织的默认配音模型上运行,付费套餐的默认模型是 Morphic Dub。写明 mdl_h2z5a7af7y50 可将其固定。音频文件或超过 10 分钟的视频会被 Morphic Dub 以 422 拒绝并说明限制;请把它们发送给 ElevenLabs Dubbing。

输入

字段必填
media_asset_id是要配音的视频:来自 list_assets 的素材 ID、一次已完成生成的素材,或一个公开的 HTTPS URL(参见 传入你自己的媒体)
target_language是一个 BCP-47 标签,例如 hi、es 或 pt-BR。每次调用一种语言;要面向多个市场,请每种语言各调用一次。Morphic Dub 会用地区变体的主要语言配音,并在响应的 notice 中说明
source_language否所说的语言,以 BCP-47 标签表示。省略则自动检测;当音频嘈杂或混用多种语言时请设置
keyterms否翻译时保留原词的人名、地名和品牌,每项最多 5 个词
voice_mode否original(默认)保留每位说话者自己的声音;assigned 让每个人用声音库中的声音说话。仅限 Morphic Dub
voices否谁用哪个声音说话,最多 20 个条目;需要 voice_mode: "assigned"。见 指定声音
source_transcript_asset_id否你自己的、以所说语言写成的带时间轴语音 SRT,用于代替转写;在 Morphic Dub 上需要 voice_mode: "assigned",在 ElevenLabs Dubbing 上需要 source_language
translation_asset_id否你自己的、以目标语言写成的带时间轴台词 SRT,用于代替翻译;在 Morphic Dub 上需要 voice_mode: "assigned",在 ElevenLabs Dubbing 上只能与 source_transcript_asset_id 一起传入
model_id否mdl_h2z5a7af7y50 表示 Morphic Dub。带有 voice_mode: "assigned"、voices 或任一 SRT 但未指定模型的调用会在 Morphic Dub 上运行;与它们一起指定其他模型会被拒绝
project_id是配音所归属的项目,来自 list_projects

没有音频流的视频,或 target_language 与你设置的 source_language 相同,会在扣费之前被拒绝。

指定声音、自带转写或翻译

默认情况下,每位说话者都保留自己的声音,由 Morphic 转写和翻译语音。使用 voice_mode: "assigned" 时,每个人改用 Morphic 声音库中的声音说话,而你可以交出自己的文本。在 Morphic Dub 上,自带转写或翻译需要 assigned:原声是在一次既不接收演员表也不接收文本的流程中配音的,带 original 发送其中任一项的调用会以 422 被拒绝并指出该字段。

  1. 列出配音可以指定的声音:以 model_id: "mdl_h2z5a7af7y50" 调用 list_voices。它不需要任何权限范围,并返回每个声音的 voice_id。仅限声音库声音;你组织的声音会被拒绝
  2. 对于以面部图片或片段指明的说话者,把素材的 ID 或其 HTTPS URL 作为 speaker_asset_id 传入;否则在 speaker_description 中描述此人(最多 120 个字符,不含 ;、= 或 ")。每个条目二者只能取其一,每位说话者只出现一次;你省略的说话者会获得一个合适的声音库声音
  3. 对于你自己的 SRT,把它的 HTTPS URL 或你素材库中已有的 SRT 文档的 ID(list_assets 会显示它)作为 source_transcript_asset_id(所说语言)或 translation_asset_id(目标语言)传入;URL 会在配音开始前作为文档添加到项目中,与其他 按 URL 传入的文件 一样。这两个字段接收两个不同的文件
{
  "input": {
    "media_asset_id": "01928f4e-…",
    "target_language": "es",
    "voice_mode": "assigned",
    "voices": [
      { "speaker_asset_id": "https://cdn.example.com/host-face.jpg", "voice_id": "0192b1c0-…" },
      { "speaker_description": "the narrator", "voice_id": "0192b1c1-…" }
    ],
    "source_transcript_asset_id": "https://cdn.example.com/interview.en.srt",
    "translation_asset_id": "https://cdn.example.com/interview.es.srt",
    "model_id": "mdl_h2z5a7af7y50",
    "project_id": "01928f4e-…"
  }
}

两种声音模式按相同费率计费。

通过 MCP,这两个 SRT 字段在 ElevenLabs Dubbing 上同样可用,配合 model_name: "ElevenLabs Dubbing" 且不带声音:每位说话者都保留自己的声音;source_language 为必填,因为引擎无法从转写中检测语言;translation_asset_id 只能与 source_transcript_asset_id 一起传入,且每条转写字幕都要有一条对应的翻译字幕。当大多数字幕条以说话者标签开头(例如 Mira: …)时,由标签决定谁在何时说话,每位说话者一个声音。ElevenLabs Dubbing 没有 model_id,因此通过 Direct API 带自带文本的配音会在 Morphic Dub 上运行。

先报价

配音按源文件的时长、每种语言计价。plan_media 可以在不启动调用的情况下给出价格;在 Morphic Dub 上,报价就是启动时将扣除的估算费用,结算后可能有所变动。

{
  "input": {
    "steps": [
      { "id": "dub", "tool_name": "dub_media", "arguments_json": "{\"media_asset_id\":\"01928f4e-…\",\"target_language\":\"hi\",\"model_id\":\"mdl_h2z5a7af7y50\"}" }
    ]
  }
}

完整调用见 先报价再消费。

启动配音

curl -s https://mcp.morphic.com/v1/direct/tools/dub_media \
  -H "Authorization: Bearer $MORPHIC_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: dub-interview-hi-1" \
  -d '{
        "input": {
          "media_asset_id": "https://cdn.example.com/interview.mp4",
          "target_language": "hi",
          "keyterms": ["Arjun", "Meera"],
          "model_id": "mdl_h2z5a7af7y50",
          "project_id": "01928f4e-…"
        }
      }'

响应为 202 Accepted:

{
  "result": {
    "generation_id": "0192a7b3-a1c4-7e02-8f9d-1a2b3c4d5e6f",
    "status": "queued",
    "model_id": "mdl_h2z5a7af7y50",
    "estimated_credits": 580,
    "credits_settle_on_output_duration": true
  },
  "billing": { "credits_charged": 580, "credits_are_final": false }
}

estimated_credits 是现在扣除的估算费用;credits_settle_on_output_duration: true 表示它之后会被结算。

跟踪生成任务

Morphic Dub 上的一次配音每分钟视频最多需要约 13 分钟,而短片段的用时会超过这一比例,因为固定阶段无论时长如何花费都相同:一段 50 秒的片段用了 17 分钟。不要一开始就轮询。先等待约片段时长的 13 倍,然后用长等待读取,并按每次读取返回的 poll_after_seconds 逐步退避。

sleep 660   # a 50 s clip: about 13 times its length
curl -s "https://mcp.morphic.com/v1/direct/generations/$GENERATION_ID?wait=45" \
  -H "Authorization: Bearer $MORPHIC_API_KEY"

Webhook 可以让你省去这个循环:在调用体中传入已注册的 webhook_id,配音进入最终状态时 Morphic 会调用你的端点。以 webhook 作为主要信号,并偶尔轮询作为兜底。

当生成任务变为 succeeded 时,它的 assets 中就是配好音的视频。当配音实际运行的输入与给定的不同时(例如地区变体用其主要语言配音),响应的 notice 会被设置。

费用

Morphic Dub 按源文件的时长、以你组织的 API 费率、每种语言计费:

  1. 启动时,扣除估算费用:estimated_credits,也就是 billing.credits_charged
  2. 配音完成时,费用按本次运行的实际消耗结算。结算金额可能低于或高于估算,但绝不会超过估算的三倍;超出的部分由 Morphic 承担
  3. 生成任务进入最终状态后,billing.credits_charged 是结算后的净金额,credits_are_final 为 true。失败或被取消的配音会全额退款

进入最终状态后再读取一次生成任务,即可获得结算金额;webhook 只会在进入最终状态后发送。账目明细见 积分与用量。


如果您遇到任何问题或有任何疑问,欢迎随时联系我们。我们很乐意提供帮助。请发送邮件至 support@morphic.com.

本页内容