# 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 بنسخ ملفات الصوت والفيديو الكاملة والممسوحة مسبقاً. بالنسبة للتعليقات الفورية، والمساعدين الصوتيين، والذكاء الاصطناعي المحادثي، ومراكز الاتصال، حيث يجب أن يصل النص بينما لا يزال الشخص يتحدث، فإن واجهة برمجة تطبيقات البث لتحويل الكلام إلى نص تكون هي الخيار الأنسب.
تعتمد الدقة على الصوت: الميكروفونات، واللهجات، وتداخل الكلام، والضوضاء في الخلفية كلها أمور مهمة. اختبر واجهة برمجة التطبيقات على عينة من تسجيلاتك الخاصة، وقم بتصحيح أي جزء من خلال واجهة برمجة التطبيقات قبل نشرها أو ترجمتها.
لا تقبل عملية التعرف قائمة مفردات مخصصة. قم بتصحيح كلمات محددة في النص من خلال نقطة نهاية الأجزاء. عند ترجمة النص، يحافظ المسرد على أسماء المنتجات والأعلام والمصطلحات الخاصة بالمجال متسقة.
يتضمن المشروع النهائي ملفات ترجمة نصية بصيغتي SRT و VTT باللغة المستهدفة. يأتي النص المكتوب للغة الأصلية على شكل أجزاء بتنسيق JSON مع أوقات البداية والنهاية، والتي يمكن تحويلها إلى SRT بأسطر قليلة من الكود البرمجي.
نعم. في الخطط التي تدعم استيراد النصوص، يمكنك توفير نص أساسي حالي، أو ترجمة معتمدة للغة المستهدفة، أو كلاهما كملفات SRT أو أجزاء نصية محددة بوقت عند إنشاء المشروع. يمكن لـ Rask ترجمة النص الأساسي الخاص بك أو استخدام الترجمة المعتمدة لديك لأغراض الدبلجة.
يتم احتساب تكلفة المشاريع لكل دقيقة من الصوت أو الفيديو، ويتم تقريبها إلى الدقيقة الكاملة التالية، وذلك من نفس رصيد الدقائق في تطبيق Rask. يتضمن السعر عملية النسخ، والترجمة، والتعليق الصوتي، والترجمات النصية. تكلفة الدقائق الإضافية هي 3 دولارات للدقيقة في الخطط القياسية المؤهلة. أما أسعار خطط الشركات فتتم مراجعتها وفقاً لاتفاقك. وإذا كنت بحاجة إلى النص المكتوب فقط، فإن واجهة برمجة التطبيقات (API) المخصصة لتحويل الكلام إلى نص تكون بتكلفة أقل.
ابدأ بتجربة مجانية في تطبيق Rask دون الحاجة لبطاقة ائتمان، لتجربة تحويل الصوت إلى نص والترجمة على ملفاتك الخاصة. يتوفر الوصول إلى واجهة برمجة التطبيقات (API) في خطط Creator Pro، وBusiness، وEnterprise، وتتحدد الميزات بناءً على خطتك.
يتوفر الوصول إلى واجهة برمجة التطبيقات (API) في خطط Creator Pro، وBusiness، وEnterprise، وتتحدد الميزات بناءً على خطتك. يمكنك إنشاء معرف العميل (client id) وكلمة المرور السرية (secret) داخل التطبيق والبدء في الاستخدام فوراً. أما بالنسبة لشروط الشركات، والأسعار حسب حجم الاستخدام، وتغطية اللغات المخصصة، فيمكنك التنسيق مع فريقنا بشأنها.