Dubbing w wielu językach

Dodaj kilka języków docelowych do jednego projektu i pobierz każdy dubbing.

Instrukcja · Zakłada, że utworzyłeś projekt dubbingowy, jak pokazano w krótkim wprowadzeniu do Dubbing API.

Jeden projekt zawiera jeden źródłowy transkrypt, a ty możesz dodać tyle języków docelowych, ile potrzebujesz. Każdy język jest generowany niezależnie oraz ma własny status i wynik, więc tłumaczysz źródło raz i tworzysz z niego każdy dubbing.

Dodawanie kilku języków

Dodaj po jednym języku docelowym dla każdego języka, na który chcesz utworzyć dubbing. Każdy zaczyna ze statusem queued i generuje się, gdy projekt osiągnie status ready.

import os
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs
load_dotenv()
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
project_id = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3"
target_languages = ["es", "fr", "de", "ja"]
languages = [
elevenlabs.dubbing.project.language.create(project_id, target_language=lang)
for lang in target_languages
]

Możesz też dodać pierwszy język podczas tworzenia projektu, przekazując target_language do project.create. Kolejne języki dodaj za pomocą language.create, jak pokazano wyżej.

Języki określa się tagami BCP-47, na przykład es lub fr-CA. Wszystkie obsługiwane wartości znajdziesz na liście obsługiwanych języków i dialektów.

Śledzenie każdego języka niezależnie

Języki generują się równolegle i kończą w różnych momentach. Wyświetl języki projektu, aby sprawdzić status każdego z nich, zamiast odpytywać je pojedynczo.

import time
while True:
result = elevenlabs.dubbing.project.language.list(project_id)
pending = [l for l in result.languages if l.status in ("queued", "processing")]
if not pending:
break
print(f"{len(pending)} language(s) still generating...")
time.sleep(5)

Pobieranie wszystkich ukończonych dubbingów

Gdy język osiągnie status completed, outputs.lossless_audio zawiera podpisany adres URL pobierania. Pobierz każdy z nich, pomijając języki, dla których generowanie się nie powiodło.

import requests
result = elevenlabs.dubbing.project.language.list(project_id)
for language in result.languages:
if language.status != "completed":
print(f"Skipping {language.target_language}: {language.status}")
continue
audio = requests.get(language.outputs.lossless_audio)
with open(f"dubbed_{language.target_language}.wav", "wb") as f:
f.write(audio.content)
print(f"Saved dubbed_{language.target_language}.wav")

Podpisane adresy URL wygasają około godzinę po ich wydaniu. Jeśli pobieranie nie powiedzie się, bo adres URL wygasł, ponownie pobierz język za pomocą language.get, aby uzyskać nowy adres URL.

Jeśli generowanie języka się nie powiedzie, dodaj go ponownie za pomocą language.create w tym samym projekcie, zamiast tworzyć nowy projekt. Projekt i jego transkrypt można wykorzystać ponownie, więc ponownie generowany jest tylko język, dla którego wystąpił błąd.