Communitygithub.com

ElevenLabs Dubbing (Personal Brand)

Übersetzen Sie Audio und Video mit der ElevenLabs Dubbing API in andere Sprachen, wobei die Originalstimmen erhalten bleiben. Ideal zum Übersetzen von Videos, Podcasts oder Aufnahmen.

Was ist ElevenLabs Dubbing (Personal Brand)?

Dieses Skill („ElevenLabs Dubbing“) ermöglicht es, Audio- oder Videodateien in andere Sprachen zu übersetzen (Voice-Dubbing), wobei die Stimmen der Originalsprecher erhalten bleiben. Es basiert auf der ElevenLabs Dubbing Projects API (dubbing_v2) und ist für die Nutzung in KI-Agenten wie Claude Code, Cursor oder Codex konzipiert. Der Workflow umfasst die Erstellung eines Projekts aus einer Datei oder URL, das Transkribieren und Bearbeiten des Quelltranskripts, das Hinzufügen einer oder mehrerer Zielsprachen, das Verfeinern von Übersetzungen pro Segment (nur Enterprise) und das erneute Generieren der Tonspur bei Änderungen. Das Skill unterstützt Python-, JavaScript- (SDK) und cURL-Befehle und erfordert einen ElevenLabs-API-Key (Umgebungsvariable `ELEVENLABS_API_KEY`). Der Agent kann den gesamten Dubbing-Prozess automatisieren: von der Transkription über die Übersetzung bis zum Herunterladen des fertigen Dubs.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/rodrvc/personal-brand/tree/HEAD/.claude/skills/dubbing

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

ElevenLabs Dubbing

Übersetzen Sie Audio oder Video in andere Sprachen, während die Originalstimmen der Sprecher erhalten bleiben. Erstellen Sie ein Projekt aus einer Datei oder URL, prüfen und bearbeiten Sie das Quelltranskript, fügen Sie eine oder mehrere Zielsprachen hinzu, verfeinern Sie Übersetzungen pro Segment und generieren Sie die Ausgabe neu.

Wichtig: Verwenden Sie die Dubbing Projects API – elevenlabs.dubbing.project.* in den SDKs oder die REST-Endpunkte /v1/dubbing/project. Verwenden Sie nicht die veraltete v1-Dubbing-Oberfläche (client.dubbing.create(), client.dubbing.get(), client.dubbing.audio.get() oder bloße /v1/dubbing-Routen) – dies ist die ältere Dubbing-API, die sich jetzt unter „Legacy“ in der API-Referenz befindet.

Einrichtung: Siehe Installationsanleitung. Die REST-Basis-URL ist https://api.elevenlabs.io mit Ihrem API-Schlüssel im xi-api-key-Header; die SDKs lesen ELEVENLABS_API_KEY automatisch aus.

Konzepte

KonzeptBedeutung
ProjektEine Quelle von Medien (Datei oder URL) plus zugehöriges Quelltranskript. Einmal vorbereitet (transkribiert), verbleibt es im Status ready, während Sie Sprachen hinzufügen.
QuelltranskriptBearbeitbare Segmente (Text, Sprecher, Zeitangaben), die aus der Quelle transkribiert wurden. Die einzige Quelle der Wahrheit, von der jede Sprache übersetzt wird.
Sprache (Ziel)Eine ausgegebene Dubbing-Sprache. Jede hat ihr eigenes Transkript (Quellsegmente + eine Übersetzung pro Segment) und ihre eigene Dubbing-Audioausgabe.
RevisionenUnabhängige monotone Zähler. Die revision des Projekts erhöht sich bei Bearbeitungen des Quelltranskripts; die revision einer Sprache erhöht sich bei Übersetzungsbearbeitungen oder Quellbearbeitungen, die sie betreffen. Die output_revision einer Sprache ist die Revision, aus der ihr aktuelles Audio generiert wurde – wenn sie hinter der revision liegt, ist die Ausgabe veraltet.

