# 1. send the video as a link - YouTube, Google Drive, Vimeo, S3 or direct URL
curl -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"link": "https://youtu.be/...", "name": "camera review"}'
# 2. create the project - the language of the video is detected automatically
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\"}"# The transcript as plain text with timestamps and speakers
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'



Carica un file video come dati di un modulo multipart oppure inserisci un link diretto di YouTube, Google Drive, Vimeo o S3. Ottieni un ID multimediale e i dettagli del video prima di spendere qualsiasi importo.
Inserisci l'ID multimediale come video_id e indica una lingua di arrivo. Lascia vuota la lingua diorigine per il rilevamento automatico. La trascrizione si avvia subito.video_id
Leggi i segmenti della trascrizione non appena sono pronti, così puoi iniziare a indicizzare la registrazione mentre il contenuto continua l'elaborazione. Scarica i sottotitoli e i file multimediali a progetto completato.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
VIDEOS = ["https://youtu.be/aaa", "https://youtu.be/bbb", "https://vimeo.com/123"]
async def transcribe(client, i, link):
media = await client.create_media_link(data=schemas.MediaCreateLink(link=link))
while media.status is enums.MediaStatus.PROCESSING:
await asyncio.sleep(5)
media = await client.get_media(media_id=media.id)
job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="en-us"))
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
t = await client.get_project_transcription(project_id=job.id)
with open(f"video_{i}.txt", "w") as f: # plain text, one segment per line
f.write("\n".join(f"{s.speaker}: {s.src.text}" for s in t.segments))
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
await asyncio.gather(*(transcribe(client, i, v) for i, v in enumerate(VIDEOS))) # no rate limits
asyncio.run(main())import os, 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}"}
media = requests.post(f"{API}/api/library/v1/media/link", headers=h,
json={"link": "https://youtu.be/..."}).json()
project = requests.post(f"{API}/v2/projects", headers=h,
json={"video_id": media["id"], "dst_lang": "es-mx"}).json()
while project["status"] != "merging_done":
time.sleep(10)
project = requests.get(f"{API}/v2/projects/{project['id']}", headers=h).json()
print(project["translated_video"])// 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://drive.google.com/file/d/...' });
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, dst_lang: 'fr-fr' });
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`);
const index = segments.map((s) => ({ t: s.start, speaker: s.speaker, text: s.src.text, fr: s.dst.text }));
console.log(JSON.stringify(index, null, 2)); // ready for your search index# 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 video file
VIDEO_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=video" \
-H "Authorization: Bearer $TOKEN" -F "[email protected]" | 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\": \"$VIDEO_ID\", \"dst_lang\": \"de-de\", \"num_speakers\": 3}" | jq -r .id)
# 4. when status is merging_done, save the transcript as plain text
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq -r '.segments[].src.text' > webinar.txt<?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://vimeo.com/123456']]));
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' => 'pt-br']]));
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]));
file_put_contents('video.txt', implode("\n", array_map(fn($s) => $s['src']['text'], $t['segments'])));no_audio, no_words and forbidden_link are specific enough to show directly to your own user, for example a video without speech.00:00:00,320 SPEAKER_00 Welcome back. Today we test three cameras in low light.
00:00:06,180 SPEAKER_01 I brought the footage from last week's night shoot.
00:00:10,940 SPEAKER_00 Let's start with the smallest sensor, the hardest case.
00:00:15,500 SPEAKER_01 At ISO 6400 the noise is visible, but the colors hold up./transcriptiontranslation_srt_pathtranslation_vtt_pathtranslated_videotranslated_audiooriginal_video

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ì. Invia un file video o un link, crea un progetto e leggi la trascrizione con i nomi degli speaker e i timestamp tramite GET /v2/projects/{id}/transcription. La trascrizione è la prima fase di ogni progetto Rask, a cui vengono poi aggiunti traduzione, sottotitoli e versione doppiata.
Sì. Inserisci un link di YouTube, Google Drive, Vimeo, S3 o un link di download diretto nell'endpoint multimediale, e l'API recupererà il video. Puoi anche caricare direttamente i file video.
Sì. Crea un progetto per ogni video ed eseguili in parallelo. L'API non ha limiti di frequenza, né quote di concorrenza o limitazioni per chiave, quindi la trascrizione in blocco di un'intera libreria richiede un solo ciclo nel tuo codice.
I diversi speaker vengono rilevati automaticamente e ogni segmento riporta un'etichetta identificativa, come SPEAKER_00. Se conosci il numero di speaker, inserisci num_speakers quando crei il progetto.
L'API trascrive 75 lingue di origine, incluso l'inglese, con rilevamento automatico della lingua: lascia vuoto src_lang oppure inserisci un codice di due lettere come en. Le trascrizioni possono essere tradotte in oltre 135 opzioni linguistiche e regionali, come en-us o es-mx.
La precisione dipende dal video: rumore di fondo, ambienti rumorosi, voci sovrapposte, accenti e linguaggio tecnico influiscono sul risultato. Prova l'API sui tuoi video e correggi qualsiasi segmento tramite l'API prima di pubblicare.
La trascrizione viene fornita in segmenti JSON con speaker e timestamp. Unisci il testo dei segmenti per ottenere del testo semplice, oppure mantieni i timestamp per rendere le trascrizioni ricercabili. I sottotitoli nei formati SRT e VTT sono inclusi nella lingua di arrivo.
No. L'API restituisce la trascrizione, la sua traduzione, i sottotitoli e la versione doppiata. Per creare riassunti o note di riunione generati dall'IA, invia la trascrizione a uno strumento di riassunto a tua scelta.
Sì, a partire dalle registrazioni. Carica la riunione registrata come file video o audio. L'API non si connette alle piattaforme di riunione e non offre sottotitoli in tempo reale o trascrizione a bassa Latenza di chiamate dal vivo.
La documentazione delle API non specifica un limite fisso per la dimensione dei file. Ciascun progetto indica original_duration e duration una volta applicati i limiti del tuo piano. Per video molto lunghi o volumi elevati, contatta il nostro team.
I progetti vengono fatturati al minuto di video, arrotondato per eccesso al minuto intero successivo, attingendo dallo stesso monte minuti dell'app Rask. Il prezzo include trascrizione, traduzione, sottotitoli e versione doppiata. I minuti aggiuntivi costano 3$ al minuto sui piani standard idonei. I prezzi per le aziende sono personalizzati in base al tuo contratto.
Inizia con una prova gratuita nell'app Rask, senza carta di credito richiesta, per testare la trascrizione sui tuoi video. L'accesso alle API è disponibile sui piani Creator Pro, Business ed Enterprise, con funzioni determinate dal tuo piano.
L'accesso alle API è disponibile nei piani Creator Pro, Business ed Enterprise, con funzionalità che variano in base al tuo piano. Puoi generare l'ID cliente e la chiave segreta direttamente nell'app e iniziare a usarle subito. Per i piani Enterprise, i prezzi per volume e la copertura di lingue personalizzate, puoi rivolgerti al nostro team.