API de sincronización labial para video doblado

Sincroniza los movimientos de la boca con el discurso doblado en más de 135 opciones de idiomas y regiones. Dobla tu video a través de la API, aplica la sincronización labial al resultado y descarga un video donde la persona en pantalla dice las nuevas palabras. Primero se realiza una verificación de rostros. La sincronización labial se factura por separado del doblaje para cada generación de video completo, incluidas las regeneraciones después de realizar ediciones.
Minuto de vista previa gratis
Varios rostros en pantalla
REST + Python SDK
check, preview, sync
OAuth 2.0
# 1. on a dubbed project: confirm the video has a face (runs once, usually automatically)
curl https://api.rask.ai/v2/projects/$ID/lipsync \
  -H "Authorization: Bearer $TOKEN"
#  "check_face_task_status": "done", "video_has_face": true

# 2. preview one free minute of lip-sync
curl -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"is_multiple_speakers": true, "is_free_lipsync": true}'

# 3. lip-sync the full video - billed separately from dubbing
curl -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"is_multiple_speakers": true, "is_free_lipsync": false}'
GET /v2/projects/{project_id}/lipsync
polling, 15s
# Poll until lipsync_task_status is done, then download lipsync_result_path
while :; do
  curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
    | jq '{lipsync_task_status, lipsync_task_progress, tasks_in_lipsync_queue}'
  sleep 15
done
Utilizado por equipos globales
Funciones

Todo lo que hace la API de sincronización labial

Agrega sincronización labial a tus videos doblados. Verifica si hay un rostro visible, usa el minuto de vista previa gratis de tu cuenta si está disponible y sigue el progreso a través de la API. La sincronización labial de videos completos se factura por separado del doblaje cada vez que la generes.

Sincronización labial en video traducido

Sincroniza los movimientos de la boca con el discurso doblado en un video que tu proyecto haya traducido, utilizando el catálogo compatible de más de 135 opciones de idiomas y regiones.

Verificación automática de rostros

Antes de la sincronización labial, una tarea de verificación de rostros confirma que el video tiene al menos un rostro. Se ejecuta una vez por proyecto, generalmente por sí sola, para que conozcas el resultado antes de gastar minutos.

Varios rostros en pantalla

Configura is_multiple_speakers en true para entrevistas, paneles y diálogos con múltiples oradores. Cuando solo haya un rostro en pantalla a la vez, configúralo en false para acelerar el procesamiento.

Un minuto de vista previa gratis

Todas las cuentas obtienen un minuto gratis de sincronización labial. Ejecútalo con is_free_lipsync en tu propio material y revisa el resultado antes de sincronizar el video completo.

Facturación independiente para cada generación

Cada generación de video completo con sincronización labial se cobra por separado del doblaje. Después de editar el guion o las voces, vuelve a doblar el proyecto y genera una nueva versión sincronizada, lo cual generará un nuevo cobro por la sincronización labial.

Posición en la cola y progreso

El endpoint de información de sincronización labial devuelve el número de tareas que están antes de la tuya y el progreso del 0 al 100, para que tus usuarios vean el avance real.

Voces que coinciden con el rostro

La sincronización labial funciona con la voz que el proyecto use para cada orador: ya sea su voz clonada o una voz AI preestablecida.

Edita, vuelve a doblar y vuelve a sincronizar

Cambia el texto, la sincronización o las voces, vuelve a doblar el proyecto y luego ejecuta la sincronización labial nuevamente en la nueva versión. No es necesario volver a realizar la verificación de rostros.

Escala sin límites

Sin límites de frecuencia, sin cuota de concurrencia y sin restricciones por clave. Envía tareas de sincronización labial para todo tu catálogo y la posición en la cola te indicará en qué estado se encuentra cada una.
Míralo en acción

Del discurso doblado a la sincronización de los movimientos de los labios

El mismo clip doblado al francés, alemán, portugués y español. En un proyecto de doblaje como este, la sincronización labial ajusta la posición de los labios al nuevo discurso.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Flujo de trabajo

Tres pasos del video doblado al video con sincronización labial

La sincronización labial se ejecuta en un proyecto que ya cuenta con doblaje. Usa el endpoint /generate para volver a doblar después de hacer ediciones y, luego, sincroniza los labios de nuevo.
1

