더빙 수정 및 재생성

소스 트랜스크립트와 번역문을 수정한 다음 언어의 오디오를 재생성합니다.

방법 가이드 · 더빙 빠른 시작에 나온 것처럼 더빙 프로젝트를 만들고 하나 이상의 언어를 생성했다고 가정합니다.

이 가이드에서 사용하는 트랜스크립트 편집 및 재생성 엔드포인트는 엔터프라이즈 워크스페이스에서만 사용할 수 있습니다. 액세스하려면 영업팀에 문의하세요.

더빙의 정확도는 기반이 되는 트랜스크립트만큼만 높습니다. 이 가이드에서는 소스 트랜스크립트와 언어별 번역, 두 곳에서 수정하는 방법과 만족스러운 결과를 얻은 후 오디오를 재생성하는 방법을 다룹니다.

수정 작업 방식

각 프로젝트와 각 언어에는 모두 0에서 시작하는 고유한 revision 카운터가 있습니다.

  • 소스 트랜스크립트를 편집하면 프로젝트의 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보다 커야 합니다. 새 세그먼트에는 네 필드(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 레퍼런스를 참고하세요.