더빙

Direct API에서 Morphic Dub의 dub_media로 동영상을 다른 언어로 더빙하고, 먼저 견적을 받고, 생성 작업을 추적하고, 정산된 청구 금액을 읽는 방법.

dub_media는 녹음 하나를 화자 각자의 목소리로 다른 언어로 더빙합니다. Morphic Dub(mdl_h2z5a7af7y50)에서는 최대 10분 길이의 동영상을 받아, 화자마다 자신의 목소리로 다시 말하고 클로즈업의 입 모양을 새 음성에 맞춘, 같은 길이의 같은 동영상을 반환합니다. 동영상 1분당 최대 약 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예hi, es, pt-BR 같은 BCP-47 태그 하나. 호출 한 번에 언어 하나이며, 여러 시장이 필요하면 언어마다 한 번씩 호출하세요. 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아니요Morphic Dub은 mdl_h2z5a7af7y50. 모델을 지정하지 않고 voice_mode: "assigned", voices 또는 두 SRT 중 하나를 담은 호출은 Morphic Dub에서 실행되며, 이들과 함께 다른 모델을 지정하면 거부됩니다
project_id예더빙이 저장될 프로젝트. list_projects에서 확인

오디오 스트림이 없는 동영상이나, 지정한 source_language와 같은 target_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의 더빙은 동영상 1분당 최대 약 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_id를 넣으면 더빙이 최종 상태가 될 때 Morphic이 엔드포인트를 호출합니다. 웹훅을 주 신호로 쓰고, 가끔 하는 폴링을 안전망으로 두세요.

생성 작업이 succeeded가 되면 assets에 더빙된 동영상이 담깁니다. 응답의 notice는 지역별 버전을 그 주 언어로 더빙한 경우처럼, 더빙이 지정한 것과 다른 입력으로 실행되었을 때 설정됩니다.

비용

Morphic Dub은 조직의 API 요금으로 원본 길이를 기준으로 언어마다 청구됩니다:

  1. 시작 시 예상 금액이 청구됩니다: estimated_credits, 즉 billing.credits_charged
  2. 더빙이 끝나면 청구 금액이 실행에 실제로 든 비용으로 정산됩니다. 정산 금액은 예상 금액보다 적거나 많을 수 있지만, 예상 금액의 세 배를 넘지는 않습니다. 그 이상은 Morphic이 부담합니다
  3. 생성 작업이 최종 상태가 되면 billing.credits_charged가 정산된 순 금액이고 credits_are_final이 true입니다. 실패하거나 취소된 더빙은 전액 환불됩니다

정산된 금액은 최종 상태가 된 뒤 생성 작업을 다시 조회해 확인하세요. 웹훅은 최종 상태가 된 뒤에만 전송됩니다. 원장은 크레딧과 사용량을 참조하세요.


문제가 있거나 궁금한 점이 있으면 언제든지 연락해 주세요. 기꺼이 도와드리겠습니다. 다음 주소로 이메일을 보내 주세요: support@morphic.com.

이 페이지의 내용