# 1. upload an audio or video file by link
curl -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"link": "https://example.com/interview.mp3", "name": "interview"}'
# 2. create the project - speech recognition starts automatically
# src_lang is optional: leave it out and the language is detected
curl -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"es-mx\"}"# Read the transcript: one object per segment
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq '.segments[] | {speaker, start, end, text: .src.text}'



Ošlete audio nebo video soubor jako multipart form data, nebo vložte odkaz z YouTube, Google Drive, S3, Vimeo či jakoukoliv přímou URL adresu. Než cokoliv utratíte, získáte ID média a metadata souboru.
Předajte ID média jako video_id a cílový jazyk. Pokud je znáte, přidejte zdrojový jazyk nebo počet mluvčích. Rozpoznávání začne okamžitě.
Přečtěte si přepis, jakmile budou jeho části k dispozici, zatímco zpracování přeloženého média pokračuje. Po dokončení projektu si stáhněte soubory s titulky a médii.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
media = await client.create_media_link(data=schemas.MediaCreateLink(link="https://example.com/interview.mp3"))
while media.status is enums.MediaStatus.PROCESSING:
await asyncio.sleep(5)
media = await client.get_media(media_id=media.id)
# src_lang omitted: the source language is detected automatically
job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="es-mx"))
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
transcript = await client.get_project_transcription(project_id=job.id)
for seg in transcript.segments:
print(seg.start, seg.end, seg.speaker, seg.src.text)
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}"}
with open("interview.mp3", "rb") as f:
media = requests.post(f"{API}/api/library/v1/media", headers=h,
params={"kind": "audio"}, files={"data": f}).json()
while media["status"] == "processing":
time.sleep(5)
media = requests.get(f"{API}/api/library/v1/media/{media['id']}", headers=h).json()
pid = requests.post(f"{API}/v2/projects", headers=h, json={
"video_id": media["id"], "dst_lang": "es-mx", "num_speakers": 2}).json()["id"]
while requests.get(f"{API}/v2/projects/{pid}", headers=h).json()["status"] != "merging_done":
time.sleep(10)
# write the source transcript as an .srt file
segments = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
with open("interview_en.srt", "w") as out:
for i, s in enumerate(segments, 1):
out.write(f"{i}\n{s['start']} --> {s['end']}\n{s['speaker']}: {s['src']['text']}\n\n")// 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());
let media = await call('POST', '/api/library/v1/media/link', { link: 'https://example.com/webinar.mp4' });
while (media.status === 'processing') { await sleep(5000); media = await call('GET', `/api/library/v1/media/${media.id}`); }
let p = await call('POST', '/v2/projects', { video_id: media.id, src_lang: 'en', dst_lang: 'de-de' });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
const { segments } = await call('GET', `/v2/projects/${p.id}/transcription`);
segments.forEach((s) => console.log(`[${s.start}] ${s.speaker}: ${s.src.text}`));
console.log(p.translation_vtt_path); // German subtitles for your player# 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. upload a local audio file
MEDIA_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=audio" \
-H "Authorization: Bearer $TOKEN" -F "data=@podcast_episode.mp3" | jq -r .id)
# 3. create the project once the media status is ready
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"fr-fr\"}" | jq -r .id)
# 4. when status is merging_done, read the transcript with speaker labels
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'<?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']];
$media = $json($http->post('/api/library/v1/media/link', ['headers' => $h, 'json' => [
'link' => 'https://example.com/interview.mp3']]));
while ($media['status'] === 'processing') {
sleep(5);
$media = $json($http->get("/api/library/v1/media/{$media['id']}", ['headers' => $h]));
}
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $media['id'], 'dst_lang' => 'es-mx']]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
$t = $json($http->get("/v2/projects/{$p['id']}/transcription", ['headers' => $h]));
foreach ($t['segments'] as $s) {
echo $s['start'], ' ', $s['speaker'], ': ', $s['src']['text'], PHP_EOL;
}{"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,320", "end": "00:00:07,316", "status": "done",
"src": {"text": "Thanks for joining us. Let's start with the new release.", "lang": "en"},
"dst": {"text": "Gracias por acompañarnos. Empecemos con la nueva versión.", "lang": "es-mx"}},
{"speaker": "SPEAKER_01", "start": "00:00:07,640", "end": "00:00:11,900", "status": "done",
"src": {"text": "Sure. The biggest change is the reporting view.", "lang": "en"},
"dst": {"text": "Claro. El cambio más grande es la vista de reportes.", "lang": "es-mx"}}
]}

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. Rozpoznávání řeči je první fází každého projektu v Rask. Nahrajte zvuk nebo video, vytvořte projekt a přečtěte si přepis rozdělený na úseky se značkami mluvčích a časovými razítky pomocí GET /v2/projects/{id}/transcription. Stejný projekt přeloží přepis a vrátí titulky a nadabovaný zvuk.
API podporuje 75 zdrojových jazyků. Pokud pole src_lang nevyplníte, jazyk se detekuje automaticky, případně můžete zadat dvoupísmenný kód, například en nebo de. Přepis lze přeložit do více než 135 jazyků a regionálních variant.
Ano. Můžete nahrát zvukové soubory ve formátu MP3, WAV, FLAC nebo M4A (například podcasty, rozhovory nebo nahrávky hovorů) a projekt je přepíše stejně jako video.
Ano. Různí mluvčí se detekují automaticky a každý úsek obsahuje značku mluvčího ve formátu SPEAKER_XX. Pokud znáte jejich počet, můžete zadat parametr num_speakers a mluvčího u kteréhokoli úseku v API dodatečně upravit.
Ne. Časová razítka jsou na úrovni úseků: každý úsek má čas začátku a konce ve formátu HH:MM:SS,mmm. Toto načasování se používá pro titulky. Pokud potřebujete časové razítko pro každé slovo, zvolte specializované API pro převod řeči na text.
Ne. Rask přepíše kompletní předem nahraný zvuk a video. Pro titulky v reálném čase, hlasové asistenty, konverzační umělou inteligenci a kontaktní centra, kde se text musí zobrazit, ještě než člověk domluví, se lépe hodí streamovací API pro převod řeči na text.
Přesnost závisí na kvalitě zvuku – roli hrají mikrofony, přízvuky, mluvení přes sebe i okolní hluk. Vyzkoušejte API na vzorku svých vlastních nahrávek a jakýkoli úsek před zveřejněním nebo překladem upravte prostřednictvím API.
Rozpoznávání nepoužívá vlastní seznam slovní zásoby. Konkrétní slova v přepisu můžete opravit přes koncový bod pro úseky. Při překladu přepisu pak slovníček zajistí jednotnost názvů produktů, vlastních jmen a oborových výrazů.
Hotový projekt obsahuje soubory s titulky ve formátu SRT a VTT v cílovém jazyce. Přepis ve zdrojovém jazyce je k dispozici jako segmenty JSON s časy začátku a konce, které lze pomocí několika řádků kódu převést na SRT.
Ano. U tarifů s možností importu přepisů můžete při vytváření projektu vložit existující zdrojový přepis, schválený překlad nebo obojí ve formě souborů SRT nebo časovaných textových segmentů. Rask dokáže přeložit váš zdrojový scénář nebo pro dabing použít váš schválený překlad.
Projekty se účtují za každou započatou minutu zvuku nebo videa ze stejného balíčku minut jako v aplikaci Rask. Cena zahrnuje přepis, překlad, dabing a titulky. Další minuty stojí 3 $ za minutu u příslušných standardních tarifů. Ceny pro firemní zákazníky se odvíjejí od vaší smlouvy. Pokud potřebujete pouze přepis, samostatné API pro převod řeči na text vyjde levněji.
Vyzkoušejte bezplatnou zkušební verzi v aplikaci Rask (bez nutnosti zadávat platební kartu) a otestujte přepis i překlad na vlastních souborech. Přístup k API je k dispozici u tarifů Creator Pro, Business a Enterprise, přičemž jeho 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.