独自の文字起こしを使用する

独自の文字起こしから吹き替えプロジェクトを作成し、独自の翻訳を提供します。

ハウツーガイド · ダビングクイックスタートで示すように、 吹き替えプロジェクトの作成に慣れていることを前提としています。

独自の文字起こしと翻訳の提供は、エンタープライズワークスペースでのみ利用できます。利用をご希望の場合は、 営業担当までお問い合わせください。

デフォルトでは、ダビングAPIはソースメディアを文字起こしし、文字起こしを各ターゲット言語へ機械翻訳します。正確な文字起こし(字幕、台本、プロによる翻訳文など)がすでにある場合は、代わりにそれを提供できます。このガイドでは、文字起こしファイルの形式、文字起こしからプロジェクトを作成する方法、言語を追加する際に独自の翻訳を提供する方法について説明します。

文字起こしファイルの形式

文字起こしは、トップレベルに単一のsegments配列を持つJSONファイルです。各セグメントは1つの発話であり、発話テキスト、開始時刻と終了時刻、必要に応じて話者を含みます。

transcript.json
{
"segments": [
{
"external_id": "line_0",
"speaker_id": "speaker_0",
"start_s": 0.0,
"end_s": 14.5,
"text": "With my soft and whispery American accent, I'm the ideal choice for creating ASMR content, meditation guides, or adding an intimate feel to your narrative projects."
}
]
}
フィールド必須説明
textはいセグメント中に話されたテキスト。
start_sはいセグメントの開始時刻(秒)。
end_sはいセグメントの終了時刻(秒)。
speaker_idいいえ同じ話者によるセグメントをグループ化する識別子です。各話者が一貫した音声で吹き替えられます。これを省略したセグメントは、単一のデフォルト話者を共有します。
external_idいいえセグメント用の独自識別子です。128文字以内で、文字起こし内で一意である必要があります。翻訳のキーとして使用され、文字起こしを読み取るたびに返されます。
translationいいえセグメントの翻訳テキストです。target_languageを介して作成される言語ターゲットの初期値として使用されます。いずれかのセグメントに含める場合は、すべてのセグメントに必要です。

セグメントのルール

文字起こしは、プロジェクトの作成時に検証されます。

  • セグメントはstart_s順に並んでいる必要があります。
  • セグメントの長さは0.1~25秒で、end_sはstart_sより大きい必要があります。
  • 同じspeaker_idを持つセグメントは重複できません。ただし、終端で接することは可能です。異なる話者のセグメントは、同時発話を表現するために重複できます。
  • 文字起こしには最大20,000セグメントを含めることができ、ファイルサイズは最大4MiBです。

長いセグメントよりも短いセグメントを推奨します。1秒以上の間がある箇所で文を区切ってください。セグメント境界によって吹き替え音声のソースに対するタイミングが決まるため、正確で自然な区切りの文字起こしほど、より同期した吹き替えになります。

文字起こしからプロジェクトを作成する

プロジェクト作成時に文字起こしファイルを渡します。文字起こしを提供する場合、ソースメディアは自動的に文字起こしされないため、source_languageが必要です。言語はesやfr-CAなどのBCP-47タグで指定します。指定可能なすべての値は対応言語と方言を参照してください。

import os
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs
load_dotenv()
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
with open("transcript.json", "rb") as transcript:
project = elevenlabs.dubbing.project.create(
source_url="https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
source_language="en",
transcript=transcript,
)
print(project.project_id)

吹き替えを行う前に、プロジェクトは引き続きソースメディアを取り込む必要があります。そのため、クイックスタートに示すように、ステータスがreadyになるまでポーリングしてください。セグメントはそのまま使用され、自動文字起こしは実行されません。

独自の翻訳を提供する

言語ターゲットを追加する際は、機械翻訳の代わりに独自の翻訳を使用するため、translationsマップを渡します。このマップは各ソースセグメントのexternal_idをキーとして使用します。指定していない場合は内部セグメントidを使用します。すべてのソースセグメントをちょうど1回ずつカバーする必要があります。

project_id = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3"
language = elevenlabs.dubbing.project.language.create(
project_id,
target_language="fr",
translations={
"line_0": "Avec mon accent américain doux et murmuré, je suis le choix idéal pour créer du contenu ASMR, des guides de méditation, ou pour apporter une touche d'intimité à vos projets narratifs.",
},
)

各言語ターゲットには1回の作成呼び出しが必要なため、吹き替えたい言語ごとにこのリクエストを繰り返してください。translationsマップには、合計で最大4MiBのテキスト、最大20,000エントリを含めることができます。

セグメントにexternal_idがない場合は、ソース文字起こしを読み取って各セグメントの内部idを取得し、代わりにそれらをキーとして使用します。

transcript = elevenlabs.dubbing.project.transcript.get(project_id)
for segment in transcript.segments:
print(segment.id, segment.text)

プロジェクト作成時に翻訳を指定する

単一のターゲット言語の場合、文字起こしファイル内のすべてのセグメントにtranslationを含め、プロジェクト作成時にtarget_languageを渡すことで、個別のtranslationsマップを省略できます。言語ターゲットは翻訳内容とともにキューに追加され、プロジェクトの準備が完了すると生成を開始します。

transcript.json
{
"segments": [
{
"external_id": "line_0",
"speaker_id": "speaker_0",
"start_s": 0.0,
"end_s": 14.5,
"text": "With my soft and whispery American accent, I'm the ideal choice for creating ASMR content, meditation guides, or adding an intimate feel to your narrative projects.",
"translation": "Avec mon accent américain doux et murmuré, je suis le choix idéal pour créer du contenu ASMR, des guides de méditation, ou pour apporter une touche d'intimité à vos projets narratifs."
}
]
}

品質に関する考慮事項

吹き替えの品質は、基となる文字起こしと翻訳の品質に左右されます。セグメントのタイミングとテキストは、吹き替え音声のタイミングと発声に直接使用されるため、不正確なタイミングやテキストは出力品質を低下させます。翻訳はセグメントの時間幅に収まるようにレンダリングされます。原文より大幅に長い、または短い翻訳は吹き替え音声のペースに影響するため、発話の長さが近い翻訳を目指してください。

次のステップ