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



أرسل ملف صوت أو فيديو كبيانات نموذج متعددة الأجزاء، أو انشر رابطاً من يوتيوب، أو جوجل درايف، أو S3، أو فيميو، أو أي رابط مباشر. ستحصل على معرف الوسائط وبيانات الملف قبل دفع أي شيء.
تمرير معرف الوسائط كـ video_id واللغة المستهدفة. أضف لغة المصدر أو عدد المتحدثين إذا كنت تعرفهم. تبدأ عملية التعرف على الفور.
اقرأ النص فور توفر أجزائه، بينما تستمر معالجة الوسائط المترجمة. قم بتنزيل ملفات الترجمة والوسائط عند اكتمال المشروع.
# 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 و es-es على حد سواء. يسجل المشروع glossary_version، بحيث لا تؤدي التعديلات لاحقاً إلى تغيير العمل المكتمل دون ملاحظة ذلك.نعم. يُعد التعرف على الكلام المرحلة الأولى في كل مشروع على Rask. قم برفع ملف صوتي أو فيديو، وقم بإنشاء مشروع، واقرأ النص كأجزاء تحتوي على تسميات المتحدثين والطوابع الزمنية عبر الرابط GET /v2/projects/{id}/transcription. يقوم نفس المشروع بترجمة النص وإرجاع الترجمات والملفات الصوتية المدبلجة.
تقبل واجهة برمجة التطبيقات 75 لغة أساسية. اترك حقل src_lang فارغاً ليتم اكتشاف اللغة تلقائياً، أو أرسل رمزاً مكوناً من حرفين مثل en أو de. ويمكن ترجمة النص إلى أكثر من 135 لغة وخياراً إقليمياً.
نعم. قم برفع الملفات الصوتية بصيغة MP3 أو WAV أو FLAC أو M4A، مثل البودكاست والمقابلات والمكالمات المسجلة، وسي قوم المشروع بتحويلها إلى نص بنفس طريقة الفيديو.
نعم. يتم اكتشاف المتحدثين المختلفين تلقائياً، ويحمل كل جزء تسمية المتحدث بتنسيق SPEAKER_XX. قم بتمرير num_speakers إذا كنت تعرف العدد، وقم بتصحيح متحدث أي جزء عبر واجهة برمجة التطبيقات.
لا. الطوابع الزمنية تكون على مستوى الجزء: لكل جزء وقت بدء ووقت نهاية بالتنسيق HH:MM:SS,mmm. هذا هو التوقيت الذي تستخدمه التعليقات التوضيحية والترجمات. إذا كنت بحاجة إلى طابع زمن, لكل كلمة، فيرجى اختيار واجهة برمجة تطبيقات مخصصة لتحويل الكلام إلى نص.
لا. تقوم Rask بتحويل الصوت والفيديو الكاملين المسجلين مسبقاً. بالنسبة للترجمات الفورية، والوكلاء الصوتيين، والذكاء الاصطناعي التفاعلي، ومراكز الاتصال، حيث يجب أن يظهر النص بينما لا يزال الشخص يتحدث، تُعد واجهة برمجة تطبيقات تحويل الكلام إلى نص المباشر (التدفق) خياراً أفضل.
تعتمد الدقة على جودة الصوت: فالميكروفونات، ولهجات المتحدثين، وتداخل الأصوات، والخلفية الصوتية كلها أمور مهمة. قم بتجربة واجهة برمجة التطبيقات على عينة من تسجيلاتك الخاصة، وصحح أي جزء من خلال واجهة برمجة التطبيقات قبل نشر أو ترجمة المحتوى.
لا تستخدم عملية التعرف قائمة مفردات مخصصة. يمكنك تصحيح كلمات محددة في النص من خلال نقطة نهاية الأجزاء (segments endpoint). وعند ترجمة النص، يحافظ المسرد على ثبات أسماء المنتجات والأسماء الخاصة ومصطلحات المجال.
يتضمن المشروع المنتهي ملفات ترجمة بصيغتي SRT و VTT باللغة المستهدفة. ويأتي نص اللغة المصدر على شكل أجزاء JSON مع أوقات البدء والانتهاء، والتي يمكن تحويلها إلى SRT ببضع أسطر من البرمجة.
نعم. في الخطط التي تتيح استيراد النصوص، يمكنك توفير نص مصدر موجود مسبقاً، أو ترجمة معتمدة للغة المستهدفة، أو كلاهما كملفات SRT أو أجزاء نصية زمنية عند إنشاء المشروع. يمكن لـ Rask ترجمة النص الخاص بك أو استخدام ترجمتك المعتمدة للدبلجة.
تتم محاسبة المشاريع بالدقيقة من الصوت أو الفيديو، مقربة إلى أعلى دقيقة كاملة، من نفس رصيد الدقائق في تطبيق Rask. السعر يشمل النسخ، والترجمة، التعليق الصوتي، والترجمات المصاحبة. الدقائق الإضافية تكلف 3 دولارات للدقيقة في الخطط القياسية المؤهلة. أسعار قطاع الأعمال مصممة خصيصاً لتناسب اتفاقيتك. إذا كنت بحاجة إلى نسخة نصية فقط، فإن واجهة برمجة التطبيقات المخصصة لتحويل الكلام إلى نص ستكون أقل تكلفة.
ابدأ بفترة تجريبية مجانية في تطبيق Rask دون الحاجة لبطاقة ائتمان، لتجربة النسخ والترجمة على ملفاتك الخاصة. يتوفر الوصول إلى واجهة برمجة التطبيقات في خطط Creator Pro و Business و Enterprise، وتتحدد الميزات بناءً على خطتك.
تتوفر إمكانية الوصول ضمن خطط Creator Pro، وBusiness، وEnterprise، وتتحدد الميزات بناءً على خطتك. يمكنك إنشاء معرف العميل والرمز السري الخاص بك في التطبيق والبدء في الاستخدام فوراً. أما بالنسبة لشروط خطة Enterprise، وأسعار الكميات الكبيرة، ودعم اللغات المخصصة، فيمكنك التواصل مع فريقنا.