Dopracuj i wygeneruj dubbing ponownie

Edytuj źródłowy transkrypt i tłumaczenia, a potem ponownie wygeneruj audio dla języka.

Przewodnik · Zakłada, że utworzyłeś projekt dubbingu i wygenerowałeś co najmniej jeden język, jak pokazano w krótkim wprowadzeniu do dubbingu.

Endpointy do edycji transkrypcji i regeneracji użyte w tym przewodniku są dostępne tylko dla obszarów roboczych Enterprise. Skontaktuj się z działem sprzedaży, aby uzyskać dostęp.

Dubbing jest tylko tak dokładny, jak transkrypcja, na której się opiera. W tym przewodniku pokażemy dwa miejsca, w których możesz wprowadzić poprawki — transkrypcję źródłową i tłumaczenie języka — oraz jak zregenerować audio, gdy efekt będzie satysfakcjonujący.

Jak działają wersje

Każdy projekt i każdy język mają własny licznik revision, oba zaczynające się od 0.

  • Edycja transkrypcji źródłowej zwiększa revision projektu. Sama transkrypcja nie.
  • Edycja tłumaczenia zwiększa revision danego języka. Nie wpływa na źródło ani inne języki.
  • Język podaje też output_revision: wersję, z której wygenerowano jego obecne audio. Gdy output_revision jest niższe niż revision, pobrane audio jest nieaktualne, a status języka zmienia się na stale.

Jeśli możesz, popraw transkrypcję źródłową przed dodaniem języków. Tłumaczenia powstają na podstawie źródła, więc poprawienie go najpierw sprawia, że każdy język zaczyna od właściwego tekstu. Edycja źródła po dodaniu języka oznacza ten język jako stale i wymaga regeneracji.

Edytuj transkrypcję źródłową

Odczytaj transkrypcję źródłową, aby uzyskać stałe id każdego segmentu, a następnie edytuj, dodawaj lub usuwaj segmenty.

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

Podczas edycji czasu end_s musi być większe niż start_s. Nowe segmenty wymagają wszystkich czterech pól (text, speaker_id, start_s, end_s); serwer przypisuje segmentowi id.

Dopracuj tłumaczenie

Transkrypcja języka łączy każdy segment źródłowy z jego tłumaczeniem. Wartości id segmentów odpowiadają transkrypcji źródłowej, więc możesz porównać tłumaczenia z oryginalnym tekstem. Edytuj tłumaczenie pojedynczego segmentu, aby zastąpić tłumaczenie maszynowe. Przekaż null, aby usunąć tłumaczenie i oznaczyć ten segment do ponownego tłumaczenia.

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

Edycja tłumaczenia zwiększa revision języka. Jeśli język był już ukończony, jego status zmienia się na stale i zachowuje poprzednie audio, dopóki go nie zregenerujesz.

Zregeneruj audio

Po edycji transkrypcji źródłowej lub tłumaczenia zregeneruj język, aby utworzyć nowy dubbing na podstawie bieżącej transkrypcji. Regeneracja jest rozliczana tak jak generowanie.

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)

Regeneracja zwraca 409 Conflict, jeśli projekt nie ma statusu ready lub język nie jest w stanie ustalonym, na przykład gdy już trwa generowanie. Gdy język ponownie osiągnie status completed, output_revision będzie równe revision, a pobrane audio uwzględni twoje zmiany.

Możesz określić, jak mocno głosy w dubbingu mają naśladować głosy źródłowe, używając ustawienia głosu cloning_strength (od 0 do 10, domyślnie 7) podczas dodawania języka. Zobacz dokumentację API tworzenia języka docelowego.