Dublar em vários idiomas

Adicione vários idiomas de destino a um único projeto e baixe cada dublagem.

Guia prático · Pressupõe que você criou um projeto de dublagem, como mostrado no guia rápido de Dublagem.

Um único projeto contém uma transcrição de origem, e você pode adicionar quantos idiomas de destino precisar. Cada idioma é gerado de forma independente e tem seu próprio status e saída, então você traduz a origem uma vez e produz todas as dublagens a partir dela.

Adicionar vários idiomas

Adicione um idioma de destino para cada idioma para o qual você quer dublar. Cada um começa como queued e começa a ser gerado quando o projeto 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
]

Você também pode colocar o primeiro idioma na fila ao criar o projeto, passando target_language para project.create. Adicione outros idiomas com language.create, como mostrado acima.

Os idiomas são especificados como tags BCP-47, por exemplo, es ou fr-CA. Consulte os idiomas e dialetos compatíveis para ver todos os valores aceitos.

Acompanhar cada idioma de forma independente

Os idiomas são gerados em paralelo e terminam em momentos diferentes. Liste os idiomas do projeto para verificar o status de cada um, em vez de consultá-los um por um.

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)

Baixar todas as dublagens concluídas

Quando um idioma atinge completed, outputs.lossless_audio contém uma URL de download assinada. Baixe cada uma, ignorando qualquer idioma que tenha falhado.

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

As URLs assinadas expiram cerca de uma hora depois de serem emitidas. Se um download falhar porque a URL expirou, busque o idioma novamente com language.get para obter uma URL nova.

Se a geração de um idioma falhar, adicione-o novamente com language.create no mesmo projeto, em vez de criar um novo projeto. O projeto e sua transcrição podem ser reutilizados, então apenas o idioma que falhou é gerado novamente.