API de sincronização labial para vídeos dublados

Ajuste os movimentos da boca à fala dublada em mais de 135 opções de idiomas e regiões. Duble seu vídeo pela API, aplique a sincronização labial no resultado e baixe um vídeo onde a pessoa na tela fala as novas palavras. Uma verificação de rosto é realizada primeiro. A sincronização labial é cobrada separadamente da dublagem para cada geração de vídeo completo, incluindo novas gerações após edições.
Minuto de pré-visualização gratuito
Vários rostos na tela
REST + SDK para Python
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
Usado por equipes globais
Recursos

Tudo o que a API de sincronização labial faz

Adicione sincronização labial aos seus vídeos dublados. Verifique se há um rosto visível, use o minuto de pré-visualização gratuito da sua conta, se disponível, e acompanhe o progresso pela API. A sincronização labial de vídeos completos é cobrada separadamente da dublagem a cada geração.

Sincronização labial em vídeo traduzido

Ajuste os movimentos da boca à fala dublada em um vídeo traduzido pelo seu projeto, com suporte a mais de 135 opções de idiomas e regiões.

Verificação automática de rosto

Antes da sincronização labial, uma tarefa de verificação de rosto confirma se o vídeo tem pelo menos um rosto. Ela é executada uma vez por projeto, geralmente por conta própria, para que você saiba o resultado antes de gastar minutos.

Vários rostos na tela

Defina is_multiple_speakers como true para entrevistas, painéis e diálogos com vários locutores. Quando houver apenas um rosto na tela por vez, defina como false para acelerar o processamento.

Um minuto de pré-visualização gratuito

Todas as contas recebem um minuto de sincronização labial gratuito. Execute-o com is_free_lipsync em suas próprias imagens e revise o resultado antes de sincronizar o vídeo completo.

Cobrança separada para cada geração

Cada geração de sincronização labial de vídeo completo é cobrada separadamente da dublagem. Após editar o roteiro ou a voz, re-duble o projeto e gere uma nova versão sincronizada com uma nova cobrança de sincronização labial.

Posição na fila e progresso

O endpoint de informações de sincronização labial retorna o número de tarefas à frente da sua e o progresso de 0 a 100, para que seus usuários vejam o progresso real.

Vozes que combinam com o rosto

A sincronização labial funciona com base na voz que o projeto usa para um locutor: a voz clonada dele ou uma predefinição de voz de IA.

Editar, re-dublar, re-sincronizar

Altere o texto, o tempo ou as vozes, re-duble o projeto e execute a sincronização labial novamente na nova versão. A verificação de rosto não precisa ser executada novamente.

Cresça sem limites

Sem limites de taxa, sem cota de concorrência e sem limitação por chave. Envie tarefas de sincronização labial para todo o seu catálogo, e a posição na fila mostrará a situação de cada uma.
Veja na prática

Da fala dublada à sincronização dos movimentos labiais

O mesmo clipe dublado em francês, alemão, português e espanhol. Em um projeto dublado como este, a sincronização labial ajusta a posição dos lábios para acompanhar a nova fala.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Fluxo de trabalho

Três etapas para transformar um vídeo dublado em um vídeo com sincronização labial

A sincronização labial é executada em um projeto que já foi dublado. Use o endpoint /generate para dublar novamente após as edições e, em seguida, sincronize os lábios de novo.
1

Duble o vídeo

Envie o vídeo original ou forneça uma URL pública, crie um projeto com o idioma de destino e aguarde até que o status seja merging_done. A sincronização labial precisa do translated_video deste projeto.

POST /v2/projects
2

Verifique o rosto

A tarefa de verificação de rosto confirma a presença de pelo menos um rosto no vídeo. Ela geralmente começa de forma automática. Se não tiver iniciado, execute-a manualmente para o projeto.

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

Execute a sincronização labial e faça o download

Execute a tarefa de sincronização labial, acompanhe o progresso de lipsync_task_progress de 0 a 100 e, em seguida, baixe o vídeo em lipsync_result_path.

PUT /v2/projects/{id}/lipsync
O tempo de processamento varia de acordo com a duração do vídeo e a fila de sincronização labial. O endpoint de informações de sincronização labial mostra quantas tarefas estão na sua frente.
Criado para você

Precisa de sincronização labial para um caso especial? Fale com nossa equipe

Maior capacidade de processamento, prioridade de processamento e seu próprio método de entrega: quando uma integração de sincronização labial precisa de algo fora do catálogo público, nossa equipe analisa suas necessidades e as opções disponíveis.

Idiomas e vozes

Precisa de um idioma ou voz que não está no catálogo público? Fale com a nossa equipe sobre o que você precisa e conheça as opções disponíveis.

Entrega e integração

Webhooks, envio para a sua própria fila, entrega direto no seu S3 e endpoints personalizados. Diga-nos como o seu sistema prefere receber os dados.

