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

# Affiner et régénérer un doublage

> **Note**
>
> **Guide pratique** · Suppose que vous avez créé un projet de doublage et généré au moins une langue,
> comme indiqué dans le [guide de démarrage rapide du doublage](/docs/fr/eleven-api/guides/cookbooks/dubbing).

> **Warning**
>
> Les points de terminaison de modification et de régénération des transcriptions utilisés dans ce guide ne sont disponibles que pour
> les Workspaces Enterprise. Contactez [notre équipe commerciale](https://elevenlabs.io/contact-sales) pour y accéder.

La précision d'un doublage dépend de la transcription sur laquelle il repose. Ce guide présente les deux endroits où vous pouvez apporter des corrections, la transcription source et la traduction d'une langue, ainsi que la façon de régénérer l'audio une fois satisfait du résultat.

## Fonctionnement des révisions

Chaque projet et chaque langue possèdent leur propre compteur `revision`, qui commence à `0`.

* Modifier la transcription source incrémente la `revision` du projet. La transcription elle-même ne l'incrémente pas.
* Modifier une traduction incrémente la `revision` de cette langue. Cela n'affecte ni la source ni les autres langues.
* Une langue indique également `output_revision` : la révision à partir de laquelle son audio actuel a été généré. Lorsque `output_revision` est inférieur à `revision`, l'audio téléchargé n'est plus à jour et le statut de la langue devient `stale`.

Corrigez la transcription source avant d'ajouter des langues lorsque c'est possible. Les traductions sont produites à partir de la source ; la corriger d'abord permet à chaque langue de partir du bon texte. Modifier la source après avoir créé une langue marque cette langue comme `stale` et nécessite une régénération.

## Modifier la transcription source

Lisez la transcription source pour obtenir l'`id` stable de chaque segment, puis modifiez, ajoutez ou supprimez des segments.

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

Lors de la modification des timings, `end_s` doit être supérieur à `start_s`. Les nouveaux segments nécessitent les quatre champs (`text`, `speaker_id`, `start_s`, `end_s`) ; le serveur attribue l'`id` du segment.

## Affiner une traduction

La transcription d'une langue associe chaque segment source à sa traduction. Les valeurs `id` des segments correspondent à la transcription source, ce qui vous permet d'aligner les traductions sur le texte original. Modifiez la traduction d'un seul segment pour remplacer la traduction automatique. Transmettez `null` pour effacer une traduction et marquer ce segment pour une nouvelle traduction.

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

Modifier une traduction incrémente la `revision` de la langue. Si la langue était déjà terminée, elle devient `stale` et conserve son audio précédent jusqu'à sa régénération.

## Régénérer l'audio

Après avoir modifié la transcription source ou une traduction, régénérez la langue pour produire un nouveau doublage à partir de la transcription actuelle. La régénération est facturée comme une génération.

```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 régénération renvoie un `409 Conflict` si le projet n'est pas `ready` ou si la langue n'est pas dans un état stable, par exemple lorsqu'elle est déjà en cours de génération. Lorsque la langue atteint à nouveau l'état `completed`, `output_revision` est égal à `revision` et l'audio téléchargé reflète vos modifications.

> **Note**
>
> Vous pouvez contrôler à quel point les locuteurs doublés clonent les voix sources avec le paramètre vocal
> `cloning_strength` (de 0 à 10, 7 par défaut) lors de l'ajout d'une langue. Consultez le Guide de l'API
> [create language target](/docs/fr/api-reference/dubbing/language-targets/create-language-target).