API de clonagem de voz para vídeos traduzidos

Mantenha a voz de cada orador quando os seus vídeos falam noutros idiomas. A API clona automaticamente cada voz do vídeo original, ou utiliza um clone de voz personalizado que criou anteriormente, e devolve o vídeo dobrado com as vozes clonadas, faixas de áudio e legendas.
Clone de voz instantâneo
Clones de voz personalizados
REST + SDK Python
clone, assign, re-dub
OAuth 2.0
# 1. create the dub - each speaker gets an Instant Voice Clone by default
curl -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"video_id": "b8f7835d-e8c9-4ff4-8e34-5c336d818319", "dst_lang": "es-mx"}'

# 2. list the voices available in this project
curl https://api.rask.ai/v2/projects/$ID/voices \
  -H "Authorization: Bearer $TOKEN"
#  "label": "Voice Clone", "gender": "auto"         instant clone
#  "label": "Maria Lopez", "sample_src": "https://..."  your custom clone

# 3. assign your custom clone - include every speaker in the map
curl -X PATCH https://api.rask.ai/v2/projects/$ID \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"voice": {"SPEAKER_00": "<custom_voice_id>", "SPEAKER_01": "<voice_id>"}}'
GET /v2/projects/{project_id}
polling, 10s
# 4. re-dub with the new voices, then poll until merging_done
curl -X POST https://api.rask.ai/v2/projects/$ID/generate \
  -H "Authorization: Bearer $TOKEN"
while :; do
  curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq .status
  sleep 10
done
Utilizado por equipas globais
Funcionalidades

Tudo o que a API de clonagem de voz faz

Clone cada orador a partir do vídeo original, ou utilize um clone de voz personalizado criado anteriormente, em todas as versões traduzidas e em vários idiomas. Escolha predefinições de voz de IA para idiomas sem clonagem de voz. Adicione sincronização labial opcional, faturada separadamente.

Clone de Voz Instantâneo

Cada orador recebe um clone da sua própria voz a partir do vídeo original, sem necessidade de gravar amostras de áudio. É atribuído por predefinição nos idiomas de destino suportados.

Clones de voz personalizados

Crie uma voz reutilizável na aplicação Rask a partir de amostras de áudio limpas, ou guarde a voz de um orador de um projeto existente na sua Biblioteca de Clones de Voz. Com o consentimento do orador, reutilize essa voz em projetos de API nos idiomas de destino suportados.

Uma voz por orador

Os oradores são separados automaticamente e cada um mantém a sua própria voz clonada, para que entrevistas, painéis e podcasts continuem fáceis de acompanhar.

Sincronização labial

Ajuste o movimento da boca à voz clonada como uma tarefa opcional em qualquer projeto concluído, faturada separadamente. A deteção de rostos é executada primeiro, para que a aplique apenas onde for eficaz.

Áudio de fundo preservado

A música, o tom de ambiente e os efeitos são separados da fala e misturados novamente sob a voz clonada, para que o resultado mantenha o som da produção original.

Predefinições de voz de IA

Para idiomas sem clonagem de voz, ou quando uma voz pré-definida se adequa melhor, escolha uma predefinição de voz de IA com um género definido para qualquer orador.

Identidade de voz entre idiomas

O clone fala espanhol, francês ou japonês com a voz do orador original, para que o apresentador continue a soar como o apresentador para o público global.

Trocar uma voz, voltar a dobrar um orador

Atribua uma voz diferente a um orador e regenere. Apenas os segmentos que foram alterados são faturados, pelo que ninguém precisa de regravar nada.

Cresça sem limites

Sem limites de taxa, sem quota de concorrência, sem restrições por chave. Dobre todo o seu catálogo com vozes clonadas em paralelo, em qualquer volume.
Veja como funciona

Ouça um orador em cinco idiomas

As vozes originais em inglês, seguidas das vozes clonadas em francês, alemão, português e espanhol. Cada orador mantém a sua própria voz e o áudio de fundo permanece intacto.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Fluxo de trabalho

Três passos do vídeo original até às vozes clonadas

A criação do projeto inicia a dobragem com clonagem de voz instantânea. Utilize o endpoint /generate após alterar as vozes ou editar o guião.
1

Carregar o seu vídeo

Envie um ficheiro como dados de formulário multipart ou publique um link do YouTube, Google Drive, S3, Vimeo ou qualquer URL direto. A fala neste vídeo serve como amostra de voz para cada clone de voz instantâneo.

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

Criar o projeto

Indique o ID do meio como video_id e um idioma de destino. Cada locutor detetado recebe um clone de voz instantâneo nos idiomas suportados e a dobragem começa de imediato.

POST /v2/projects
3

Atribuir vozes e voltar a dobrar