Empfohlene Vorgehensweise: Finalisieren Sie das Quelltranskript bevor Sie Sprachen hinzufügen. Übersetzungen werden aus der Quelle erstellt. Wenn Sie zuerst die Quelle korrigieren, beginnen alle Sprachen mit dem richtigen Text – eine Bearbeitung der Quelle nach Abschluss einer Sprache markiert diese als stale und erfordert eine (kostenpflichtige) Neugenerierung.

Enterprise: Die Transkriptbearbeitung und -neugenerierung sind nur für Enterprise-Workspaces verfügbar. Das Erstellen von Projekten, das Hinzufügen von Sprachen und das Herunterladen von Dubs funktioniert mit allen Tarifen.

Workflow

  1. Erstellen Sie das Projekt aus einer Datei oder URL → queued
  2. Poll das Projekt ab, bis es ready ist
  3. Prüfen und finalisieren Sie das Quelltranskript (Segmente bearbeiten/hinzufügen/löschen)
  4. Hinzufügen Sie eine Sprache pro Ziel → queued → processing → completed
  5. Herunterladen Sie die outputs.lossless_audio jeder Sprache, wenn sie completed ist
  6. Verfeinern Sie Übersetzungen pro Segment, falls nötig → die Sprache wird stale
  7. Neugenerieren Sie die Sprache → erneut completed mit frischer Ausgabe

Kurzanleitung (Python)

import os
import time
import requests
from elevenlabs.client import ElevenLabs

elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))

# 1. Ein Projekt aus einer lokalen Datei erstellen (oder source_url=... anstelle von file übergeben)
with open("promo.mp4", "rb") as f:
    project = elevenlabs.dubbing.project.create(
        file=f,
        source_language="en",
        reference="Q3 marketing video",
    )

# 2. Warten, bis die Quellmedien transkribiert sind
while True:
    project = elevenlabs.dubbing.project.get(project.project_id)
    if project.status == "ready":
        break
    if project.status == "failed":
        raise RuntimeError("Projektvorbereitung fehlgeschlagen")
    time.sleep(5)

# 3. Spanisch als Zielsprache hinzufügen
language = elevenlabs.dubbing.project.language.create(
    project.project_id,
    target_language="es",
)

# 4. Warten, bis die Synchronisation abgeschlossen ist
while True:
    language = elevenlabs.dubbing.project.language.get(
        project.project_id, language.language_id
    )
    if language.status == "completed":
        break
    if language.status == "failed":
        raise RuntimeError("Synchronisation fehlgeschlagen")
    time.sleep(5)

# 5. Die synchronisierte Audio herunterladen (signierte URL, ~1 Stunde gültig – Sprache erneut abrufen für eine neue)
audio = requests.get(language.outputs.lossless_audio)
with open("promo_es.wav", "wb") as f:
    f.write(audio.content)

Kurzanleitung (JavaScript)

import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { writeFile } from "fs/promises";

const elevenlabs = new ElevenLabsClient();

// 1. Projekt erstellen (sourceUrl gezeigt; Datei-Upload wird ebenfalls unterstützt)
let project = await elevenlabs.dubbing.project.create({
  sourceUrl: "https://example.com/promo.mp4",
  sourceLanguage: "en",
  reference: "Q3 marketing video",
});

