吹き替え
Direct API の dub_media で動画を Morphic Dub で別の言語に吹き替え、先に見積もりを取り、生成を追跡し、精算後の請求額を読み取ります。
dub_media は、1 つの録音を話者本人の声のまま別の言語に吹き替えます。Morphic Dub(mdl_h2z5a7af7y50)では最大 10 分の動画を受け取り、同じ長さの同じ動画を返します。各話者は本人の声で話し直され、クローズアップの口の動きは新しい音声に合わせられます。動画 1 分あたり最大およそ 13 分かかる長い生成で、請求額は開始時の見積もりが実行時の消費額に精算されます。
モデルを選ぶ
| モデル | model_id | 入力 | 出力 |
|---|---|---|---|
| Morphic Dub | mdl_h2z5a7af7y50 | 動画 1 本、最大 10 分 | 吹き替えて口の動きを合わせた動画 |
| ElevenLabs Dubbing | カタログ を参照 | 音声または動画ファイル 1 つ、最大 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 タグ 1 つ。1 回の呼び出しにつき 1 言語で、複数の市場向けには言語ごとに 1 回ずつ呼び出します。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 が必要です。元の声はキャストもテキストも受け取らない 1 回のパスで吹き替えられるため、original でどちらかを送った呼び出しは、そのフィールド名を示す 422 で拒否されます。
- 吹き替えで割り当てられる声を一覧します:
model_id: "mdl_h2z5a7af7y50"を付けたlist_voices。スコープは不要で、各声のvoice_idを返します。カタログの声のみで、組織の音声は拒否されます - 顔画像やクリップで指定する話者には、そのアセットの ID か HTTPS URL を
speaker_asset_idに渡します。それ以外はspeaker_descriptionで説明します(120 文字まで。;、=、"は使えません)。エントリごとにどちらか一方だけで、各話者は 1 回だけです。省いた話者にはふさわしいカタログの声が付きます - 自分の SRT は、その HTTPS URL か、ライブラリにすでにある SRT ドキュメントの ID(
list_assetsに表示されます)をsource_transcript_asset_id(話されている言語)またはtranslation_asset_id(対象言語)に渡します。URL は、ほかの URL によるファイル と同じく、吹き替えの開始前にドキュメントとしてプロジェクトに追加されます。2 つのフィールドには別々の 2 つのファイルを渡します
{
"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 では、2 つの SRT フィールドは model_name: "ElevenLabs Dubbing" を付け、声を指定せずに ElevenLabs Dubbing でも使えます。各話者は本人の声を保ちます。エンジンは文字起こしから言語を検出できないため source_language が必須で、translation_asset_id は source_transcript_asset_id と並べてのみ渡せ、文字起こしの各キューに対応する翻訳のキューが必要です。ほとんどのキューが Mira: … のような話者ラベルで始まる場合は、そのラベルで誰がいつ話すかが決まり、話者ごとに 1 つの声になります。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 を使えばループは不要です。呼び出しのボディに登録済みの webhook_id を渡すと、吹き替えが最終状態になったときに Morphic がエンドポイントを呼び出します。Webhook を主な通知手段とし、ときどきのポーリングを安全策として使ってください。
生成が succeeded になると、その assets に吹き替えた動画が入ります。レスポンスの notice は、地域別のバリアントをその主要な言語で吹き替えた場合など、指定した入力とは別の入力で吹き替えが実行されたときに設定されます。
料金
Morphic Dub は、組織の API レートで元の長さに応じて、言語ごとに課金されます:
- 開始時に見積もりが請求されます。
estimated_creditsで、billing.credits_chargedにも示されます - 吹き替えが完了すると、請求額は実行時に実際に消費した分に精算されます。精算後の金額は見積もりを下回ることも上回ることもありますが、見積もりの 3 倍を超えることはなく、それを超えた分は Morphic が負担します
- 生成が最終状態になると、
billing.credits_chargedは精算後の正味の金額になり、credits_are_finalはtrueになります。失敗またはキャンセルされた吹き替えは全額返金されます
精算後の金額は、生成が最終状態になってからもう一度読み取ってください。Webhook は最終状態になって初めて送信されます。台帳については クレジットと使用量 を参照してください。
何かお困りのことやご質問がありましたら、お気軽にご連絡ください。喜んでお手伝いします。こちらまでご連絡ください support@morphic.com.