# 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\"}"# 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}'



Carregue o vídeo ou a gravação de áudio a que se destina a locução, utilizando um ficheiro ou um URL de suporte multimédia. A linha do tempo fornece a temporização para o seu guião.
Crie uma transcrição a partir de segmentos de texto com caraterísticas de tempo e oradores, ou a partir de um ficheiro SRT, e depois crie o projeto com o respetivo transcript_id e um idioma de destino.
Consulte as vozes, atribua uma predefinição ou um clone a cada orador, volte a gerar se necessário e, em seguida, descarregue a locução, o vídeo e os ficheiros de legendas.
# 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())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"])// 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);# 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}'<?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'];{"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

es-mx e es-es igualmente. O registo do projeto glossary_version, para que edições posteriores nunca alterem silenciosamente o trabalho concluído.Sim, para dobragem de vídeos. Envie o seu guião como segmentos de texto temporizados ou um ficheiro SRT juntamente com um vídeo, e a API gera uma fala com um som natural sincronizada com a imagem, utilizando vozes de IA ou clones de voz, com legendas e faixas de áudio no mesmo projeto.
A Rask gera fala para projetos completos e entrega ficheiros, o que é ideal para vídeos publicados, conteúdos de formação e de marketing. Para agentes de voz, centros de contacto e outras aplicações de baixa latência que necessitem de áudio em segundos, uma API de texto para fala em streaming é a melhor opção.
O áudio é entregue quando a geração do projeto é concluída: a dobragem em WAV nos planos elegíveis, o áudio misturado e o vídeo. A API não transmite blocos nem bytes de áudio em streaming durante o processo de geração.
Crie uma transcrição com POST /v2/transcriptions a partir de segmentos que incluam um locutor, um tempo de início e de fim no formato HH:MM:SS,mmm e o texto. Também pode carregar um ficheiro SRT para POST /v2/transcriptions/srt. Em seguida, passe o transcript_id ao criar o projeto.
Cada idioma de destino dispõe de predefinições de voz de IA com um género definido na biblioteca de vozes. Obtenha as opções para um projeto através de GET /v2/projects/{id}/voices e atribua uma por locutor utilizando o ID de voz. Nos idiomas de clonagem de voz suportados, também pode utilizar clones de voz.
Sim. Crie um clone de voz personalizado uma vez na aplicação da Rask com o consentimento do locutor e, em seguida, atribua o respetivo ID de voz a qualquer locutor através da API nos idiomas de clonagem de voz suportados. Funciona muito bem como uma voz de marca consistente.
Escolha entre mais de 135 opções de idiomas e regiões. Escreva o guião num idioma e a Rask traduz-lo, ou envie o guião já no idioma de destino. As vozes de IA estão disponíveis para todos os locais de destino.
A API aceita texto simples por segmento. Para orientar a pronúncia, ajuste a grafia no texto do guião. Os glossários controlam a forma como os termos são traduzidos, não a forma como são pronunciados.
A entrega segue a voz selecionada e o seu texto, incluindo a pontuação. Para obter uma gama emocional semelhante a uma interpretação real, um clone de voz do locutor original preserva melhor a identidade da sua voz.
Pode utilizar um vídeo ou uma gravação de áudio. Carregue os multimédia de origem e forneça um guião temporizado para gerar a dobragem ao longo da respetiva linha temporal. É obrigatório carregar um ficheiro multimédia.
Não. A utilização é cobrada por minuto de vídeo, arredondado para o minuto inteiro seguinte, a partir do mesmo conjunto de minutos da aplicação Rask. Os minutos adicionais custam 3$/min nos planos standard elegíveis. Os preços para empresas são adaptados ao seu contrato. A nova dobragem é cobrada nos segmentos alterados, com um mínimo de um minuto por execução cobrada.
Comece com um teste gratuito na aplicação Rask, sem necessidade de cartão, para ouvir as vozes no seu próprio vídeo. O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com funcionalidades determinadas pelo seu plano.
O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com funcionalidades definidas pelo seu plano. Pode gerar o seu ID de cliente e chave secreta na aplicação e começar a utilizá-la de imediato. Os termos para empresas, preços por volume e cobertura de idiomas personalizada são tratados através da nossa equipa.