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

# Usa tu propia transcripción

> **Note**
>
> **Guía práctica** · Da por hecho que sabes crear proyectos de doblaje, como se muestra en la
> [guía de inicio rápido de Doblaje](/docs/es/eleven-api/guides/cookbooks/dubbing).

> **Warning**
>
> Proporcionar tu propia transcripción y traducciones solo está disponible para espacios de trabajo Enterprise. Ponte en contacto con
> [ventas](https://elevenlabs.io/contact-sales) para obtener acceso.

De forma predeterminada, la API de Doblaje transcribe tu contenido multimedia de origen y traduce automáticamente la transcripción a cada idioma de destino. Si ya tienes una transcripción precisa —subtítulos, un guion o texto traducido profesionalmente—, puedes proporcionarla en su lugar. Esta guía explica el formato del archivo de transcripción, cómo crear un proyecto a partir de una transcripción y cómo proporcionar tus propias traducciones al añadir un idioma.

## Formato del archivo de transcripción

Una transcripción es un archivo JSON con un único array `segments` de nivel superior. Cada segmento es una intervención: el texto hablado, cuándo empieza y termina y, opcionalmente, quién lo dice.

**`transcript.json`**

```json title="transcript.json"
{
  "segments": [
    {
      "external_id": "line_0",
      "speaker_id": "speaker_0",
      "start_s": 0.0,
      "end_s": 14.5,
      "text": "With my soft and whispery American accent, I'm the ideal choice for creating ASMR content, meditation guides, or adding an intimate feel to your narrative projects."
    }
  ]
}
```

| Campo         | Obligatorio | Descripción                                                                                                                                                                                                 |
| ------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `text`        | Sí          | El texto hablado durante el segmento.                                                                                                                                                                       |
| `start_s`     | Sí          | Hora de inicio del segmento, en segundos.                                                                                                                                                                   |
| `end_s`       | Sí          | Hora de finalización del segmento, en segundos.                                                                                                                                                             |
| `speaker_id`  | No          | Identificador que agrupa los segmentos hablados por la misma persona, para que cada persona se doble con una voz coherente. Los segmentos que lo omitan comparten una sola persona predeterminada.          |
| `external_id` | No          | Tu propio identificador para el segmento, de un máximo de 128 caracteres y único dentro de la transcripción. Se utiliza como clave para las traducciones y se devuelve en cada lectura de la transcripción. |
| `translation` | No          | Texto traducido del segmento, utilizado para inicializar el idioma de destino creado mediante `target_language`. Si algún segmento incluye uno, deben incluirlo todos.                                      |

### Reglas de los segmentos

La transcripción se valida al crear el proyecto:

* Los segmentos deben estar ordenados por `start_s`.
* Un segmento debe durar entre 0,1 y 25 segundos, y `end_s` debe ser mayor que `start_s`.
* Los segmentos con el mismo `speaker_id` no deben solaparse, aunque pueden coincidir en un punto final. Los segmentos de personas distintas pueden solaparse para representar habla simultánea.
* Una transcripción puede contener como máximo 20.000 segmentos y el archivo puede tener un tamaño máximo de 4 MiB.

Es preferible usar segmentos cortos en lugar de largos: divide las frases donde haya una pausa de un segundo o más. Los límites de los segmentos determinan cómo se sincroniza el audio doblado con el original, por lo que una transcripción con pausas naturales y precisas genera un doblaje mejor sincronizado.

## Crea un proyecto a partir de tu transcripción

Pasa el archivo de transcripción al crear el proyecto. `source_language` es obligatorio al proporcionar una transcripción, ya que el contenido multimedia de origen no se transcribe automáticamente. 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 aceptados.

```python
import os
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs

load_dotenv()

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

with open("transcript.json", "rb") as transcript:
    project = elevenlabs.dubbing.project.create(
        source_url="https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
        source_language="en",
        transcript=transcript,
    )

print(project.project_id)
```

```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import "dotenv/config";
import { createReadStream } from "fs";

const elevenlabs = new ElevenLabsClient();

const project = await elevenlabs.dubbing.project.create({
  sourceUrl: "https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
  sourceLanguage: "en",
  transcript: createReadStream("transcript.json"),
});

console.log(project.projectId);
```

El proyecto debe seguir procesando el contenido multimedia de origen antes de poder doblarse, así que consulta su estado hasta que sea `ready`, como se muestra en la [guía de inicio rápido](/docs/es/eleven-api/guides/cookbooks/dubbing). Tus segmentos se utilizan tal cual; no se ejecuta ninguna transcripción automática.

## Proporciona tus propias traducciones

Al añadir un idioma de destino, pasa un mapa `translations` para usar tus propias traducciones en lugar de la traducción automática. El mapa usa como clave el `external_id` de cada segmento de origen o su `id` de segmento interno si no proporcionaste uno, y debe cubrir cada segmento de origen exactamente una vez.

```python
project_id = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3"

language = elevenlabs.dubbing.project.language.create(
    project_id,
    target_language="fr",
    translations={
        "line_0": "Avec mon accent américain doux et murmuré, je suis le choix idéal pour créer du contenu ASMR, des guides de méditation, ou pour apporter une touche d'intimité à vos projets narratifs.",
    },
)
```

```typescript
const projectId = "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3";

const language = await elevenlabs.dubbing.project.language.create(projectId, {
  targetLanguage: "fr",
  translations: {
    line_0:
      "Avec mon accent américain doux et murmuré, je suis le choix idéal pour créer du contenu ASMR, des guides de méditation, ou pour apporter une touche d'intimité à vos projets narratifs.",
  },
});
```

Cada idioma de destino requiere una llamada de creación, así que repite esta solicitud para cada idioma al que quieras doblar. Un mapa `translations` puede contener como máximo 20.000 entradas que sumen un máximo de 4 MiB de texto.

Si tus segmentos no tienen `external_id`, lee la transcripción de origen para obtener el `id` interno de cada segmento y úsalo como clave:

```python
transcript = elevenlabs.dubbing.project.transcript.get(project_id)
for segment in transcript.segments:
    print(segment.id, segment.text)
```

```typescript
const transcript = await elevenlabs.dubbing.project.transcript.get(projectId);
for (const segment of transcript.segments) {
  console.log(segment.id, segment.text);
}
```

### Inicializa traducciones al crear el proyecto

Para un único idioma de destino, puedes omitir el mapa `translations` independiente incluyendo una `translation` en cada segmento del archivo de transcripción y pasando `target_language` al crear el proyecto. El idioma de destino se crea en cola con tus traducciones y empieza a generarse cuando el proyecto está listo.

**`transcript.json`**

```json title="transcript.json"
{
  "segments": [
    {
      "external_id": "line_0",
      "speaker_id": "speaker_0",
      "start_s": 0.0,
      "end_s": 14.5,
      "text": "With my soft and whispery American accent, I'm the ideal choice for creating ASMR content, meditation guides, or adding an intimate feel to your narrative projects.",
      "translation": "Avec mon accent américain doux et murmuré, je suis le choix idéal pour créer du contenu ASMR, des guides de méditation, ou pour apporter une touche d'intimité à vos projets narratifs."
    }
  ]
}
```

## Consideraciones sobre la calidad

La calidad del doblaje depende de la transcripción y las traducciones en las que se basa. Los tiempos y el texto de los segmentos se usan directamente para sincronizar y dar voz a la interpretación doblada, por lo que los tiempos o textos imprecisos empeoran el resultado. Las traducciones se interpretan para ajustarse a la duración de su segmento: una traducción mucho más larga o corta que el original afecta al ritmo del habla doblada, así que procura que las traducciones tengan una duración hablada similar.

## Siguientes pasos

#### [Perfecciona y vuelve a generar un doblaje](/docs/es/eleven-api/guides/how-to/dubbing/refine-and-regenerate)

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

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

Añade varios idiomas de destino a un único proyecto

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

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