Liste as vozes para o projeto, atribua um clone personalizado ou uma predefinição a qualquer locutor, chame /generate e descarregue os ficheiros quando a dobragem estiver concluída.

PATCH /v2/projects/{project_id}
O tempo de processamento varia consoante o projeto. Quando altera a voz de um locutor, apenas os segmentos desse locutor são dobrados novamente e faturados.
Criado a pensar em si

Precisa de uma voz que não conste no catálogo? Fale com a nossa equipa

Clonagem de voz para um idioma ainda não suportado, uma biblioteca de vozes personalizadas maior, o seu próprio método de entrega: quando um projeto de voz precisa de algo fora do catálogo público, a nossa equipa analisa os seus requisitos e as opções disponíveis.

Idiomas e vozes

Precisa de um idioma ou voz fora do catálogo público? Fale com a nossa equipa sobre os seus requisitos e as opções disponíveis.

Entrega e integração

Webhooks, envio direto para a sua própria fila, entrega direta no seu S3, pontos de extremidade personalizados. Diga-nos como é que o seu sistema prefere receber os dados.

Volume e capacidade

Os tamanhos dos lotes, os idiomas de destino por ação e a prioridade de processamento são termos contratuais e não limites fixos do produto.

Segurança e alojamento

A residência de dados, o SSO e SAML, as regras de retenção e o suporte a auditorias de segurança são tratados como parte da integração empresarial.
Casos de utilização

Quem utiliza uma API de clonagem de voz?

Plataformas com vídeo integrado

Plataformas de LMS e formação de clientes, criadores e plataformas de vídeo com respetivas aplicações móveis, ferramentas de webinars e eventos virtuais, SaaS de alojamento de vídeos e fluxos de trabalho, plataformas de adoção digital, live shopping. Permita que criadores e formadores mantenham a sua própria voz nos idiomas de clonagem de voz suportados. Utilize predefinições de voz de IA para outros idiomas de destino e faça da dobragem multilíngue uma funcionalidade da sua plataforma.

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

Forneça locuções personalizadas com a voz do apresentador original para cada vídeo de cliente. Mantenha um clone de voz personalizado para cada apresentador recorrente, com consentimento registado, e reutilize-o em todos os projetos através da API sem pedir a ninguém para gravar novamente.

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

Retalho e comércio eletrónico internacional, franquias globais, editores de média, universidades corporativas. Formadores, executivos e especialistas de produto gravam uma vez e, em seguida, utilizam a sua voz clonada para os idiomas de destino suportados e predefinições de voz de IA para outras versões de mercado de vídeos de formação, atualizações de produtos e mensagens internas.
Histórias de clientes

Equipas reais, resultados mensuráveis

Como as empresas localizam vídeos com a Rask, através dos seus próprios números.
seta
seta
Código

Exemplos de código da API de clonagem de voz

Um exemplo completo em cada idioma: autenticar, carregar, dobrar com clones de voz instantâneos, atribuir um clone personalizado a um locutor, dobrar novamente e descarregar.
# 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)

    video = await client.create_media_link(data=schemas.MediaCreateLink(link="https://youtu.be/..."))
    while video.status is not enums.MediaStatus.READY:
        await asyncio.sleep(5)
        video = await client.get_media(media_id=video.id)

    # first dub: every speaker gets an Instant Voice Clone
    job = await wait(client, await client.create_project(
        data=schemas.ProjectCreate(video_id=video.id, dst_lang="es-mx")))

    # assign a custom clone to SPEAKER_00, keep the other speakers as they are
    voices = await client.get_project_voices(project_id=job.id)
    custom = next(v for v in voices if v.label == "Maria Lopez")
    voice_map = {**job.voice, "SPEAKER_00": custom.id}
    await client.patch_project(project_id=job.id, data=schemas.ProjectPatch(voice=voice_map))

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

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

video = requests.post(f"{API}/api/library/v1/media/link", headers=h, json={"link": "https://youtu.be/..."}).json()
while video["status"] != "ready":
    time.sleep(5)
    video = requests.get(f"{API}/api/library/v1/media/{video['id']}", headers=h).json()

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

voices = requests.get(f"{API}/v2/projects/{pid}/voices", headers=h).json()
custom = next(v for v in voices if v["label"] == "Maria Lopez")
voice_map = {**project["voice"], "SPEAKER_00": custom["id"]}   # every speaker stays in the map

requests.patch(f"{API}/v2/projects/{pid}", headers=h, json={"voice": voice_map})
requests.post(f"{API}/v2/projects/{pid}/generate", headers=h)
print(wait(pid)["translated_video"])
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; };