Volume e capacidade

Tamanhos de lote, idiomas de destino por ação e prioridade de processamento são termos contratuais, e não limites fixos do produto.

Segurança e hospedagem

A residência de dados, SSO e SAML, regras de retenção e suporte a revisões de segurança são gerenciados como parte da integração empresarial.
Casos de uso

Quem usa uma API de sincronização labial

Plataformas com vídeo integrado

Plataformas de LMS e educação de clientes, plataformas de criadores e de vídeo, ferramentas de webinars e eventos virtuais, SaaS de hospedagem de vídeos e fluxo de trabalho, plataformas de adoção digital, live shopping. Adicione dublagem com sincronização labial aos vídeos que seus usuários e criadores já hospedam, para que os apresentadores traduzidos pareçam naturais na tela e a sincronização labial se torne um recurso premium do seu produto.

Agências de localização e produção

Ofereça a sincronização labial como um serviço adicional à dublagem. Use o minuto de visualização gratuita da sua conta, se disponível, para avaliar o resultado. Inclua a geração de sincronização labial em vídeo completo e quaisquer gerações futuras após a revisão no orçamento do seu cliente.

Produção de vídeo contínua interna

Varejo internacional e e-commerce, franquias globais, editoras de mídia, universidades corporativas. Para vídeos de marketing, treinamento e executivos em que um rosto preenche a tela, a sincronização labial faz com que a fala traduzida combine perfeitamente com o orador na câmera em todos os mercados.
Histórias de clientes

Equipes reais, resultados mensuráveis

Como as empresas localizam vídeos com o Rask, em seus próprios números.
seta
seta
Código

Exemplos de código da API de sincronização labial

Um exemplo completo em cada idioma, em um projeto que já foi dublado: verifique o rosto, execute a sincronização labial, acompanhe o progresso e baixe o 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 é o SDK oficial. As abas Node, PHP e cURL são exemplos simples de HTTP para os mesmos endpoints.
Progresso

Como uma tarefa de sincronização labial relata o progresso

O endpoint de informações de sincronização labial relata a verificação do rosto, o status da tarefa, a posição na fila e o progresso de 0 a 100. Você só precisa agir em três grupos.

Sucesso, pare por aqui

lipsync_task_status: done
lipsync_task_progress: 100
A sincronização labial foi concluída. O link de download está em lipsync_result_path.

Em andamento, continue verificando

check_face_task_status: started
lipsync_task_status: started
lipsync_task_progress: 0-99
tasks_in_lipsync_queue
Enquanto o progresso for nulo, a tarefa estará na fila: tasks_in_lipsync_queue mostra quantas tarefas estão à frente.

Erro, parar e relatar

lipsync_task_status: failed
check_face_task_status: failed
video_has_face: false
Um vídeo sem um rosto visível não pode ser sincronizado labialmente. Se uma tarefa falhar, entre em contato com o suporte informando seu 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://...

Ou pule as consultas completamente

Aponte para um endpoint de webhook e cada mudança de estado chega como um POST, para que sua fila reaja a cada alteração no momento em que ela acontece. O envio por webhook faz parte da integração empresarial.
Ler a documentação
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
Saída

Vídeo com sincronização labial, dublagem e legendas

Baixe o vídeo gerado a partir de lipsync_result_path. O projeto mantém o vídeo dublado sem sincronização labial e as legendas traduzidas em SRT e VTT e, nos planos elegíveis, a voz traduzida em faixas de áudio separadas.
Campo
Formato
O que é
lipsync_result_path
MP4
O vídeo com sincronização labial, pronto para ser publicado
voiceover
WAV
Apenas a fala traduzida, para a sua própria mixagem
translated_audio
WAV
Fala traduzida misturada com o áudio de fundo original
translation_srt_path
.srt
Legendas no idioma de destino
translation_vtt_path
.vtt
As mesmas legendas em formato WebVTT, para players web
translated_video
MP4
O vídeo dublado sem sincronização labial, para comparação
Controle

Edite a dublagem e gere uma versão atualizada com sincronização labial

Depois de alterar o texto, a sincronização ou as vozes, duble novamente os trechos modificados e gere a sincronização labial para o vídeo atualizado. A redublagem e cada nova geração de sincronização labial para o vídeo completo são cobradas separadamente.

Edição por segmentos

Edição por segmentos
Edite trechos individuais da transcrição e reduble as falas alteradas. Para atualizar os movimentos labiais, gere uma nova sincronização labial para o vídeo completo; isso é cobrado separadamente.
Obtenha a transcrição e seus segmentos
Atualize o texto original e nós fazemos a tradução novamente
Edite o texto traduzido diretamente para manter as suas próprias palavras
Ajuste os tempos, adicione segmentos ou exclua segmentos
Altere a voz associada a qualquer falante

