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

# Guía de inicio rápido de Doblaje

Esta guía te muestra cómo doblar un archivo multimedia a otro idioma con la API de Doblaje. En este ejemplo, creas un proyecto de doblaje a partir de un archivo de audio en inglés y generas un doblaje en español.

Un proyecto de doblaje tiene dos partes: un **proyecto**, que contiene una fuente multimedia y su transcripción, y uno o varios **idiomas de destino**, cada uno de los cuales genera un resultado doblado en un único idioma. Creas un proyecto, esperas a que se transcriba su fuente, añades un idioma y después descargas el doblaje terminado.

> **Note**
>
> Al crear un proyecto, se te cobra por un idioma por adelantado: el coste mínimo de un proyecto de
> doblaje. Esto prepaga tu primer idioma de destino: el primer idioma que añades lo consume, y cada
> idioma adicional se cobra por separado. Consulta [¿Cuánto cuesta el doblaje?](/docs/es/help-center/product/dubbing/how-much-does-dubbing-cost) para obtener más información.

Los idiomas se especifican como etiquetas BCP-47, por ejemplo `es` o `fr-CA`. Consulta los [idiomas y dialectos compatibles](/docs/es/overview/capabilities/dubbing#supported-languages) para ver todos los valores admitidos.

## Usar la API de Doblaje

#### Crear una clave de API

[Crea una clave de API en el panel aquí](https://elevenlabs.io/app/settings/api-keys), que usarás para [acceder a la API](/docs/es/api-reference/authentication) de forma segura.

Guarda la clave como un secreto gestionado y pásala a los SDK como variable de entorno mediante un archivo `.env` o directamente en la configuración de tu aplicación, según prefieras.

**`.env`**

```js title=".env"
ELEVENLABS_API_KEY=<your_api_key_here>
```

#### Instalar el SDK

#### SDK

También usaremos la biblioteca `dotenv` para cargar nuestra clave de API desde una variable de entorno.

```python
pip install elevenlabs
pip install python-dotenv
```

```typescript
npm install @elevenlabs/elevenlabs-js
npm install dotenv
```

#### CLI

Instala la CLI de ElevenLabs. Recomendamos Homebrew (macOS) y Scoop (Windows).

**`Homebrew (macOS)`**

```bash title="Homebrew (macOS)"
brew install elevenlabs/tap/elevenlabs
```

**`Scoop (Windows)`**

```powershell title="Scoop (Windows)"
scoop bucket add elevenlabs https://github.com/elevenlabs/scoop-bucket
scoop install elevenlabs
```

**`npm`**

```bash title="npm"
npm install -g @elevenlabs/cli
```

**`curl`**

```bash title="curl"
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/elevenlabs/cli/releases/latest/download/elevenlabs-cli-installer.sh | sh
```

> **Tip**
>
> ¿Trabajas con un asistente de programación con IA? Ejecuta `elevenlabs generate-skills` en tu proyecto para crear un
> `SKILL.md` para cada grupo de comandos en `skills/`, para que tu asistente conozca todas las funciones de la CLI
> sin que tengas que pegar la documentación. Usa `--output-dir` para guardarlos en otro lugar. Esto lee la definición de la API
> integrada en la propia CLI, por lo que no necesita una clave de API y funciona sin conexión; además, se mantiene al día con
> la versión de la CLI que tengas instalada.

Después, autentícate; se abrirá el navegador para autorizar la CLI:

```bash
elevenlabs auth login
```

> **Note**
>
> El ejemplo de Python utiliza la biblioteca `requests` para descargar el audio doblado.
> Instálala con `pip install requests`.

#### Hacer la solicitud a la API

#### SDK

Crea un archivo llamado `example.py` o `example.mts`, según el lenguaje que elijas, y añade el siguiente código:

```python maxLines=0
# example.py
import os
import time
import requests
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs

load_dotenv()

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

# 1. Create a project from a source URL
project = elevenlabs.dubbing.project.create(
    source_url="https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
    source_language="en",
    reference="Quickstart dub",
)

# 2. Wait for the source media to be transcribed
while True:
    project = elevenlabs.dubbing.project.get(project.project_id)
    if project.status == "ready":
        break
    if project.status == "failed":
        raise RuntimeError("Project preparation failed")
    print("Preparing project...")
    time.sleep(5)

# 3. Add a Spanish language target
language = elevenlabs.dubbing.project.language.create(
    project.project_id,
    target_language="es",
)

# 4. Wait for the dub to finish generating
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("Dub generation failed")
    print("Generating dub...")
    time.sleep(5)

# 5. Download the dubbed audio from the signed URL
audio = requests.get(language.outputs.lossless_audio)
with open("dubbed.wav", "wb") as f:
    f.write(audio.content)

print("Saved dubbed audio to dubbed.wav")
```

```typescript maxLines=0
// example.mts
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { writeFile } from "fs/promises";
import "dotenv/config";

const elevenlabs = new ElevenLabsClient();

// 1. Create a project from a source URL
let project = await elevenlabs.dubbing.project.create({
  sourceUrl:
    "https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
  sourceLanguage: "en",
  reference: "Quickstart dub",
});

// 2. Wait for the source media to be transcribed
while (true) {
  project = await elevenlabs.dubbing.project.get(project.projectId);
  if (project.status === "ready") break;
  if (project.status === "failed") throw new Error("Project preparation failed");
  console.log("Preparing project...");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 3. Add a Spanish language target
let language = await elevenlabs.dubbing.project.language.create(project.projectId, {
  targetLanguage: "es",
});

// 4. Wait for the dub to finish generating
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("Dub generation failed");
  console.log("Generating dub...");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 5. Download the dubbed audio from the signed URL
const response = await fetch(language.outputs!.losslessAudio!);
const buffer = Buffer.from(await response.arrayBuffer());
await writeFile("dubbed.wav", buffer);

console.log("Saved dubbed audio to dubbed.wav");
```

> **Note**
>
> La URL de descarga de `outputs.lossless_audio` está firmada y caduca aproximadamente una hora después de emitirse. Recupera de nuevo el idioma para obtener una URL nueva si ha caducado.

Después, ejecútalo:

```python
python example.py
```

```typescript
npx tsx example.mts
```

El audio doblado se guarda en `dubbed.wav` en tu directorio de trabajo.

#### CLI

La CLI sigue el mismo flujo. Cada paso muestra JSON: copia `project_id` y `language_id` de las respuestas en el siguiente comando y consulta los comandos `get` hasta que el estado se estabilice.

```bash
# 1. Create a project from a source URL (note the returned project_id)
elevenlabs dubbing project create \
  --source-url https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3 \
  --source-language en \
  --reference "Quickstart dub"

# 2. Poll until the project status is "ready"
elevenlabs dubbing project get --project-id <project_id> --query status

# 3. Add a Spanish language target (note the returned language_id)
elevenlabs dubbing project language create --project-id <project_id> --target-language es

# 4. Poll until the language status is "completed"
elevenlabs dubbing project language get \
  --project-id <project_id> --language-id <language_id> --query status

# 5. Get the signed download URL, then save the dubbed audio
elevenlabs dubbing project language get \
  --project-id <project_id> --language-id <language_id> --query outputs.lossless_audio

curl -o dubbed.wav "<lossless_audio_url>"
```

El audio doblado se guarda en `dubbed.wav` en tu directorio de trabajo.

## Gestionar errores

Si no puedes añadir un idioma, vuelve a añadir el mismo idioma al proyecto existente en lugar de crear uno nuevo. El proyecto y su fuente transcrita se pueden reutilizar, por lo que reintentar el idioma es más rápido y evita pagar por segunda vez el [coste mínimo de un idioma](/docs/es/help-center/product/dubbing/how-much-does-dubbing-cost).

Crea un proyecto nuevo solo si el propio proyecto alcanza `failed` durante la preparación, lo que significa que no se ha podido transcribir su fuente. Comprueba el archivo o la URL de origen y crea un proyecto nuevo.

> **Tip**
>
> Los espacios de trabajo Enterprise pueden revisar y corregir la transcripción de origen antes de añadir un idioma, lo que genera traducciones más precisas. Consulta [Perfeccionar y regenerar un doblaje](/docs/es/eleven-api/guides/how-to/dubbing/refine-and-regenerate).

## Próximos pasos

#### [Usar tu propia transcripción](/docs/es/eleven-api/guides/how-to/dubbing/bring-your-own-transcript)

Crea un proyecto a partir de una transcripción existente y proporciona tus propias traducciones

#### [Perfeccionar y regenerar un doblaje](/docs/es/eleven-api/guides/how-to/dubbing/refine-and-regenerate)

Edita la transcripción y las traducciones de origen, y después regenera el doblaje

#### [Doblar en varios idiomas](/docs/es/eleven-api/guides/how-to/dubbing/multiple-languages)

Añade varios idiomas de destino a un mismo proyecto

#### [Referencia de la API](/docs/es/api-reference/dubbing/create-project)

Consulta todos los parámetros y formatos de respuesta de la API de Doblaje