API de texto a voz para locución de video

Envía tu guion sincronizado junto con una grabación de video o audio, y genera voz adaptada a su línea de tiempo. Elige voces AI de la biblioteca o una clonación de voz, en más de 135 idiomas y variantes regionales, y descarga la locución, el video y los subtítulos desde el mismo proyecto.
De guion a locución
Voces AI y clonación de voz
REST + Python SDK
script in, voiceover out
OAuth 2.0
# 1. send your script as timed segments - one speaker per line
curl -X POST https://api.rask.ai/v2/transcriptions \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"segments": [
    {"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
     "src": {"text": "Welcome to the new dashboard.", "lang": "en"},
     "dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}}
  ]}'

# 2. voice the script over your video
curl -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\", \"transcript_id\": \"$TRANSCRIPT_ID\"}"
GET /v2/projects/{project_id}
voiceover links
# When status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
  | jq '{status, voiceover, translated_audio, translated_video}'
Utilizado por equipos globales
Funciones

Todo lo que la API de texto a voz hace por tus videos

Transforma un guion escrito en una locución que encaje con la imagen: la voz adecuada para cada hablante, la sincronización exacta de tus segmentos, audio de fondo, subtítulos y traducción en un solo proyecto. Agrega sincronización labial opcional, facturada por separado.

Tu guion, hablado

Crea una transcripción a partir de tus propios segmentos de texto o un archivo SRT, y la API generará la voz exactamente con ese guion en el idioma de destino.

Biblioteca de voces

Cada región de destino cuenta con voces AI predefinidas con un género específico. Consúltalas para un proyecto con el endpoint de voces y asígnale una a cada hablante mediante su ID de voz.

Voces personalizadas y clonación de voz

Usa una clonación de voz personalizada guardada como la voz oficial de tu marca, o mantén la voz propia de quien aparece en pantalla con la clonación instantánea de voz, en los idiomas compatibles con esta tecnología.

Sincronizado con la imagen

Cada segmento tiene un tiempo de inicio y de fin, por lo que cada línea de voz encaja exactamente donde debe en el video.

Voces de personajes y diálogos

Asigna un hablante a cada línea y una voz a cada hablante, para que un diálogo o un elenco de personajes se mantenga claro y consistente.

Más de 135 idiomas y variantes regionales

Escribe el guion en un idioma y dale voz en otro: Rask AI lo traduce y hay voces AI disponibles para cada región de destino.

Pista de audio de solo voz

En los planes elegibles, descarga el audio hablado como pista WAV sin sonidos de fondo, lista para tu propia edición, o bien la mezcla completa y el video finalizado.

Edita una línea, regenera una línea

Modifica el texto de un segmento o la voz de un hablante y vuelve a generarlo. Nadie tiene que grabar de nuevo y solo se cobran los segmentos modificados.

Escala sin límites

Sin límites de velocidad, sin cuotas de simultaneidad y sin restricciones por clave. Dale voz a contenido de formato largo y catálogos completos de video en paralelo.
Míralo en acción

Escucha una imagen con voz en cinco idiomas

El mismo clip con voz en inglés, francés, alemán, portugués y español, sincronizado con la imagen y con el audio de fondo original intacto.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Flujo de trabajo

Tres pasos del guion a la voz en off

Crear el proyecto inicia la generación de voz para tu guion. Usa el endpoint /generate después de cambiar el texto o las voces.
1

Sube un video o audio

Sube el video o la grabación de audio a la que pertenece tu voz en off usando un archivo o una URL de medios compatible. Su línea de tiempo establece el tiempo de tu guion.

POST /api/library/v1/media/link
2

Envía tu guion

Crea una transcripción a partir de fragmentos de texto con marcas de tiempo y hablantes, o desde un archivo SRT, y luego crea el proyecto con su transcript_id y un idioma de destino.

POST /v2/transcriptions
3

Elige voces y descarga

Enumera las voces, asigna un preajuste o una clonación a cada hablante, vuelve a generar si es necesario y descarga la voz en off, el video y los archivos de subtítulos.