Dobla el video

Sube el video original o envía una URL pública, crea un proyecto con el idioma de destino y espera a que aparezca merging_done. La sincronización labial necesita el translated_video de este proyecto.

POST /v2/projects
2

Verifica el rostro

La tarea de verificación del rostro confirma que hay al menos un rostro en el video. Por lo general, se inicia de forma automática. Si no ha comenzado, ejecútala tú mismo una vez para el proyecto.

PUT /v2/projects/{id}/check_face
3

Ejecuta la sincronización labial y descarga

Ejecuta la tarea de sincronización labial, sigue el progreso en lipsync_task_progress del 0 al 100 y, después, descarga el video desde lipsync_result_path.

PUT /v2/projects/{id}/lipsync
El tiempo de procesamiento varía según la duración del video y la fila de sincronización labial. El endpoint de información de sincronización labial muestra cuántas tareas hay antes que la tuya.
Diseñado a tu medida

¿Necesitas sincronización labial para un caso especial? Habla con nuestro equipo

Mayor rendimiento, prioridad de procesamiento, tu propio método de entrega: cuando una integración de sincronización labial necesita algo que no está en el catálogo público, nuestro equipo analiza tus requerimientos 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 sincronización labial

Plataformas con video integrado

Plataformas de LMS y capacitación de clientes, plataformas de creadores y de video, herramientas para seminarios web y eventos virtuales, SaaS de alojamiento y flujos de trabajo de video, plataformas de adopción digital, compras en vivo. Agrega doblaje con sincronización labial a los videos que tus usuarios y creadores ya hospedan, para que los presentadores traducidos se vean naturales en pantalla y la sincronización labial se convierta en una función prémium de tu producto.

Agencias de localización y producción

Ofrece la sincronización labial como un servicio adicional al doblaje. Usa el minuto de vista previa gratis de tu cuenta, si está disponible, para evaluar el resultado. Incluye la generación de sincronización labial para todo el video y cualquier generación posterior tras la revisión en tu cotización para el cliente.

Producción interna de video continua

Comercio minorista y comercio electrónico internacional, franquicias globales, medios de comunicación, universidades corporativas. Para videos de marketing, capacitación y ejecutivos donde un rostro ocupa toda la pantalla, la sincronización labial hace que el discurso traducido coincida con la persona en la cámara en todos los mercados.
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 sincronización labial

Un ejemplo completo en cada idioma, en un proyecto que ya esté doblado: verifica el rostro, ejecuta la sincronización labial, sigue el progreso y descarga el resultado.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas

PROJECT_ID = "..."   # a project with status merging_done

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

    info = await client.get_lipsync_info(project_id=PROJECT_ID)
    if info.check_face_task_status is not enums.LipsyncStatus.DONE:
        await client.run_check_face_task(project_id=PROJECT_ID)
        while (info := await client.get_lipsync_info(project_id=PROJECT_ID)).check_face_task_status is not enums.LipsyncStatus.DONE:
            await asyncio.sleep(10)
    if not info.video_has_face:
        raise SystemExit("No face found - lip-sync is not available for this video")

    await client.run_lipsync_task(project_id=PROJECT_ID,
        data=schemas.LipsyncTaskData(is_multiple_speakers=True, is_free_lipsync=False))

    while (info := await client.get_lipsync_info(project_id=PROJECT_ID)).lipsync_task_status is not enums.LipsyncStatus.DONE:
        print(info.lipsync_task_progress, info.tasks_in_lipsync_queue)
        await asyncio.sleep(15)

    print(info.lipsync_result_path)

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"
URL  = f"https://api.rask.ai/v2/projects/{PROJECT_ID}"   # a dubbed project

token = requests.post(AUTH, auth=(CLIENT_ID, CLIENT_SECRET),
                      data={"grant_type": "client_credentials"}).json()["access_token"]
h = {"Authorization": f"Bearer {token}"}

info = requests.get(f"{URL}/lipsync", headers=h).json()
if info["check_face_task_status"] != "done":
    requests.put(f"{URL}/check_face", headers=h)
    while (info := requests.get(f"{URL}/lipsync", headers=h).json())["check_face_task_status"] != "done":
        time.sleep(10)
