配音为多种语言

为单个项目添加多种目标语言,并下载每种配音。

操作指南 · 假设你已创建配音项目,如配音 快速入门所示。

单个项目包含一份源转录文本,你可以按需添加任意数量的语言目标。每种语言独立生成,各自拥有状态和输出,因此只需翻译一次源文本,即可生成所有配音。

添加多种语言

为每种要配音的语言添加一个语言目标。每个目标初始状态均为 queued,并会在项目状态为 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
]

还可以在创建项目时通过向 project.create 传入 target_language 来将第一种语言加入队列。按照上文所示,使用 language.create 添加后续语言。

语言使用 BCP-47 标签指定,例如 es 或 fr-CA。有关所有可接受值,请参阅支持的语言和方言。

独立跟踪每种语言

语言会并行生成,并在不同时间完成。请列出项目的语言以查看每种语言的状态,而不是逐一轮询。

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)

下载所有已完成的配音

语言状态变为 completed 后,outputs.lossless_audio 会包含签名下载 URL。下载每个配音,同时跳过生成失败的语言。

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

签名 URL 在签发约 1 小时后过期。如果因 URL 过期导致下载失败,请再次使用 language.get 获取该语言,以取得新的 URL。

如果某种语言生成失败,请在同一项目中使用 language.create 再次添加该语言, 而不是创建新项目。项目及其转录文本可重复使用,因此只会重新生成失败的 语言。