GET /v2/projects/{id}/voices
El tiempo de procesamiento varía según el proyecto. La voz se genera para todo el proyecto y se entrega como archivos, por lo que esta API se adapta mejor a videos publicados que a conversaciones en vivo.
Diseñado a tu medida

¿Necesitas una voz que no está en la biblioteca? Habla con nuestro equipo

Una voz de marca, un idioma fuera del catálogo, mayor rendimiento o tu propio método de entrega: cuando una integración de voz en off necesita algo fuera del catálogo público, nuestro equipo revisa tus requisitos y las opciones disponibles.

Idiomas y voces

¿Necesitas un idioma o una voz que no esté en el catálogo público? Cuéntale a nuestro equipo sobre tus requerimientos y las opciones disponibles.

Entrega e integración

Webhooks, envío a tu propia cola, entrega directa a tu S3, endpoints personalizados. Cuéntanos cómo quieres alimentar tu flujo.

Volumen y capacidad

El tamaño de los lotes, los idiomas de destino por acción y la prioridad de procesamiento son términos contractuales, no límites fijos del producto.

Seguridad y alojamiento

La residencia de datos, SSO y SAML, las reglas de retención y el soporte para revisión de seguridad se gestionan como parte de la incorporación para empresas.
Casos de uso

Quién usa una API de texto a voz para video

Plataformas con video integrado

Plataformas de LMS y educación de clientes, plataformas de creadores y de video, herramientas de seminarios web y eventos virtuales, SaaS de alojamiento de video y flujos de trabajo, plataformas de adopción digital y compras en vivo. Permite que los usuarios escriban o suban un guion y obtengan la voz en off para sus videos en varios idiomas sin salir de tu producto.

Agencias de localización y producción

Aprueba guiones con voces en off para videos de clientes usando voces AI o la voz personalizada de un cliente, y entrega el archivo WAV solo de voz para tu propia mezcla. Actualiza una línea después de la revisión y vuelve a generar solo ese segmento.

Producción interna de video continua

Retail internacional y comercio electrónico, franquicias globales, medios de comunicación y universidades corporativas. Produce voces en off para videos de capacitación, de productos y de marketing a partir de un guion escrito, y actualiza el texto cuando el producto cambie.
Casos de éxito

Equipos reales, resultados medibles

Cómo las empresas localizan videos con Rask, en sus propios números.
flecha
flecha
Código

Ejemplos de código de la API de texto a voz

Un ejemplo completo en cada idioma: envía un guion como fragmentos sincronizados, crea el proyecto, elige una voz de la biblioteca, vuelve a generar y descarga la voz en off.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas

async def wait(client, job):
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)
    return job

async def main():
    client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)

    script = await client.create_transcription(data=schemas.TranscriptionCreate(segments=[
        schemas.SegmentCreate(speaker="SPEAKER_00", start="00:00:00,500", end="00:00:04,800",
            src=schemas.SegmentTextCreatePatch(text="Welcome to the new dashboard.", lang="en"),
            dst=schemas.SegmentTextCreatePatch(text="Bienvenido al nuevo panel.", lang="es-mx")),
    ]))

    job = await wait(client, await client.create_project(data=schemas.ProjectCreate(
        video_id=VIDEO_ID, dst_lang="es-mx", transcript_id=script.id)))

    # pick a female AI voice preset from the library for SPEAKER_00
    voices = await client.get_project_voices(project_id=job.id)
    preset = next(v for v in voices if v.gender == "female")
    await client.patch_project(project_id=job.id, data=schemas.ProjectPatch(voice={**job.voice, "SPEAKER_00": preset.id}))

    job = await wait(client, await client.generate_project(project_id=job.id))
    print(job.voiceover, job.translated_video)

asyncio.run(main())
github.com/braskai/rask-sdk
async, typed models
import time, requests

AUTH = "https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token"
API  = "https://api.rask.ai"
token = requests.post(AUTH, auth=(CLIENT_ID, CLIENT_SECRET),
                      data={"grant_type": "client_credentials"}).json()["access_token"]
h = {"Authorization": f"Bearer {token}"}

def wait(pid):
    while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
        time.sleep(10)
    return p