let video = await call('POST', '/api/library/v1/media/link', { link: 'https://youtu.be/...' });
while (video.status !== 'ready') { await sleep(5000); video = await call('GET', `/api/library/v1/media/${video.id}`); }

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

const voices = await call('GET', `/v2/projects/${id}/voices`);
const custom = voices.find((v) => v.label === 'Maria Lopez');
await call('PATCH', `/v2/projects/${id}`, { voice: { ...project.voice, SPEAKER_00: custom.id } });
await call('POST', `/v2/projects/${id}/generate`);

console.log((await wait(id)).translated_video);
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. create the dub - Instant Voice Clones are assigned by default
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\"}" | jq -r .id)

# 3. after merging_done: read the current voice map and the voice options
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq .voice
curl -s https://api.rask.ai/v2/projects/$ID/voices -H "Authorization: Bearer $TOKEN" | jq '.[] | {id, label, gender}'

# 4. assign voices for every speaker, then re-dub
curl -s -X PATCH https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" -d '{"voice": {"SPEAKER_00": "<custom_voice_id>", "SPEAKER_01": "<voice_id>"}}'
curl -s -X POST https://api.rask.ai/v2/projects/$ID/generate -H "Authorization: Bearer $TOKEN"
PATCH /v2/projects/{id}
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']];

$wait = function ($id) use ($http, $h, $json) {
    do { sleep(10); $p = $json($http->get("/v2/projects/$id", ['headers' => $h])); }
    while ($p['status'] !== 'merging_done');
    return $p;
};

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

$voices = $json($http->get("/v2/projects/$id/voices", ['headers' => $h]));
$custom = current(array_filter($voices, fn($v) => $v['label'] === 'Maria Lopez'));
$map = array_merge($project['voice'], ['SPEAKER_00' => $custom['id']]);

$http->patch("/v2/projects/$id", ['headers' => $h, 'json' => ['voice' => $map]]);
$http->post("/v2/projects/$id/generate", ['headers' => $h]);
echo $wait($id)['translated_video'];
Guzzle 7
plain HTTP
O Python é o SDK oficial. Os separadores Node, PHP e cURL são exemplos simples de HTTP para os mesmos pontos de finalização.
Progresso

Como um projeto de clonagem de voz reporta o progresso

Um projeto passa por uma máquina de estados documentada na primeira dobragem e novamente após cada nova dobragem, para que os seus utilizadores vejam o progresso real sempre que altera uma voz. Só precisa de agir sobre três grupos.

Concluído com sucesso, parar por aqui

merging_done
A dobragem está concluída. Aceda ao projeto mais uma vez para obter os links de transferência disponíveis para o seu projeto.

Em progresso, continuar a verificar

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
Para além da correspondência _done estados. Estes correspondem perfeitamente a uma interface de progresso por etapas.

Falha, parar e reportar

failed
upload_failed
transcription_failed
translation_failed
voiceover_failed
merging_failed
no_audio
no_words
forbidden_link
no_audio, no_words e forbidden_link são suficientemente específicos para serem mostrados diretamente ao seu próprio utilizador.
Observed run, 3:47 source video, en → es-mx
GET /v2/projects/{project_id}
   0s  created
  11s  transcription_started
  87s  translation_started
  99s  voiceover_started
 154s  merging_started
 165s  merging_done

Ou ignore a consulta de estado por completo

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

Voz clonada, vídeo dobrado e legendas

Descarregue o vídeo dobrado com as vozes clonadas e legendas traduzidas em SRT e VTT. Nos planos elegíveis, também pode descarregar a faixa de voz clonada isoladamente em formato WAV ou misturada com o áudio de fundo original.
Campo
Formato
O que é
translated_video
MP4
O vídeo dobrado, pronto a publicar
voiceover
WAV
Apenas a fala traduzida na voz clonada, para a sua própria mistura
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 leitores web
original_video
MP4
O seu ficheiro de origem tal como foi guardado, para referência
Controlo

Altere uma voz e, em seguida, dobre novamente apenas esse locutor

Os clones instantâneos adequam-se à maioria dos locutores. Quando uma voz necessita de uma escolha diferente, atribua um clone personalizado ou uma predefinição a esse locutor e regenere. Apenas os segmentos alterados são faturados.

Edição ao nível de segmento

Edição ao nível de segmento
Cada projeto disponibiliza a sua transcrição como segmentos com etiquetas de locutor, pelo que mover uma linha para outro locutor ou alterar uma voz requer apenas um pedido.
Obter a transcrição e os respetivos segmentos
Alterar o texto de origem para traduzirmos novamente
Alterar o texto traduzido diretamente para manter as suas próprias palavras
Ajustar os carateres temporais, adicionar segmentos, eliminar segmentos
Reatribuir a voz associada a qualquer orador

