Doblar en varios idiomas

Añade varios idiomas de destino a un mismo proyecto y descarga cada doblaje.

Guía práctica · Da por hecho que has creado un proyecto de doblaje, como se muestra en la guía de inicio rápido de Doblaje.

Un mismo proyecto contiene una transcripción de origen y puedes añadir tantos idiomas de destino como necesites. Cada idioma se genera de forma independiente y tiene su propio estado y resultado, así que traduces el origen una vez y generas todos los doblajes a partir de él.

Añadir varios idiomas

Añade un idioma de destino por cada idioma al que quieras doblar. Cada uno empieza en queued y comienza a generarse cuando el proyecto está 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
]

También puedes poner el primer idioma en cola al crear el proyecto pasando target_language a project.create. Añade los demás idiomas con language.create, como se muestra arriba.

Los idiomas se especifican como etiquetas BCP-47, por ejemplo es o fr-CA. Consulta los idiomas y dialectos compatibles para ver todos los valores admitidos.

Seguir cada idioma de forma independiente

Los idiomas se generan en paralelo y terminan en momentos distintos. Lista los idiomas del proyecto para comprobar el estado de cada uno, en lugar de consultarlos uno por uno.

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)

Descargar todos los doblajes completados

Cuando un idioma alcanza completed, su outputs.lossless_audio contiene una URL de descarga firmada. Descarga cada uno y omite cualquier idioma que haya fallado.

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")

Las URL firmadas caducan aproximadamente una hora después de emitirse. Si una descarga falla porque la URL ha caducado, recupera de nuevo el idioma con language.get para obtener una URL nueva.

Si un idioma no se genera correctamente, añádelo de nuevo con language.create en el mismo proyecto, en lugar de crear uno nuevo. El proyecto y su transcripción se pueden reutilizar, por lo que solo se vuelve a generar el idioma que ha fallado.