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



Envie um ficheiro de áudio ou vídeo como dados de formulário multipart, ou publique um link do YouTube, Google Drive, S3, Vimeo ou qualquer URL direto. Obtém um ID de multimédia e os metadados do ficheiro antes de gastar qualquer valor.
Passe o ID de multimédia como video_id e um idioma de destino. Adicione o idioma de origem ou o número de locutores, caso os conheça. O reconhecimento começa imediatamente.
Leia a transcrição assim que os respetivos segmentos estiverem disponíveis, enquanto o conteúdo multimédia traduzido continua a ser processado. Transfira os ficheiros de legendas e multimédia quando o projeto estiver concluído.
# 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 e es-es igualmente. O registo do projeto glossary_version, para que edições posteriores nunca alterem silenciosamente o trabalho concluído.Sim. O reconhecimento de voz é a primeira etapa de qualquer projeto no Rask. Carregue áudio ou vídeo, crie um projeto e leia a transcrição em segmentos com identificação de locutor e carateres temporais através de GET /v2/projects/{id}/transcription. O mesmo projeto traduz a transcrição e devolve legendas e áudio dobrado.
A API aceita 75 línguas de origem. Deixe src_lang vazio para detetar a língua automaticamente, ou indique um código de duas letras, como en ou de. A transcrição pode ser traduzida para mais de 135 línguas e opções regionais.
Sim. Carregue ficheiros de áudio em MP3, WAV, FLAC ou M4A, tais como podcasts, entrevistas e chamadas gravadas, e o projeto transcreve-os da mesma forma que um vídeo.
Sim. Os diferentes locutores são detetados automaticamente e cada segmento inclui uma etiqueta de locutor no formato SPEAKER_XX. Indique num_speakers se souber o total, e corrija o locutor de qualquer segmento através da API.
Não. Os carateres temporais são ao nível do segmento: cada segmento tem uma hora de início e de fim no formato HH:MM:SS,mmm. É este o timing utilizado pelas legendas. Se precisar de um caráter temporal para cada palavra, escolha uma API dedicada de conversão de voz em texto.
Não. O Rask transcreve áudio e vídeo completos e pré-gravados. Para legendas em tempo real, assistentes de voz, IA conversacional e centros de atendimento, onde o texto tem de aparecer enquanto a pessoa ainda está a falar, uma API de conversão de voz em texto em streaming é a melhor opção.
A precisão depende do áudio: microfones, sotaques, sobreposição de vozes e ruído de fundo influenciam o resultado. Teste a API com uma amostra das suas próprias gravações e corrija qualquer segmento através da API antes de o publicar ou traduzir.
O reconhecimento não aceita uma lista de vocabulário personalizado. Corrija palavras específicas na transcrição através do endpoint de segmentos. Quando a transcrição é traduzida, um glossário mantém os nomes de produtos, nomes próprios e termos técnicos consistentes.
O projeto concluído inclui ficheiros de legendas em SRT e VTT na língua de destino. A transcrição na língua de origem é fornecida em segmentos JSON com tempos de início e fim, que podem ser convertidos para SRT com apenas algumas linhas de código.
Sim. Nos planos com importação de transcrição, pode fornecer uma transcrição de origem existente, uma tradução aprovada para o idioma de destino ou ambos como ficheiros SRT ou segmentos de texto com marcação temporal ao criar o projeto. A Rask pode traduzir o seu guião de origem ou utilizar a sua tradução aprovada para a dobragem.
Os projetos são cobrados por minuto de áudio ou vídeo, arredondados para o minuto inteiro seguinte, a partir do mesmo saldo de minutos da aplicação Rask. O preço inclui transcrição, tradução, dobragem e legendas. Os minutos adicionais custam 3 $/min nos planos standard elegíveis. Os preços para empresas são adaptados ao seu contrato. Se precisar apenas de uma transcrição, uma API dedicada de conversão de voz em texto custa menos.
Comece com um período experimental gratuito na aplicação Rask, sem necessidade de cartão, para testar a transcrição e a tradução nos seus próprios ficheiros. O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com funcionalidades determinadas pelo seu plano.
O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com funcionalidades definidas pelo seu plano. Pode gerar o seu ID de cliente e chave secreta na aplicação e começar a utilizá-la de imediato. Os termos para empresas, preços por volume e cobertura de idiomas personalizada são tratados através da nossa equipa.