Glossários para terminologia

Glossários para terminologia
Anexe um glossário para que os nomes de marcas, nomes de produtos e termos técnicos sejam traduzidos da mesma forma em todos os idiomas, seja qual for a voz que os pronuncia.

Um glossário abrange um par de línguas e aplica-se a todas as variantes regionais dessa língua de destino, pelo que um único glossário de espanhol serve es-mx e es-es igualmente. O registo do projeto glossary_version, para que edições posteriores nunca alterem silenciosamente o trabalho concluído.
Entrada

Formatos de ficheiro suportados

Carregue qualquer um de sete formatos de vídeo e quatro de áudio, ou envie um URL. A fala no ficheiro serve de referência para o clone de voz instantâneo, pelo que um áudio claro oferece os melhores resultados.

Vídeo

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

Áudio

4 formatos
.mp3
.wav
.flac
.m4a

Metadados antes de gastar

O endpoint de média devolve a duração, o tamanho do ficheiro, o codec de vídeo, a taxa de fotogramas, a resolução, o codec de áudio, a taxa de amostragem e a disposição dos canais. Valide um ficheiro e estime o custo antecipadamente, pois a dobragem com vozes clonadas é faturada ao minuto.
Segurança e conformidade

Dados de voz que a sua equipa jurídica pode aprovar

A Brask Inc possui a certificação SOC 2 Tipo II, opera em conformidade com o RGPD e publica o estado do controlo em direto no seu Centro de Confiança. As clonagens de voz personalizadas são criadas com o consentimento do orador e, para garantir a segurança dos dados, o seu áudio nunca é utilizado para treinar modelos gerais.

Certificações

SOC 2 Type II
GDPR
Membro da CAI e C2PA

Encriptação

TLS 1.2 em trânsito
AES-256 em repouso
Chaves geridas SSE-S3
Rotação de chaves pelo menos a cada 12 meses

O seu conteúdo

Ambiente de IA fechado
Nunca utilizado para treinar modelos gerais
Exportação completa, sem dependência de fornecedor

Acesso

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

Empresa

Opções de residência de dados
SLA personalizados
Gestor de conta dedicado

Direitos de voz

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

API da Rask vs. um pipeline de voz criado por si

Uma API de clonagem de texto para fala dá voz ao texto que envia. As vozes clonadas num vídeo traduzido também necessitam de transcrição, tradução, separação de oradores, sincronização e mistura. Eis o mesmo resultado, montado de duas formas.
O que precisa
Rask API
Montado a partir de peças
Clonar cada orador a partir do vídeo original
Clonagem de Voz Instantânea, por predefinição
Recolher e carregar amostras para cada orador
Vozes personalizadas reutilizáveis
Clones de voz personalizados por voice_id
Uma biblioteca de vozes que constrói e mantém
Transcrição, tradução, síntese, mistura
Uma API
Três a quatro fornecedores e o código entre eles
Deteção de oradores e uma voz por orador
Incluído
Um fornecedor de diarização mais a sua própria lógica de atribuição de voz
Música de fundo e efeitos preservados
Incluído
Um passo de separação de fonte que constrói e ajusta
Idiomas sem clonagem de voz
Predefinições de voz de IA
Outro fornecedor de texto para fala
Sincronização labial
Opcional, faturado separadamente
Um fornecedor separado
Alterar a voz de um orador
Voltar a dobrar esse orador, faturado apenas pelos segmentos alterados
Executar novamente o pipeline para todo o ficheiro
Limites de taxa
Nenhum
O que o seu fornecedor mais restrito aplicar
Uma voz ou idioma fora do catálogo
Discutido com a nossa equipa
Depende de cada fornecedor
Perguntas frequentes

API de clonagem de voz: perguntas frequentes

Não consegue encontrar o que procura? Contacte o departamento de vendas.

Existe uma API para clonagem de voz?

Como funciona a clonagem de voz com a API?

Qual é a diferença entre o Clone de Voz Instantâneo e o Clone de Voz Personalizado?

Posso criar um Clone de Voz Personalizado através da API?

Que áudio preciso para criar uma clonagem de voz personalizada?

Que idiomas suportam a clonagem de voz?

Posso utilizar a API de clonagem de voz como conversão de texto em voz?

Como posso alterar a voz de um locutor após a dobragem?

Quantas vozes personalizadas posso guardar?

É necessário consentimento para clonar uma voz?

A voz clonada mantém a emoção e o sotaque do locutor?

Posso utilizar vozes clonadas para fins comerciais?

Quanto custa a clonagem de voz?

Comece a dobrar numa tarde

Faça o seu primeiro pedido hoje e fale connosco quando precisar de termos de volume ou de um idioma que mais ninguém tem.