assert info["video_has_face"], "No face found"

requests.put(f"{URL}/lipsync", headers=h,
             json={"is_multiple_speakers": True, "is_free_lipsync": False})

while (info := requests.get(f"{URL}/lipsync", headers=h).json())["lipsync_task_status"] not in ("done", "failed"):
    time.sleep(15)

print(info["lipsync_task_status"], info["lipsync_result_path"])
requests + polling
no SDK required
// no dependencies, Node 18+ global fetch - PROJECT_ID is a dubbed project
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 url = `https://api.rask.ai/v2/projects/${PROJECT_ID}`;
const info = () => fetch(`${url}/lipsync`, { headers: h }).then((r) => r.json());

let i = await info();
if (i.check_face_task_status !== 'done') {
  await fetch(`${url}/check_face`, { method: 'PUT', headers: h });
  while ((i = await info()).check_face_task_status !== 'done') await sleep(10000);
}
if (!i.video_has_face) throw new Error('No face found');

await fetch(`${url}/lipsync`, {
  method: 'PUT', headers: h,
  body: JSON.stringify({ is_multiple_speakers: true, is_free_lipsync: false }),
});

while (!['done', 'failed'].includes((i = await info()).lipsync_task_status)) {
  console.log(i.lipsync_task_progress, i.tasks_in_lipsync_queue);
  await sleep(15000);
}
console.log(i.lipsync_result_path);
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. face check on the dubbed project - start it only if it has not run yet
curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
  | jq '{check_face_task_status, video_has_face}'
curl -s -X PUT https://api.rask.ai/v2/projects/$ID/check_face -H "Authorization: Bearer $TOKEN"

# 3. run lip-sync (set is_free_lipsync to true for the free preview minute)
curl -s -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"is_multiple_speakers": true, "is_free_lipsync": false}'

# 4. follow progress, then download the result
curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
  | jq '{lipsync_task_status, lipsync_task_progress, lipsync_result_path}'
PUT /v2/projects/{id}/lipsync
OAuth 2.0 client credentials
<?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']];
$info = fn() => $json($http->get("/v2/projects/$projectId/lipsync", ['headers' => $h]));

$i = $info();
if ($i['check_face_task_status'] !== 'done') {
    $http->put("/v2/projects/$projectId/check_face", ['headers' => $h]);
    while (($i = $info())['check_face_task_status'] !== 'done') sleep(10);
}
if (!$i['video_has_face']) exit('No face found');

$http->put("/v2/projects/$projectId/lipsync", ['headers' => $h,
    'json' => ['is_multiple_speakers' => true, 'is_free_lipsync' => false]]);

while (!in_array(($i = $info())['lipsync_task_status'], ['done', 'failed'])) sleep(15);
echo $i['lipsync_result_path'];
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 reporta el progreso una tarea de sincronización labial

El endpoint de información de sincronización labial reporta la verificación del rostro, el estado de la tarea, la posición en la fila y el progreso del 0 al 100. Solo necesitas actuar en tres grupos.

Éxito, detente aquí

lipsync_task_status: done
lipsync_task_progress: 100
La sincronización labial ha finalizado. El enlace de descarga está en lipsync_result_path.

En progreso, continúa consultando

check_face_task_status: started
lipsync_task_status: started
lipsync_task_progress: 0-99
tasks_in_lipsync_queue
Mientras el progreso sea null, la tarea está en la fila: tasks_in_lipsync_queue muestra cuántas tareas hay adelante.

Error, detener y reportar

lipsync_task_status: failed
check_face_task_status: failed
video_has_face: false
Un video sin un rostro visible no se puede sincronizar a nivel labial. Si una tarea falla, comunícate con soporte y proporciona tu project_id.
Lip-sync task, as GET /lipsync reports it
GET /v2/projects/{project_id}/lipsync
check face     check_face_task_status  done     video_has_face  true
queued         lipsync_task_status     started  tasks_in_lipsync_queue  2
processing     lipsync_task_progress   0 → 50 → 100
complete       lipsync_task_status     done
               lipsync_result_path     https://...

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

