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

Sincronize os movimentos da boca com a 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 diz as novas palavras. Uma verificação facial é feita 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 visualização gratuito
Vários rostos na tela
REST + SDK em 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 do mundo todo
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 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 nova geração.

Sincronização labial em vídeos traduzidos

Sincronize os movimentos da boca com a 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 facial automática

Antes da sincronização labial, uma tarefa de verificação confirma se o vídeo tem pelo menos um rosto. Ela é executada uma vez por projeto, geralmente sozinha, para que você saiba o resultado antes de gastar seus 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 visualização gratuito

Todas as contas recebem um minuto gratuito de sincronização labial. Use is_free_lipsync no seu próprio conteúdo e analise o resultado antes de sincronizar o vídeo completo.

Cobrança separada para cada geração

Cada geração de sincronização labial para vídeos completos é cobrada separadamente da dublagem. Após editar o roteiro ou as vozes, duble o projeto novamente 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 acompanhem o andamento real.

Vozes que combinam com o rosto

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

Editar, dublar de novo, sincronizar de novo

Altere o texto, o tempo ou as vozes, duble o projeto novamente e execute a sincronização labial outra vez na nova versão. A verificação facial não precisa ser feita novamente.

Cresça sem limites

Sem limites de taxa, sem cota de simultaneidade e sem restrições por chave. Envie tarefas de sincronização labial para o seu catálogo completo, e a posição na fila indicará o status de cada uma.
Veja como funciona

De fala dublada a movimentos labiais correspondentes

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 a nova fala.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Fluxo de trabalho

Três etapas de vídeo dublado para 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 novamente.
1

Dublar o vídeo

Envie o vídeo original ou informe uma URL pública, crie um projeto com um 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

Verificar 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. Caso não tenha começado, execute-a manualmente uma vez para o projeto.

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

Executar a sincronização labial e baixar

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

PUT /v2/projects/{id}/lipsync
O tempo de processamento varia conforme 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.
Desenvolvido para você

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

Maior capacidade, 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 nossa equipe sobre suas necessidades e as opções disponíveis.

Entrega e integração

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

Volume e capacidade

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

Segurança e hospedagem

Residência de dados, SSO e SAML, regras de retenção e suporte a análises de segurança são gerenciados como parte da integração empresarial.
Casos de uso

Quem usa uma API de sincronização labial

Plataformas que incluem vídeos

Plataformas de LMS e educação de clientes, plataformas de criadores e vídeos, ferramentas de webinars e eventos virtuais, plataformas de hospedagem de vídeo e SaaS de 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 teste gratuito da sua conta, se disponível, para avaliar o resultado. Inclua a geração de sincronização labial de vídeo completo e quaisquer gerações futuras após a revisão no orçamento do seu cliente.

Produção contínua de vídeos 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 corresponda ao orador em cada mercado.
Histórias de clientes

Equipes reais, resultados mensuráveis

Como as empresas localizam vídeos com a Rask, em 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 informa o progresso

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

Sucesso, pare 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, pare e informe

lipsync_task_status: failed
check_face_task_status: failed
video_has_face: false
Um vídeo sem um rosto visível não pode ter a sincronização labial aplicada. 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 por completo

Aponte para o nosso endereço de webhook e cada mudança de status chega como um POST, para que sua fila reaja a cada alteração no momento em que ela acontece. O envio via webhook faz parte da integração corporativa.
Ler a documentação
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
Resultado

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

Baixe o vídeo gerado em 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 compatíveis, a voz traduzida como faixas de áudio separadas.
Campo
Formato
O que é
lipsync_result_path
MP4
O vídeo com sincronização labial, pronto para publicar
voiceover
WAV
Apenas a fala traduzida, para 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
Mesmas legendas que o WebVTT, para reprodutores web
translated_video
MP4
O vídeo dublado sem sincronização labial, para comparação
Controle

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

Depois de alterar o texto, o tempo 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 de vídeo completo são cobradas separadamente.

Edição por trecho

Edição por trecho
Edite trechos individuais da transcrição e reduble as linhas alteradas. Para atualizar os movimentos labiais, gere uma nova sincronização labial para todo o vídeo; isso é cobrado separadamente.
Acesse a transcrição e seus trechos
Atualize o texto original e nós fazemos a tradução novamente
Edite o texto traduzido diretamente para usar as suas próprias palavras
Ajuste o tempo, adicione ou remova trechos
Altere a voz de qualquer locutor

Glossários para termos específicos

Glossários para termos específicos
Anexe 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 texto.

Um glossário funciona para um par de idiomas e vale para todas as variações regionais dele. Assim, um único glossário em espanhol atende pt-br e pt-pt igualmente. Os registros do projeto versao_glossario, garantindo que alterações futuras não modifiquem o trabalho finalizado sem que você perceba.
Entrada

Formatos de arquivo compatíveis

Envie qualquer um dos sete formatos de vídeo compatíveis ou envie uma URL pública. Arquivos apenas de áudio não têm rosto 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 um 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 certificação SOC 2 Type II, opera em conformidade com a 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 Type 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

O seu conteúdo

Ambiente de IA fechado
Nunca usado para treinar modelos gerais
Exportação completa, sem fidelidade forçada

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 com consentimento
Controles de segurança de IA, humano no circuito
Comparação

API da Rask vs. um fluxo de sincronização labial criado por você

Uma API independente de sincronização labial 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 aqui o mesmo resultado montado de duas maneiras.
O que você precisa
Rask API
Montado por partes
Uma faixa de áudio traduzida para sincronizar
Criado pelo mesmo projeto
Primeiro, fornecedores de transcrição, tradução e voz
Verificação de rosto 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 criado e ajustado por você
Visualize antes do processo completo
Um minuto gratuito por conta
Pague por cada teste realizado
Sincronize novamente após editar o roteiro
Uma nova geração de sincronização labial para o vídeo completo, cobrada separadamente
Pague novamente pelo arquivo inteiro
Música de fundo e efeitos
Mantidos com a nova voz
Uma etapa de separação de áudio que você cria
Legendas em .srt e .vtt
Incluído
Gerado a partir dos seus próprios dados de tempo
Visibilidade da fila
Posição na fila e progresso de 0 a 100
O que o seu fornecedor disponibilizar
Limites de taxa
Nenhum
O que o seu fornecedor mais rigoroso exigir
Cobrança
Por geração de sincronização labial de vídeo completo
Por execução, por fornecedor
Perguntas frequentes

API de sincronização labial: perguntas 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 com a minha própria faixa de áudio?

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

O que um vídeo precisa para ter sincronia labial?

Como a sincronia labial é cobrada?

Existe uma prévia gratuita de sincronia labial?

A sincronia labial funciona com vários falantes?

Como acompanho o progresso da sincronia labial?

Quanto tempo leva a sincronia labial?

O que acontece depois que eu edito a dublagem?

E se a sincronia labial falhar?

Como obtenho acesso à API e uma chave de API?

Comece a dublar em uma tarde

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