Glossários para termos específicos

Glossários para termos específicos
Adicione um glossário para que nomes de marcas e termos técnicos sejam pronunciados da mesma forma em todas as dublagens, e a sincronização labial siga esse mesmo vocabulário.

Um glossário funciona para um par de idiomas e vale para todas as variações regionais desse idioma de destino, ou seja, um único glossário em espanhol atende pt-br e pt-pt igualmente. O registro do projeto versão_do_glossário, garantindo que edições futuras nunca alterem o que já foi finalizado sem que você perceba.
Entrada

Formatos de arquivo compatíveis

Envie arquivos em um dos sete formatos de vídeo compatíveis ou informe uma URL pública. Arquivos apenas de áudio não contam com rostos na tela, portanto a sincronização labial se aplica apenas a formatos de vídeo.

Vídeo

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

Áudio

4 formatos
.mp3
.wav
.flac
.m4a

Informações antes de gastar

O endpoint de mídia retorna a duração, o tamanho do arquivo, o codec de vídeo, a taxa de quadros, a resolução, o codec de áudio, a taxa de amostragem e a disposição dos canais. Valide o arquivo e estime o custo antecipadamente, pois a dublagem e a sincronização labial são cobradas por minuto de duração do vídeo.
Segurança e conformidade

Rostos e vozes tratados com segurança

A Brask Inc possui a certificação SOC 2 Type II, opera em conformidade com o GDPR e publica o status de controle em tempo real em seu Trust Center. Vídeos com rostos e vozes são processados em um ambiente de IA fechado.

Certificações

SOC 2 Tipo II
GDPR
Membro da CAI e C2PA

Criptografia

TLS 1.2 em trânsito
AES-256 em repouso
Chaves gerenciadas SSE-S3
Rotação de chaves a cada 12 meses no mínimo

Seu conteúdo

Ambiente de IA fechado
Nunca usado para treinar modelos gerais
Exportação completa, sem retenção de dados

Acesso

SSO e SAML
Controle de acesso baseado em funções
Credenciais de cliente OAuth 2.0

Corporativo

Opções de residência de dados
SLAs personalizados
Gerente de contas dedicado

Direitos de voz

Vozes sintéticas com direitos de uso
Clonagem de voz baseada em consentimento
Controles de segurança de IA, humano no circuito
Comparação

API da Rask em comparação com um fluxo de sincronização labial desenvolvido por você

Uma API de sincronização labial independente precisa de uma faixa de áudio finalizada no idioma de destino. A Rask produz a faixa dublada e sincroniza os lábios em um único projeto. Veja o mesmo resultado montado de duas maneiras.
O que você precisa
Rask API
Montado a partir de partes
Uma faixa de áudio traduzida para sincronização
Criado pelo mesmo projeto
Primeiro, fornecedores de transcrição, tradução e voz
Verificação de rostos antes de pagar
Automático, uma vez por projeto
Sua própria etapa de detecção de rostos
Vários rostos na tela
is_multiple_speakers: true
Rastreamento por rosto desenvolvido e ajustado por você
Visualização prévia antes da execução completa
Um minuto gratuito por conta
Pague por cada teste realizado
Ressincronize após editar o roteiro
Uma nova geração de sincronização labial para o vídeo completo, cobrada à parte
Pague novamente pelo arquivo inteiro
Música de fundo e efeitos
Preservado com a nova voz
Uma etapa de separação de fontes criada por você
Legendas em .srt e .vtt
Incluído
Gerado a partir dos seus próprios dados de tempo
Visualização da fila
Posição na fila e progresso de 0 a 100
O que o seu fornecedor disponibilizar
Limites de taxa
Nenhum
O que for exigido pelo seu fornecedor mais rigoroso
Cobrança
Por geração de sincronização labial para o vídeo completo
Por execução, por fornecedor
Perguntas frequentes

API de sincronização labial: dúvidas frequentes

Não conseguiu encontrar o que procura? Entre em contato com o departamento de vendas.

Existe uma API de sincronização labial?

Posso sincronizar os lábios de um vídeo sem dublá-lo primeiro?

Posso sincronizar os lábios usando minha própria faixa de áudio?

A API gera avatares falantes a partir de uma imagem ou de um texto?

O que um vídeo precisa para a sincronização labial?

Como é cobrada a sincronização labial?

Existe uma prévia gratuita de sincronização labial?

A sincronização labial funciona com vários falantes?

Como acompanho o andamento da sincronização labial?

Quanto tempo leva a sincronização labial?

O que acontece depois que eu edito o dublagem?

E se a sincronização labial falhar?

Como obtenho acesso à API e uma chave de API?

Comece a dublar em uma tarde

Faça sua primeira solicitação hoje e fale conosco quando precisar de condições para grande volume ou de um idioma que mais ninguém tem.