script = requests.post(f"{API}/v2/transcriptions", headers=h, json={"segments": [
        {"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
         "src": {"text": "Welcome to the new dashboard.", "lang": "en"},
         "dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}},
    ]}).json()

pid = requests.post(f"{API}/v2/projects", headers=h, json={
    "video_id": VIDEO_ID, "dst_lang": "es-mx", "transcript_id": script["id"]}).json()["id"]
project = wait(pid)

voices = requests.get(f"{API}/v2/projects/{pid}/voices", headers=h).json()
preset = next(v for v in voices if v["gender"] == "female")
requests.patch(f"{API}/v2/projects/{pid}", headers=h,
               json={"voice": {**project["voice"], "SPEAKER_00": preset["id"]}})
requests.post(f"{API}/v2/projects/{pid}/generate", headers=h)
print(wait(pid)["voiceover"])
requests + polling
no SDK required
// no dependencies, Node 18+ global fetch
const API = 'https://api.rask.ai';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const auth = await fetch('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token', {
  method: 'POST',
  headers: { Authorization: 'Basic ' + btoa(`${CLIENT_ID}:${CLIENT_SECRET}`) },
  body: new URLSearchParams({ grant_type: 'client_credentials' }),
}).then((r) => r.json());
const h = { Authorization: `Bearer ${auth.access_token}`, 'Content-Type': 'application/json' };
const call = (method, path, body) => fetch(API + path, { method, headers: h, body: body && JSON.stringify(body) }).then((r) => r.json());
const wait = async (id) => { let p; while ((p = await call('GET', `/v2/projects/${id}`)).status !== 'merging_done') await sleep(10000); return p; };

const script = await call('POST', '/v2/transcriptions', { segments: [
  { speaker: 'SPEAKER_00', start: '00:00:00,500', end: '00:00:04,800',
    src: { text: 'Welcome to the new dashboard.', lang: 'en' },
    dst: { text: 'Bienvenido al nuevo panel.', lang: 'es-mx' } },
] });

const { id } = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang: 'es-mx', transcript_id: script.id });
const project = await wait(id);

const voices = await call('GET', `/v2/projects/${id}/voices`);
const preset = voices.find((v) => v.gender === 'female');
await call('PATCH', `/v2/projects/${id}`, { voice: { ...project.voice, SPEAKER_00: preset.id } });
await call('POST', `/v2/projects/${id}/generate`);
console.log((await wait(id)).voiceover);
fetch, Node 18+
plain HTTP
# 1. token (valid 1 hour - cache and reuse it)
TOKEN=$(curl -s -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
  -u "$CLIENT_ID:$CLIENT_SECRET" -d "grant_type=client_credentials" | jq -r .access_token)

# 2. your script as an SRT file in the target language
TRANSCRIPT_ID=$(curl -s -X POST "https://api.rask.ai/v2/transcriptions/srt?dst_lang=es-mx" \
  -H "Authorization: Bearer $TOKEN" -F "dst=@script_es-mx.srt" | jq -r .id)

# 3. voice it over the video
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\", \"transcript_id\": \"$TRANSCRIPT_ID\"}" | jq -r .id)

# 4. when status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
  | jq '{status, voiceover, translated_video}'
POST /v2/transcriptions/srt
script from an SRT file
<?php
use GuzzleHttp\Client;

$http = new Client(['base_uri' => 'https://api.rask.ai']);
$json = fn($r) => json_decode($r->getBody(), true);
$auth = $json((new Client)->post('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
    ['auth' => [$clientId, $clientSecret], 'form_params' => ['grant_type' => 'client_credentials']]));
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];

$script = $json($http->post('/v2/transcriptions', ['headers' => $h, 'json' => ['segments' => [[
    'speaker' => 'SPEAKER_00', 'start' => '00:00:00,500', 'end' => '00:00:04,800',
    'src' => ['text' => 'Welcome to the new dashboard.', 'lang' => 'en'],
    'dst' => ['text' => 'Bienvenido al nuevo panel.', 'lang' => 'es-mx'],
]]]]));

$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
    'video_id' => $videoId, 'dst_lang' => 'es-mx', 'transcript_id' => $script['id']]]));

