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



Nahrajte video nebo zvukovou nahrávku, ke které má mluvené slovo patřit, pomocí souboru nebo podporované adresy URL. Časová osa poskytne načasování pro váš scénář.
Vytvořte přepis z textových segmentů s časovými značkami a mluvčími nebo ze souboru SRT a poté vytvořte projekt pomocí jeho transcript_id a cílového jazyka.
Zobrazte seznam hlasů, přiřaďte každému mluvčímu předvolbu nebo klon, v případě potřeby proveďte regeneraci a poté stáhněte mluvené slovo, video a soubory s titulky.
# 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 a es-es stejně tak. Projekt uchovává záznamy glossary_version, takže pozdější úpravy nikdy nepozorovaně nezmění hotovou práci.Ano, pro dabing videí. Odešlete svůj scénář jako textové segmenty s časováním nebo soubor SRT společně s videem a API vygeneruje přirozeně znějící řeč načasovanou podle obrazu, využívající AI hlasy nebo klonované hlasy, včetně titulků a zvukových stop v rámci jednoho projektu.
Rask generuje řeč pro celé projekty a dodává hotové soubory, což se hodí pro publikovaná videa, výukové materiály a marketingový obsah. Pro hlasové asistenty, kontaktní centra a další aplikace s nízkou latencí, které potřebují zvuk do několika sekund, se lépe hodí API pro streamování převodu textu na řeč.
Zvuk se dodá po dokončení generování pro daný projekt: dabing ve formátu WAV u vybraných tarifů, smíchaný zvuk a video. API nestreamuje části zvuku ani zvuková data během probíhajícího generování.
Vytvořte přepis pomocí požadavku POST /v2/transcriptions ze segmentů, z nichž každý obsahuje mluvčího, čas začátku a konce ve formátu HH:MM:SS,mmm a text. Můžete také nahrát soubor SRT na adresu POST /v2/transcriptions/srt. Poté při vytváření projektu předejte identifikátor transcript_id.
Každý cílový jazyk má v knihovně hlasů předvolené AI hlasy s určeným pohlavím. Možnosti pro projekt získáte pomocí GET /v2/projects/{id}/voices a pro každého mluvčího přiřadíte jeden hlas podle jeho ID. V podporovaných jazycích pro klonování hlasu můžete využít i vlastní klonované hlasy.
Ano. Jakmile se souhlasem mluvčího vytvoříte vlastní klonovaný hlas v aplikaci Rask, můžete jeho ID hlasu přiřadit libovolnému mluvčímu prostřednictvím API v podporovaných jazycích pro klonování hlasu. Skvěle se to hodí pro zachování jednotného hlasu značky.
Vyberte si z více než 135 jazyků a regionálních možností. Napište scénář v jednom jazyce a Rask jej přeloží, nebo odešlete scénář rovnou v cílovém jazyce. AI hlasy jsou k dispozici pro všechny cílové jazyky.
API přijímá prostý text pro každý segment. Pokud chcete upravit výslovnost, změňte pravopis přímo v textu scénáře. Slovníčky určují, jak se překládají výrazy, nikoliv jak se vyslovují.
Projev se řídí vybraným hlasem a vaším textem včetně interpunkce. Pokud chcete dosáhnout emocionálního rozsahu, který odpovídá reálnému výkonu, klonovaný hlas původního mluvčího lépe zachová jeho jedinečný hlasový projev.
Můžete použít video nebo zvukovou nahrávku. Nahrajte zdrojová média a přidejte časovaný scénář, abyste vygenerovali dabing podle časové osy. Nahrání souboru s médii je povinné.
Ne. Využití se účtuje po minutách videa, zaokrouhleno nahoru na celé minuty, ze stejného fondu minut jako v aplikaci Rask. Další minuty stojí 3 $ za minutu u vybraných standardních tarifů. Ceny pro firemní zákazníky se odvíjejí od individuální smlouvy. Opětovný dabing se účtuje podle upravených částí s minimem jedné minuty na zpoplatněné spuštění.
Začněte bezplatnou zkušební verzí v aplikaci Rask bez nutnosti zadávat platební kartu a vyzkoušejte si hlasy na vlastním videu. Přístup k API je k dispozici u tarifů Creator Pro, Business a Enterprise, přičemž možnosti závisí na zvoleném tarifu.
Přístup k API je k dispozici v tarifech Creator Pro, Business a Enterprise, přičemž možnosti závisí na vašem tarifu. ID klienta a tajný klíč si vygenerujete přímo v aplikaci a můžete začít hned volat. Firemní podmínky, velkoobchodní ceny a vlastní jazyky řešíme individuálně přes náš tým.