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



Wyślij plik audio lub wideo jako wieloczęściowe dane formularza albo podaj link z YouTube, Google Drive, S3, Vimeo lub dowolny bezpośredni adres URL. Otrzymasz identyfikator pliku oraz jego metadane, zanim cokolwiek poniesiesz koszty.
Przekaż identyfikator pliku jako video_id oraz wybierz język docelowy. Jeśli znasz język źródłowy lub liczbę osób mówiących, możesz je dodać. Rozpoznawanie rozpocznie się natychmiast.
Odczytaj transkrypcję, gdy tylko jej fragmenty będą dostępne, podczas gdy tłumaczenie plików nadal trwa. Pobierz napisy oraz pliki multimedialne po zakończeniu projektu.
# 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 oraz es-es podobnie. Projekt rejestruje wersja_słownika, dzięki czemu późniejsze poprawki nigdy nie zmieniają ukończonej pracy w tle.Tak. Rozpoznawanie mowy to pierwszy etap każdego projektu w Rask. Prześlij plik audio lub wideo, utwórz projekt i odczytaj transkrypcję jako segmenty z etykietami mówców oraz znacznikami czasu za pomocą zapytania GET /v2/projects/{id}/transcription. Ten sam projekt tłumaczy transkrypcję i zwraca napisy oraz zdubbingowany dźwięk.
API obsługuje 75 języków źródłowych. Pozostaw pole src_lang puste, a język zostanie wykryty automatycznie, lub podaj dwuliterowy kod, taki jak en lub de. Transkrypcję można przetłumaczyć na ponad 135 języków i wariantów regionalnych.
Tak. Prześlij pliki audio w formacie MP3, WAV, FLAC lub M4A, takie jak podcasty, wywiady czy nagrane rozmowy, a projekt przetranskrybuje je w taki sam sposób jak wideo.
Tak. Różni mówcy są wykrywani automatycznie, a każdy segment zawiera etykietę mówcy w formacie SPEAKER_XX. Możesz podać parametr num_speakers, jeśli znasz ich liczbę, oraz skorygować mówcę dla dowolnego segmentu przez API.
Nie. Znaczniki czasu dotyczą całych segmentów: każdy segment ma czas rozpoczęcia i zakończenia w formacie GG:MM:SS,mmm. Takich odstępów czasu używają napisy. Jeśli potrzebujesz znacznika czasu dla każdego słowa, wybierz dedykowane API zamiany mowy na tekst.
Nie. Rask wykonuje transkrypcję gotowych, wcześniej nagranych plików audio i wideo. W przypadku napisów na żywo, asystentów głosowych, konwersacyjnej sztucznej inteligencji i centrów obsługi telefonicznej, gdzie tekst musi pojawić się, gdy dana osoba jeszcze mówi, lepszym wyborem będzie strumieniowe API zamiany mowy na tekst.
Dokładność zależy od jakości dźwięku: znaczenie mają mikrofony, akcenty, nakładająca się mowa oraz szum w tle. Przetestuj API na próbce własnych nagrań i w razie potrzeby popraw dowolny segment przez API przed publikacją lub tłumaczeniem.
Rozpoznawanie mowy nie korzysta z niestandardowej listy słów. Konkretne wyrazy w transkrypcji można skorygować za pomocą punktu końcowego segmentów. Podczas tłumaczenia transkrypcji słowniczek dba o spójność nazw produktów, nazw własnych oraz terminów branżowych.
Gotowy projekt zawiera pliki napisów w formatach SRT i VTT w języku docelowym. Transkrypcja w języku źródłowym jest dostępna w postaci segmentów JSON z czasami początkowymi i końcowymi, które można łatwo przekonwertować doformatu SRT za pomocą kilku linijek kodu.
Tak. W planach z opcją importu transkrypcji możesz dostarczyć istniejącą transkrypcję źródłową, zatwierdzone tłumaczenie na język docelowy lub oba te elementy jako pliki SRT lub segmenty tekstowe z oznaczeniem czasu podczas tworzenia projektu. Rask może przetłumaczyć Twój tekst źródłowy lub wykorzystać zatwierdzone tłumaczenie do dubbingu.
Projekty są rozliczane za każdą rozpoczętą minutę pliku audio lub wideo, pobieraną z tej samej puli minut co w aplikacji Rask. Cena obejmuje transkrypcję, tłumaczenie, lektora i napisy. Dodatkowe minuty kosztują 3 USD za minutę w ramach dostępnych planów standardowych. Ceny dla firm są ustalane indywidualnie. Jeśli potrzebujesz tylko transkrypcji, dedykowane API zamiany mowy na tekst tańsze.
Rozpocznij od bezpłatnego okresu próbnego w aplikacji Rask (bez podawania karty), aby przetestować transkrypcję i tłumaczenie na własnych plikach. Dostęp do API jest oferowany w planach Creator Pro, Business i Enterprise, a jego możliwości zależą od wybranego planu.
Dostęp do API jest oferowany w planach Creator Pro, Business i Enterprise, a jego możliwości zależą od wybranego planu. Wystarczy wygenerować identyfikator klienta oraz klucz tajny w aplikacji i od razu rozpocząć korzystanie z funkcji. Warunki dla firm, ceny hurtowe i obsługa niestandardowych języków są ustalane indywidualnie z naszym zespołem.