while ($p['status'] !== 'merging_done') {
    sleep(10);
    $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['voiceover'];
Guzzle 7
plain HTTP
Python es el SDK oficial. Las pestañas de Node, PHP y cURL son ejemplos de HTTP plano para los mismos endpoints.
Progreso

Cómo un proyecto de voz en off reporta su progreso

La generación de voz se ejecuta como un proyecto con estados documentados para que puedas mostrar el progreso real incluso en contenido de formato largo. Solo necesitas actuar en tres grupos.

Éxito, detente aquí

merging_done
La voz en off está lista. Obtén el proyecto una vez más para recuperar los enlaces de descarga disponibles para tu proyecto.

En progreso, continúa consultando

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
Además del equivalente _done estados. Estos se adaptan perfectamente a una interfaz de progreso por etapas.

Error, detener y reportar

failed
upload_failed
transcription_failed
translation_failed
voiceover_failed
merging_failed
no_audio
no_words
forbidden_link
no_audio, no_words y forbidden_link son lo suficientemente específicos como para mostrárselos directamente a tu propio usuario.
Voice options in a project, es-mx
GET /v2/projects/{project_id}/voices
{"label": "Renata",      "gender": "female", "sample_src": "https://..."}   AI voice preset
{"label": "Gerardo",     "gender": "male",   "sample_src": "https://..."}   AI voice preset
{"label": "Maria Lopez", "gender": "auto",   "sample_src": "https://..."}   custom voice clone
{"label": "Voice Clone", "gender": "auto",   "sample_src": null}            instant voice clone

O puedes omitir el sondeo por completo

Apúntanos a un endpoint de webhook y cada cambio de estado llegará como una petición POST, para que tu cola de tareas reaccione a cada cambio en el momento en que ocurre. La entrega por webhook forma parte de la incorporación para empresas (enterprise).
Leer la documentación
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
Resultado

Audio de voz en off, video y subtítulos

Descarga el video con la nueva voz en off y subtítulos en SRT y VTT. En los planes elegibles, también puedes descargar el audio hablado por separado como WAV, o mezclado con el audio de fondo original.
Campo
Formato
Qué es
translated_video
MP4
El video con la voz en off generada, listo para publicar
voiceover
WAV
Solo la voz generada, sin música de fondo, lista para tu propia edición
translated_audio
WAV
Voz traducida mezclada con el audio de fondo original
translation_srt_path
.srt
Subtítulos en el idioma de destino
translation_vtt_path
.vtt
Mismos subtítulos en formato WebVTT para reproductores web
original_video
MP4
Tu archivo de origen guardado como referencia
Control

Cambia una línea o una voz y vuelve a generar solo esa parte

Tu guion se guarda por segmentos. Edita el texto de una línea o cambia la voz de un orador, vuelve a generar y solo se cobran los segmentos modificados, con un mínimo de un minuto por proceso.

Edición por segmentos

Edición por segmentos
Cada proyecto muestra su guion en segmentos con marcas de tiempo, oradores y texto, por lo que hacer una corrección es tan fácil como enviar una solicitud de actualización.
Obtén la transcripción y sus segmentos
Actualiza el texto original y nosotros volvemos a hacer la traducción
Modifica el texto traducido directamente para conservar tus propias palabras
Ajusta las marcas de tiempo, agrega segmentos o elimínalos
Cambia la voz asignada a cualquier hablante

Glosarios para tu terminología

Glosarios para tu terminología
Cuando Rask traduce tu guion a otros idiomas, un glosario se encarga de mantener los nombres de marca y los términos técnicos iguales en todas las versiones, o bien en su idioma original si así lo deseas.

Un glosario cubre un par de idiomas y se aplica a todas las variantes regionales de ese idioma de destino; por lo tanto, un solo glosario en español funciona para es-mx y es-es por igual. El proyecto registra glossary_version, de modo que las ediciones posteriores nunca modifiquen el trabajo finalizado en segundo plano.
Entrada

Formatos de archivo compatibles

Sube el video de tu voz en cualquier formato compatible o envía un enlace. Los guiones se reciben como segmentos de texto a través de la API o como archivos SRT.

Video

7 formatos
.mp4
.mov
.mkv
.avi
.webm
.m4v
.3gp

Audio

4 formatos
.mp3
.wav
.flac
.m4a

Metadatos antes de gastar

El endpoint de medios devuelve la duración, el tamaño del archivo, el códec de video, la velocidad de cuadros, la resolución, el códec de audio, la frecuencia de muestreo y la distribución de canales. Valida un archivo y calcula el costo por adelantado, ya que el servicio de voz se cobra por minuto de video y no por caracter.
Seguridad y cumplimiento normativo

Seguridad de nivel empresarial para tus guiones y voces

Brask Inc cuenta con la certificación SOC 2 Tipo II, opera bajo las normas de GDPR y publica el estado de sus controles en tiempo real en su Centro de Confianza. Las clonaciones de voz personalizadas se realizan con el consentimiento del orador.

Certificaciones

SOC 2 Type II
GDPR
Miembro de CAI y C2PA

Cifrado

TLS 1.2 en tránsito
AES-256 en reposo
Llaves administradas SSE-S3
Rotación de llaves al menos cada 12 meses

Tu contenido

Entorno de AI cerrado
Nunca se usa para entrenar modelos generales
Exportación completa, sin ataduras

Acceso

SSO y SAML
Control de acceso basado en roles
Credenciales de cliente OAuth 2.0

Empresa

Opciones de residencia de datos
SLA personalizados
Gerente de cuenta dedicado

Derechos de voz

Voces sintéticas con derechos de uso
Clonación de voz basada en consentimiento
Controles de seguridad de AI, supervisión humana
Comparación

Rask API en comparación con un proceso de voz creado por ti mismo

Una API de conversión de texto a voz por streaming transforma texto en audio para uso en tiempo real. La voz para videos publicados también necesita sincronización de tiempo, una voz por cada orador, mezcla, subtítulos y, por lo general, traducción. Aquí tienes el mismo servicio de voz armado de dos formas diferentes.
Lo que necesitas
Rask API
Armado por partes
Un guion sincronizado con el video
Segmentos con hora de inicio y de fin
Tu propia lógica de alineación
Una voz para cada orador o personaje
Mapa de voces por proyecto
IDs de voz administrados por solicitud
Una voz de marca consistente
Clonación de voz personalizada
Un proveedor de clonación independiente
El mismo guion en otros idiomas
Traducción en el mismo proyecto
Una API de traducción más nueva sincronización de tiempo
Música de fondo y efectos
Mezclados debajo de la voz
Tu propio paso de mezcla
Subtítulos en formato .srt y .vtt
Incluido
Generado a partir de tus propios datos de tiempo
Una pista de audio solo de voz
WAV en los planes elegibles
Fragmentos de audio que unes por tu cuenta
Cambiar una línea
Regenera los segmentos modificados
Vuelve a sintetizar y mezclar el archivo
Límites de velocidad
Ninguno
Lo que establezca tu proveedor
Agentes de voz en vivo con transmisión
Usa una API de conversión de texto a voz con streaming
Diseñado para esto
Preguntas frecuentes

API de conversión de texto a voz: preguntas frecuentes

¿No encuentras lo que buscas? Ponte en contacto con el departamento de ventas.

¿Rask tiene una API de conversión de texto a voz?

¿Puedo usarlo para agentes de voz o centros de contacto?

¿La API admite la salida de audio en streaming?

¿Cómo envío mi guion?

¿Qué voces están disponibles?

¿Puedo usar una voz personalizada?

¿Qué idiomas son compatibles?

¿Admiten etiquetas SSML o pronunciaciones personalizadas?

¿Puedo controlar la emoción y la expresividad?

¿Necesito un video para generar voz?

¿Se cobra por carácter?

¿Hay un nivel gratuito o créditos gratis?

¿Cómo obtengo acceso a la API y una clave de API?

Empieza a hacer doblaje en una sola tarde

Haz tu primera solicitud hoy y habla con nosotros cuando necesites tarifas por volumen o un idioma que nadie más tenga.