Video con sincronización labial, doblaje y subtítulos

Descarga el video generado desde lipsync_result_path. El proyecto conserva el video doblado sin sincronización labial, los subtítulos traducidos en formato SRT y VTT y, en los planes elegibles, la voz traducida en pistas de audio separadas.
Campo
Formato
Qué es
lipsync_result_path
MP4
El video con sincronización labial, listo para publicar
voiceover
WAV
Solo la voz traducida, para tu propia mezcla
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
translated_video
MP4
El video doblado sin sincronización labial, para comparar
Control

Edita el doblaje y luego genera una versión actualizada con sincronización labial

Después de cambiar el texto, la sincronización o las voces, vuelve a doblar los segmentos modificados y genera la sincronización labial para el video actualizado. El nuevo doblaje y cada nueva generación de sincronización labial para todo el video se cobran por separado.

Edición por segmentos

Edición por segmentos
Edita los segmentos individuales de la transcripción y vuelve a doblar las líneas modificadas. Para actualizar el movimiento de los labios, genera una nueva sincronización labial para todo el video; esto se cobra por separado.
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
Agrega un glosario para que los nombres de marca y los términos técnicos se pronuncien igual en cada doblaje, y la sincronización labial siga ese mismo vocabulario.

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 cualquiera de los siete formatos de video compatibles o envía una URL pública. Los archivos exclusivos de audio no muestran rostros en pantalla, por lo que la sincronización labial solo aplica para formatos de video.

Video

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

Audio

4 formatos
.mp3
.wav
.flac
.m4a

Metadatos antes de gastar

El endpoint de multimedia 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 tanto el doblaje como la sincronización labial se cobran por minuto de duración del video.
Seguridad y cumplimiento normativo

Rostros y voces manejados de forma segura

Brask Inc cuenta con la certificación SOC 2 Tipo II, opera bajo las normas del GDPR y publica el estado de sus controles en vivo en su Trust Center. Los videos con rostros y voces se procesan en un entorno de IA cerrado.

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 frente a una canalización de sincronización labial creada por ti

Una API independiente de sincronización labial necesita una pista de audio terminada en el idioma de destino. Rask produce la pista doblada y sincroniza los labios en un solo proyecto. Aquí tienes el mismo resultado integrado de dos formas.
Lo que necesitas
Rask API
Armado por partes
Una pista de audio traducida para sincronizar
Creado por el mismo proyecto
Primero los proveedores de transcripción, traducción y voz
Verificación de rostros antes de pagar
Automático, una vez por proyecto
Tu propio paso de detección de rostros
Varios rostros en pantalla
is_multiple_speakers: true
Rastreo por rostro configurado y ajustado por ti
Vista previa antes de la ejecución completa
Un minuto gratis por cuenta
Paga por cada prueba
Vuelve a sincronizar después de editar el guion
Una nueva generación de sincronización labial para todo el video, cobrada por separado
Paga de nuevo por todo el archivo
Música de fondo y efectos
Se conserva con la nueva voz
Un paso de separación de fuentes que tú configuras
Subtítulos en formato .srt y .vtt
Incluido
Generado a partir de tus propios datos de tiempo
Visibilidad de la fila
Posición en la fila y progreso de 0 a 100
Lo que sea que tu proveedor permita
Límites de velocidad
Ninguno
Lo que exija tu proveedor más estricto
Facturación
Por cada generación de sincronización labial en todo el video
Por ejecución, por proveedor
Preguntas frecuentes

API de sincronización labial: preguntas frecuentes

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

¿Hay una API de sincronización labial?

¿Puedo sincronizar los labios de un video sin doblarlo primero?

¿Puedo sincronizar los labios con mi propia pista de audio?

¿La API genera avatares parlantes a partir de una imagen o un texto?

¿Qué necesita un video para la sincronización labial?

¿Cómo se cobra la sincronización labial?

¿Hay una vista previa gratuita de la sincronización labial?

¿La sincronización labial funciona con varios hablantes?

¿Cómo puedo seguir el progreso de la sincronización labial?

¿Cuánto tiempo toma la sincronización labial?

¿Qué pasa después de que edito el doblaje?

¿Qué pasa si la sincronización labial falla?

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