> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Dopracuj i wygeneruj dubbing ponownie

> **Note**
>
> **Przewodnik** · Zakłada, że utworzyłeś projekt dubbingu i wygenerowałeś co najmniej jeden język,
> jak pokazano w [krótkim wprowadzeniu do dubbingu](/docs/pl/eleven-api/guides/cookbooks/dubbing).

> **Warning**
>
> 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](https://elevenlabs.io/contact-sales), 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.

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

```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import "dotenv/config";

const elevenlabs = new ElevenLabsClient();

// Replace with your project's ID
const projectId = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3";

// Read the source transcript
const transcript = await elevenlabs.dubbing.project.transcript.get(projectId);
const firstSegment = transcript.segments[0];

// Correct a segment's text
await elevenlabs.dubbing.project.transcript.updateSegment(projectId, firstSegment.id, {
  text: "Welcome to our latest product demo.",
});

// Add a segment (reuse an existing speakerId so it is dubbed with that voice)
const added = await elevenlabs.dubbing.project.transcript.createSegment(projectId, {
  text: "Thanks for watching.",
  speakerId: firstSegment.speakerId,
  startS: 40.0,
  endS: 42.0,
});

// Delete the segment we just added
await elevenlabs.dubbing.project.transcript.deleteSegment(projectId, 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.

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

```typescript
const projectId = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3";
const languageId = "lang_1001kwkyxp0je6ktn4knsfrasx5s";

// Read the language's translations
const target = await elevenlabs.dubbing.project.language.transcript.get(projectId, languageId);
const firstSegment = target.segments[0];

// Refine a single translation
await elevenlabs.dubbing.project.language.transcript.updateSegment(
  projectId,
  languageId,
  firstSegment.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.

```python
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)
```

```typescript
// Regenerate from the current transcript
await elevenlabs.dubbing.project.language.transcript.regenerate(projectId, languageId);

// Poll until the new output is ready
let language = await elevenlabs.dubbing.project.language.get(projectId, languageId);
while (language.status !== "completed") {
  if (language.status === "failed") throw new Error("Regeneration failed");
  await new Promise((resolve) => setTimeout(resolve, 5000));
  language = await elevenlabs.dubbing.project.language.get(projectId, languageId);
}

console.log("Fresh output at", language.outputs!.losslessAudio!);
```

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.

> **Note**
>
> 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](/docs/pl/api-reference/dubbing/language-targets/create-language-target).