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



Carica il video o la registrazione audio a cui appartiene il tuo voiceover, usando un file o un URL multimediale supportato. La timeline fornirà i tempi per il tuo testo.
Crea una trascrizione da segmenti di testo con timestamp e speaker, oppure da un file SRT, e poi crea il progetto con il relativo transcript_id e una lingua di arrivo.
Elenca le voci, assegna una voce preimpostata o clonata a ciascuno speaker, rigenera se necessario e scarica il voiceover, il video e i file dei sottotitoli.
# 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 allo stesso modo. Il progetto registra glossary_version, così le modifiche successive non alterano mai inaspettatamente il lavoro completato.Sì, per il voiceover dei video. Invia il tuo script come segmenti di testo temporizzati o un file SRT insieme a un video, e l'API genera una voce naturale sincronizzata con l'immagine, utilizzando voci AI o cloni vocali, con sottotitoli e tracce audio nello stesso progetto.
Rask genera voce per progetti completi e consegna i file, il che è ideale per video pubblicati, contenuti di formazione e marketing. Per agenti vocali, contact center e altre applicazioni a bassa latenza che richiedono l'audio in pochi secondi, un'API di sintesi vocale in streaming è la scelta più adatta.
L'audio viene consegnato al completamento della generazione del progetto: il voiceover in formato WAV sui piani idonei, l'audio combinato e il video. L'API non trasmette in streaming frammenti o byte audio durante la generazione.
Crea una trascrizione con POST /v2/transcriptions da segmenti che includono ciascuno un interlocutore, un orario di inizio e fine nel formato HH:MM:SS,mmm e il testo. Puoi anche caricare un file SRT su POST /v2/transcriptions/srt. Dopodiché, passa il transcript_id quando crei il progetto.
Ogni lingua di arrivo dispone di voci preimpostate con un genere specifico nella libreria vocale. Ottieni le opzioni per un progetto con GET /v2/projects/{id}/voices e assegna una voce per ciascun interlocutore tramite il relativo ID. Nelle lingue che supportano la clonazione vocale, puoi anche usare i cloni vocali.
Sì. Crea un clone vocale personalizzato una sola volta nell'app di Rask con il consenso del parlante, quindi assegna il suo ID voce a qualsiasi interlocutore tramite l'API nelle lingue supportate. È un'ottima soluzione per mantenere una voce aziendale coerente.
Scegli tra oltre 135 opzioni linguistiche e regionali. Scrivi il testo in una lingua e Rask lo tradurrà, oppure invia direttamente il testo nella lingua di arrivo. Le voci AI sono disponibili per qualsiasi lingua di destinazione.
L'API accetta testo semplice per ciascun segmento. Per guidare la pronuncia, modifica l'ortografia nel testo dello script. I glossari controllano come vengono tradotti i termini, non come vengono pronunciati.
L'espressione segue la voce selezionata e il tuo testo, inclusa la punteggiatura. Per una gamma emotiva che ricordi una performance reale, un clone vocale del parlante originale preserva al meglio la sua identità vocale.
È possibile utilizzare un file video o audio. Caricate il file multimediale di origine e fornite una trascrizione con i tempi per generare il doppiaggio lungo la sua durata. È necessario caricare un file multimediale.
No. L'utilizzo viene fatturato al minuto di video, arrotondato al minuto intero successivo, attingendo dallo stesso monte minuti dell'app Rask. I minuti aggiuntivi costano 3$ al minuto sui piani standard idonei. I prezzi Enterprise sono personalizzati in base al vostro contratto. Il nuovo doppiaggio viene fatturato sui segmenti modificati, con un minimo di un minuto per ogni operazione.
Iniziate con una prova gratuita nell'app Rask, senza bisogno di carta di credito, per ascoltare le voci sul vostro video. L'accesso alle API è disponibile nei piani Creator Pro, Business ed Enterprise, con funzionalità che variano in base al vostro piano.
L'accesso alle API è disponibile nei piani Creator Pro, Business ed Enterprise, con funzioni che variano a seconda del piano scelto. Potete generare l'ID cliente e la password segreta direttamente nell'app e iniziare subito a effettuare chiamate. Per le condizioni dedicate alle aziende, i prezzi per grandi volumi e la copertura di lingue personalizzate, potete rivolgervi al nostro team.