자체 트랜스크립트 사용

자체 트랜스크립트로 더빙 프로젝트를 만들고 번역문을 직접 제공합니다.

방법 가이드 · 더빙 빠른 시작에 설명된 대로 더빙 프로젝트를 만드는 방법을 알고 있다고 가정합니다.

자체 트랜스크립트와 번역문 제공은 엔터프라이즈 워크스페이스에서만 이용할 수 있습니다. 이용하려면 영업팀에 문의하세요.

기본적으로 더빙 API는 소스 미디어를 트랜스크립션하고 트랜스크립트를 각 대상 언어로 기계 번역합니다. 정확한 트랜스크립트(자막, 대본 또는 전문 번역 텍스트)가 이미 있다면 대신 제공할 수 있습니다. 이 가이드에서는 트랜스크립트 파일 형식, 트랜스크립트로 프로젝트를 만드는 방법, 언어를 추가할 때 자체 번역문을 제공하는 방법을 설명합니다.

트랜스크립트 파일 형식

트랜스크립트는 최상위 수준에 단일 segments 배열이 있는 JSON 파일입니다. 각 세그먼트는 하나의 발화로, 말한 텍스트, 시작 및 종료 시간, 그리고 선택적으로 화자를 포함합니다.

transcript.json
{
"segments": [
{
"external_id": "line_0",
"speaker_id": "speaker_0",
"start_s": 0.0,
"end_s": 14.5,
"text": "With my soft and whispery American accent, I'm the ideal choice for creating ASMR content, meditation guides, or adding an intimate feel to your narrative projects."
}
]
}
필드필수설명
text예세그먼트 동안 발화된 텍스트입니다.
start_s예세그먼트의 시작 시간(초)입니다.
end_s예세그먼트의 종료 시간(초)입니다.
speaker_id아니요동일한 화자가 말한 세그먼트를 그룹화하는 식별자로, 각 화자에 일관된 음성이 더빙되도록 합니다. 이를 생략한 세그먼트는 하나의 기본 화자를 공유합니다.
external_id아니요세그먼트의 자체 식별자입니다. 최대 128자이며 트랜스크립트 내에서 고유해야 합니다. 번역문의 키로 사용되며 트랜스크립트를 읽을 때마다 반환됩니다.
translation아니요세그먼트의 번역 텍스트입니다. target_language를 통해 생성되는 언어 대상을 초기화하는 데 사용됩니다. 하나라도 포함하는 세그먼트가 있으면 모든 세그먼트에 포함해야 합니다.

세그먼트 규칙

프로젝트를 만들 때 트랜스크립트가 검증됩니다.

  • 세그먼트는 start_s 순서로 정렬되어야 합니다.
  • 세그먼트 길이는 0.1~25초여야 하며, end_s는 start_s보다 커야 합니다.
  • 동일한 speaker_id를 가진 세그먼트는 겹치면 안 되지만 끝점에서 맞닿을 수는 있습니다. 서로 다른 화자의 세그먼트는 동시 발화를 나타내기 위해 겹칠 수 있습니다.
  • 트랜스크립트에는 최대 20,000개의 세그먼트가 포함될 수 있으며 파일 크기는 최대 4 MiB입니다.

긴 세그먼트보다 짧은 세그먼트를 사용하세요. 1초 이상 멈추는 지점에서 문장을 나누세요. 세그먼트 경계는 더빙 오디오가 소스와 맞춰지는 방식을 결정하므로, 정확하고 자연스러운 구분이 있는 트랜스크립트가 더 잘 동기화된 더빙을 만듭니다.

트랜스크립트로 프로젝트 만들기

프로젝트를 만들 때 트랜스크립트 파일을 전달합니다. 트랜스크립트를 제공할 경우 소스 미디어가 자동으로 트랜스크립션되지 않으므로 source_language가 필요합니다. 언어는 es 또는 fr-CA와 같은 BCP-47 태그로 지정합니다. 허용되는 모든 값은 지원 언어 및 방언에서 확인하세요.

import os
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs
load_dotenv()
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
with open("transcript.json", "rb") as transcript:
project = elevenlabs.dubbing.project.create(
source_url="https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
source_language="en",
transcript=transcript,
)
print(project.project_id)

프로젝트는 더빙하기 전에 여전히 소스 미디어를 수집하므로, 빠른 시작에 나온 대로 상태가 ready가 될 때까지 폴링하세요. 세그먼트는 제공한 그대로 사용되며 자동 트랜스크립션은 실행되지 않습니다.

자체 번역문 제공

언어 대상을 추가할 때 translations 맵을 전달하면 기계 번역 대신 자체 번역문을 사용할 수 있습니다. 이 맵은 각 소스 세그먼트의 external_id를 키로 사용하며, 제공하지 않은 경우 내부 세그먼트 id를 사용합니다. 모든 소스 세그먼트를 정확히 한 번씩 포함해야 합니다.

project_id = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3"
language = elevenlabs.dubbing.project.language.create(
project_id,
target_language="fr",
translations={
"line_0": "Avec mon accent américain doux et murmuré, je suis le choix idéal pour créer du contenu ASMR, des guides de méditation, ou pour apporter une touche d'intimité à vos projets narratifs.",
},
)

각 언어 대상은 하나의 생성 호출이 필요하므로, 더빙할 언어마다 이 요청을 반복하세요. translations 맵에는 최대 20,000개의 항목과 총 최대 4 MiB의 텍스트를 포함할 수 있습니다.

세그먼트에 external_id가 없다면 소스 트랜스크립트를 읽어 각 세그먼트의 내부 id를 가져오고, 이를 대신 키로 사용하세요.

transcript = elevenlabs.dubbing.project.transcript.get(project_id)
for segment in transcript.segments:
print(segment.id, segment.text)

프로젝트 생성 시 번역문 초기화

단일 대상 언어의 경우, 트랜스크립트 파일의 모든 세그먼트에 translation을 포함하고 프로젝트 생성 시 target_language를 전달하면 별도의 translations 맵을 생략할 수 있습니다. 언어 대상은 번역문과 함께 대기열에 추가되며 프로젝트가 준비되면 생성이 시작됩니다.

transcript.json
{
"segments": [
{
"external_id": "line_0",
"speaker_id": "speaker_0",
"start_s": 0.0,
"end_s": 14.5,
"text": "With my soft and whispery American accent, I'm the ideal choice for creating ASMR content, meditation guides, or adding an intimate feel to your narrative projects.",
"translation": "Avec mon accent américain doux et murmuré, je suis le choix idéal pour créer du contenu ASMR, des guides de méditation, ou pour apporter une touche d'intimité à vos projets narratifs."
}
]
}

품질 고려 사항

더빙 품질은 기반이 되는 트랜스크립트와 번역문 품질에 달려 있습니다. 세그먼트 타이밍과 텍스트는 더빙된 연기의 타이밍과 음성을 정하는 데 직접 사용되므로, 부정확한 타이밍이나 텍스트는 결과물의 품질을 떨어뜨립니다. 번역문은 세그먼트의 시간 범위에 맞춰 렌더링됩니다. 원문보다 훨씬 길거나 짧은 번역문은 더빙 음성의 속도에 영향을 미치므로, 발화 길이가 비슷한 번역문을 목표로 하세요.

다음 단계