优化并重新生成配音

编辑源转录文本和翻译,然后重新生成某种语言的音频。

操作指南 · 假设你已创建配音项目并生成至少一种语言, 如 配音快速入门 所示。

本指南中使用的转录编辑和重新生成端点仅适用于 企业版工作区。请联系 销售团队 获取访问权限。

配音的准确性取决于其所依据的转录文本。本指南介绍可进行修改的两个位置——源转录文本和某种语言的翻译——以及满意后如何重新生成音频。

修订机制

每个项目和每种语言都有各自的 revision 计数器,均从 0 开始。

  • 编辑源转录文本会增加项目的 revision。转录本身不会。
  • 编辑翻译会增加该语言的 revision。不会影响源文本或其他语言。
  • 语言还会报告 output_revision:当前音频生成时所依据的修订版本。当 output_revision 落后于 revision 时,下载的音频已过期,语言状态会变为 stale。

尽可能在添加语言前修正源转录文本。翻译基于源文本生成,因此先修正源文本可确保每种语言都从正确的文本开始。语言创建后再编辑源文本,会将该语言标记为 stale,并需要重新生成。

编辑源转录文本

读取源转录文本以获取每个片段稳定的 id,然后编辑、添加或删除片段。

import os
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs
load_dotenv()
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
# Replace with your project's ID
project_id = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3"
# Read the source transcript
transcript = elevenlabs.dubbing.project.transcript.get(project_id)
first_segment = transcript.segments[0]
# Correct a segment's text
elevenlabs.dubbing.project.transcript.update_segment(
project_id,
segment_id=first_segment.id,
text="Welcome to our latest product demo.",
)
# Add a segment (reuse an existing speaker_id so it is dubbed with that voice)
added = elevenlabs.dubbing.project.transcript.create_segment(
project_id,
text="Thanks for watching.",
speaker_id=first_segment.speaker_id,
start_s=40.0,
end_s=42.0,
)
# Delete the segment we just added
elevenlabs.dubbing.project.transcript.delete_segment(
project_id,
segment_id=added.segment.id,
)

编辑时间时,end_s 必须大于 start_s。新片段必须包含全部 4 个字段(text、speaker_id、start_s、end_s);服务器会分配片段 id。

优化翻译

语言转录文本会将每个源片段与其翻译配对。片段 id 与源转录文本一致,因此可将翻译与原文对应。编辑单个片段的翻译可覆盖机器翻译。传入 null 可清除翻译,并将该片段标记为待重新翻译。

project_id = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3"
language_id = "lang_1001kwkyxp0je6ktn4knsfrasx5s"
# Read the language's translations
target = elevenlabs.dubbing.project.language.transcript.get(project_id, language_id)
first_segment = target.segments[0]
# Refine a single translation
elevenlabs.dubbing.project.language.transcript.update_segment(
project_id,
language_id,
segment_id=first_segment.id,
translation="Bienvenido a nuestra última demostración de producto.",
)

编辑翻译会增加该语言的 revision。如果该语言此前已完成,会变为 stale,并保留之前的音频,直到重新生成。

重新生成音频

编辑源转录文本或翻译后,重新生成该语言,即可根据当前转录文本生成新的配音。重新生成的计费方式与生成相同。

import time
# Regenerate from the current transcript
elevenlabs.dubbing.project.language.transcript.regenerate(project_id, language_id)
# Poll until the new output is ready
while True:
language = elevenlabs.dubbing.project.language.get(project_id, language_id)
if language.status == "completed":
break
if language.status == "failed":
raise RuntimeError("Regeneration failed")
time.sleep(5)
print("Fresh output at", language.outputs.lossless_audio)

如果项目未处于 ready 状态,或语言未处于稳定状态(例如已在生成中),重新生成会返回 409 Conflict。语言再次达到 completed 后,output_revision 将等于 revision,下载的音频会反映所做的编辑。

添加语言时,可通过 cloning_strength 音色设置(0 到 10,默认值为 7)控制配音说话人对源音色的克隆强度。请参阅创建 语言目标 API 参考文档。