// 2. Warten, bis die Quellmedien transkribiert sind
while (true) {
  project = await elevenlabs.dubbing.project.get(project.projectId);
  if (project.status === "ready") break;
  if (project.status === "failed") throw new Error("Projektvorbereitung fehlgeschlagen");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 3. Spanisch als Zielsprache hinzufügen
let language = await elevenlabs.dubbing.project.language.create(project.projectId, {
  targetLanguage: "es",
});

// 4. Warten, bis die Synchronisation abgeschlossen ist
while (true) {
  language = await elevenlabs.dubbing.project.language.get(project.projectId, language.languageId);
  if (language.status === "completed") break;
  if (language.status === "failed") throw new Error("Synchronisation fehlgeschlagen");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 5. Die synchronisierte Audio von der signierten URL herunterladen
const response = await fetch(language.outputs!.losslessAudio!);
await writeFile("promo_es.wav", Buffer.from(await response.arrayBuffer()));

Kurzanleitung (cURL)

# 1. Ein Projekt erstellen (verwenden Sie -F "source_url=https://..." anstelle von file, um von einer URL zu dubben)
curl -X POST "https://api.elevenlabs.io/v1/dubbing/project" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" \
  -F "[email protected]" \
  -F "source_language=en"
# → {"project_id": "proj_...", "status": "queued", ...}

# 2. Abfragen, bis der Status "ready" ist
curl "https://api.elevenlabs.io/v1/dubbing/project/proj_..." \
  -H "xi-api-key: $ELEVENLABS_API_KEY"

# 3. Eine Zielsprache hinzufügen
curl -X POST "https://api.elevenlabs.io/v1/dubbing/project/proj_.../language" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"target_language": "es"}'

# 4. Die Sprache abfragen, bis sie "completed" ist, dann outputs.lossless_audio herunterladen
curl "https://api.elevenlabs.io/v1/dubbing/project/proj_.../language/lang_..." \
  -H "xi-api-key: $ELEVENLABS_API_KEY"

Optionen beim Erstellen

POST /v1/dubbing/project akzeptiert multipart/form-data mit entweder file oder source_url (nicht beides):

FeldErforderlichHinweise
fileeines von file/source_urlQuellmedien zum Dubbing (Audio oder Video), bis zu 3 GiB
source_urleines von file/source_urlÖffentliche URL zum Abrufen der Quellmedien
source_languageneinISO 639-Code (z.B. en). Weglassen zur automatischen Erkennung – die erkannte Sprache wird im Feld language des Quelltranskripts gemeldet
referenceneinFreiform-Label zur Identifizierung des Projekts auf Ihrer Seite (max. 500 Zeichen)
model_idneindubbing_v2 (Standard)
target_languageneinOptional die erste Zielsprache bei der Erstellung in die Warteschlange stellen; weitere mit language.create hinzufügen
keytermsneinBegriffe zur Beeinflussung von Transkription/Übersetzung (Produkt-/Markennamen). Bis zu 100 Begriffe mit jeweils 200 Zeichen; wiederholen Sie das Feld einmal pro Begriff im multipart

Bearbeiten des Quelltranskripts

Sobald das Projekt ready ist, lesen Sie das Transkript, korrigieren Sie es, bevor Sie Sprachen hinzufügen. Jede Bearbeitung erhöht die revision des Projekts. Jedes Segment hat eine stabile id, die zum Bearbeiten oder Löschen verwendet wird. (Nur Enterprise-Workspaces.)

# Quelltranskript lesen
transcript = elevenlabs.dubbing.project.transcript.get(project_id)

# Text eines Segments korrigieren – nur die zu ändernden Felder senden (text, speaker_id, start_s, end_s)
elevenlabs.dubbing.project.transcript.update_segment(
    project_id,
    segment_id=transcript.segments[0].id,
    text="Welcome to our latest product demo.",
)

# Ein Segment hinzufügen (eine vorhandene speaker_id wiederverwenden, damit es mit der Stimme dieses Sprechers synchronisiert wird)
added = elevenlabs.dubbing.project.transcript.create_segment(
    project_id,
    text="Thanks for watching.",
    speaker_id=transcript.segments[0].speaker_id,
    start_s=40.0,
    end_s=42.0,
)

# Ein Segment löschen
elevenlabs.dubbing.project.transcript.delete_segment(project_id, segment_id=added.segment.id)

Via REST: GET /v1/dubbing/project/{project_id}/transcript, dann PATCH .../transcript/segment/{segment_id} mit nur den geänderten Feldern:

curl -X PATCH "https://api.elevenlabs.io/v1/dubbing/project/{project_id}/transcript/segment/{segment_id}" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" -H "Content-Type: application/json" \
  -d '{"text": "Welcome to our latest product demo."}'

Übersetzungen verfeinern und neu generieren

Das Transkript einer Sprache ordnet jedem Quellsegment seine translation zu (null = noch nicht übersetzt; Segment-IDs stimmen mit der Quelle überein). Bearbeiten Sie eine einzelne Übersetzung, generieren Sie dann neu. (Nur Enterprise-Workspaces.)

# Die Übersetzungen der Sprache lesen
target = elevenlabs.dubbing.project.language.transcript.get(project_id, language_id)

# Eine einzelne Übersetzung verfeinern (translation=None übergeben, um sie zu löschen und für eine Neuübersetzung zu markieren)
elevenlabs.dubbing.project.language.transcript.update_segment(
    project_id,
    language_id,
    segment_id=target.segments[0].id,
    translation="Bienvenido a nuestra última demostración de producto.",
)

# Den Dub aus dem aktuellen Transkript neu generieren (kostenpflichtig wie eine Generierung)
elevenlabs.dubbing.project.language.transcript.regenerate(project_id, language_id)

Via REST: PATCH /v1/dubbing/project/{project_id}/language/{language_id}/transcript/segment/{segment_id} mit {"translation": "..."}, dann POST .../language/{language_id}/transcript/regenerate (gibt 202 Accepted zurück).

Eine Übersetzungsbearbeitung betrifft nur diese Sprache. Nach der Bearbeitung wird eine completed-Sprache stale – sie stellt weiterhin ihre vorherige Ausgabe bereit, bis Sie neu generieren. Pollen Sie, bis completed; output_revision ist dann gleich revision und outputs.lossless_audio spiegelt das aktuelle Transkript wider.

Dubbing in mehrere Sprachen

Fügen Sie ein Sprachziel pro Sprache hinzu – jedes wird unabhängig generiert. Verfolgen Sie alle mit language.list, anstatt eines nach dem anderen abzufragen:

for lang in ["es", "fr", "de", "ja"]:
    elevenlabs.dubbing.project.language.create(project_id, target_language=lang)

while True:
    result = elevenlabs.dubbing.project.language.list(project_id)
    if not any(l.status in ("queued", "processing") for l in result.languages):
        break
    time.sleep(5)

Zustände

Projekt:

StatusBedeutung
queuedErstellt; Quellabruf + Vorbereitung in die Warteschlange gestellt
preparingVorbereitung (Transkription) läuft
readyQuelltranskript verfügbar; Sprachen hinzufügen/generieren. Projekte bleiben ready – der Fortschritt pro Sprache wird in den Sprachen abgebildet
failedVorbereitung fehlgeschlagen (z.B. Quelle konnte nicht abgerufen oder dekodiert werden)

Sprache:

StatusBedeutung
queuedWartet darauf, dass das Projekt ready wird, oder auf einen Generierungs-Worker
processingDer Dub wird generiert
completedAbgeschlossen; outputs enthalten eine signierte Download-URL (ca. 1 Stunde gültig – neu abrufen für eine frische URL)
staleZuvor abgeschlossen, aber das Transkript hat sich geändert; behält die letzte Ausgabe bis zur Neugenerierung
failedGenerierung fehlgeschlagen

Sie können eine Sprache hinzufügen, bevor das Projekt ready ist – sie bleibt queued und startet automatisch, sobald das Projekt ready wird. Beim Hinzufügen einer Sprache können optionale model_id (standardmäßig die des Projekts) und voice_settings (z.B. {"cloning_strength": 7}, Bereich 0–10, Standard 7 – steuert, wie stark die synchronisierten Sprecher die Quellstimmen klonen) angegeben werden.

Fehlerbehandlung

  • 401: Ungültiger API-Schlüssel |
  • 409 Conflict bei Neugenerierung: Das Projekt ist nicht ready oder die Sprache ist nicht abgeschlossen (z.B. bereits in Generierung) – warten und erneut versuchen |
  • Abgelaufene Download-URL: outputs.lossless_audio ist signiert und ca. 1 Stunde gültig; Sprache erneut abrufen für eine neue URL |
  • Transkriptbearbeitung / Neugenerierung nicht verfügbar: Diese Endpunkte sind nur für Enterprise – bei anderen Tarifen das Projekt mit einem finalisierten Quelltranskript erstellen und direkt Sprachen hinzufügen |

Referenzen

Verwandte Skills