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

# Förfina och generera om en dubbning

> **Note**
>
> **Guide** · Förutsätter att du har skapat ett dubbningsprojekt och genererat minst ett språk,
> enligt [Snabbstart för dubbning](/docs/sv/eleven-api/guides/cookbooks/dubbing).

> **Warning**
>
> Slutpunkterna för transkriptredigering och omgenerering som används i den här guiden är endast tillgängliga för
> företagsarbetsytor. Kontakta [säljteamet](https://elevenlabs.io/contact-sales) för åtkomst.

En dubbning är bara så korrekt som transkriptet den bygger på. Den här guiden beskriver de två ställen där du kan göra korrigeringar – källtranskriptet och ett språks översättning – samt hur du omgenererar ljudet när du är nöjd.

## Så fungerar revideringar

Varje projekt och varje språk har en egen `revision`-räknare, som båda börjar på `0`.

* Att redigera källtranskriptet ökar projektets `revision`. Själva transkriberingen gör det inte.
* Att redigera en översättning ökar det språkets `revision`. Det påverkar inte källan eller något annat språk.
* Ett språk rapporterar också `output_revision`: den revidering som det aktuella ljudet genererades från. När `output_revision` ligger efter `revision` är det nedladdade ljudet inaktuellt och språkets status blir `stale`.

Korrigera om möjligt källtranskriptet innan du lägger till språk. Översättningar skapas från källan, så om du först rättar källan börjar varje språk med rätt text. Om du redigerar källan efter att ett språk har skapats markeras språket som `stale` och måste omgenereras.

## Redigera källtranskriptet

Läs källtranskriptet för att hämta varje segments stabila `id` och redigera, lägg sedan till eller ta bort segment.

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

När du redigerar tidssättning måste `end_s` vara större än `start_s`. Nya segment kräver alla fyra fält (`text`, `speaker_id`, `start_s`, `end_s`); servern tilldelar segmentets `id`.

## Förfina en översättning

Ett språktrankript kopplar ihop varje källsegment med dess översättning. Segmentens `id`-värden matchar källtranskriptet, så du kan jämföra översättningar med originaltexten. Redigera ett enskilt segments översättning för att åsidosätta maskinöversättningen. Skicka `null` för att rensa en översättning och markera segmentet för ny översättning.

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

Att redigera en översättning höjer språkets `revision`. Om språket redan var klart blir det `stale` och behåller sitt tidigare ljud tills du omgenererar.

## Omgenerera ljudet

Efter att du har redigerat källtranskriptet eller en översättning omgenererar du språket för att skapa en ny dubbning från det aktuella transkriptet. Omgenerering debiteras som en generering.

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

Omgenerering returnerar `409 Conflict` om projektet inte är `ready` eller språket inte är i ett stabilt tillstånd, till exempel när det redan genererar. När språket åter når `completed` är `output_revision` lika med `revision` och det nedladdade ljudet återspeglar dina ändringar.

> **Note**
>
> Du kan styra hur starkt de dubbade talarna klonar källrösterna med röstinställningen
> `cloning_strength` (0 till 10, standardvärde 7) när du lägger till ett språk. Se API-
> referensen för [skapa språkmål](/docs/sv/api-reference/dubbing/language-targets/create-language-target).