> 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.

# Perfeziona e rigenera un doppiaggio

> **Note**
>
> **Guida pratica** · Presuppone che tu abbia creato un progetto di doppiaggio e generato almeno una lingua,
> come mostrato nella [guida rapida al doppiaggio](/docs/it/eleven-api/guides/cookbooks/dubbing).

> **Warning**
>
> Gli endpoint per la modifica della trascrizione e la rigenerazione utilizzati in questa guida sono disponibili solo per
> i workspace Enterprise. Per ottenere l'accesso, contatta le [vendite](https://elevenlabs.io/contact-sales).

Un doppiaggio è accurato quanto la trascrizione su cui si basa. Questa guida illustra i due punti in cui puoi apportare correzioni — la trascrizione di origine e la traduzione di una lingua — e come rigenerare l'audio quando sei soddisfatto.

## Come funzionano le revisioni

Ogni progetto e ogni lingua hanno il proprio contatore `revision`, entrambi inizialmente impostati su `0`.

* La modifica della trascrizione di origine aumenta la `revision` del progetto. La trascrizione in sé non la aumenta.
* La modifica di una traduzione aumenta la `revision` di quella lingua. Non influisce sull'origine né su altre lingue.
* Una lingua riporta anche `output_revision`: la revisione da cui è stato generato il suo audio corrente. Quando `output_revision` è inferiore a `revision`, l'audio scaricato non è aggiornato e lo stato della lingua diventa `stale`.

Se possibile, correggi la trascrizione di origine prima di aggiungere lingue. Le traduzioni vengono prodotte dall'origine, quindi correggerla prima fa sì che ogni lingua parta dal testo giusto. Modificare l'origine dopo che una lingua esiste contrassegna quella lingua come `stale` e richiede una rigenerazione.

## Modifica la trascrizione di origine

Leggi la trascrizione di origine per ottenere l'`id` stabile di ogni segmento, quindi modifica, aggiungi o elimina segmenti.

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

Quando modifichi i tempi, `end_s` deve essere maggiore di `start_s`. I nuovi segmenti richiedono tutti e quattro i campi (`text`, `speaker_id`, `start_s`, `end_s`); il server assegna l'`id` del segmento.

## Perfeziona una traduzione

La trascrizione di una lingua associa ogni segmento di origine alla relativa traduzione. I valori `id` dei segmenti corrispondono alla trascrizione di origine, quindi puoi allineare le traduzioni al testo originale. Modifica la traduzione di un singolo segmento per sostituire la traduzione automatica. Passa `null` per cancellare una traduzione e contrassegnare quel segmento per una nuova traduzione.

```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." }
);
```

La modifica di una traduzione incrementa la `revision` della lingua. Se la lingua era già stata completata, diventa `stale` e mantiene l'audio precedente finché non la rigeneri.

## Rigenera l'audio

Dopo aver modificato la trascrizione di origine o una traduzione, rigenera la lingua per produrre un nuovo doppiaggio dalla trascrizione corrente. La rigenerazione viene addebitata come una generazione.

```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!);
```

La rigenerazione restituisce un `409 Conflict` se il progetto non è `ready` o la lingua non è in uno stato stabile, ad esempio quando sta già generando. Quando la lingua raggiunge di nuovo `completed`, `output_revision` è uguale a `revision` e l'audio scaricato riflette le tue modifiche.

> **Note**
>
> Puoi controllare quanto i doppiatori clonati somigliano alle voci di origine con l'impostazione vocale
> `cloning_strength` (da 0 a 10, valore predefinito 7) quando aggiungi una lingua. Consulta il Riferimento API per la
> [creazione della lingua di destinazione](/docs/it/api-reference/dubbing/language-targets/create-language-target).