# 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)"'



قم برفع ملف فيديو كبيانات نموذج متعددة الأجزاء، أو شارك رابطاً من يوتيوب، أو جوجل درايف، أو فيميو، أو S3، أو رابطاً مباشراً. ستحصل على معرف الوسائط وبيانات الفيديو قبل استهلاك أي رصيد.
قم بتمرير معرف الوسائط كـ video_id مع تحديد اللغة المستهدفة. اتركه فارغاً للتعرف التلقائي على لغة المصدر لتبدأ عملية النسخ فوراً.video_id
اقرأ أجزاء النص بمجرد توفرها لتتمكن من البدء بفهرسة التسجيل بينما يستمر معالجة الوسائط المترجمة. قم بتحميل ملفات النصوص والوسائط عند اكتمال المشروع.
# 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 و es-es على حد سواء. يسجل المشروع glossary_version، بحيث لا تؤدي التعديلات اللاحقة إلى تغيير العمل المكتمل دون إشعار.نعم. أرسل ملف فيديو أو رابطاً، وأنشئ مشروعاً، واقرأ النص المفرغ مع أسماء المتحدثين والطوابع الزمنية عبر GET /v2/projects/{id}/transcription. يُعد التفريغ المرحلة الأولى في كل مشروع على Rask، والذي يضيف بعد ذلك الترجمة، والتعليقات التوضيحية، والنسخة المدبلجة.
نعم. أرسل رابطاً من يوتيوب، أو جوجل درايف، أو فيميو، أو S3، أو رابط تحميل مباشر إلى نقطة النهاية الخاصة بالوسائط، وستقوم واجهة برمجة التطبيقات بجلب الفيديو مباشرة. يمكنك أيضاً رفع ملفات الفيديو مباشرة.
نعم. أنشئ مشروعاً واحداً لكل فيديو وقم بتشغيلها بالتوازي. لا توجد حدود لمعدل الاستخدام أو حصة للتزامن في واجهة برمجة التطبيقات، لذا فإن التفريغ الجماعي لمكتبة كاملة لا يتطلب سوى حلقة برمجية واحدة في كودك.
يتم اكتشاف المتحدثين المختلفين تلقائياً، ويحمل كل مقطع تسمية للمتحدث مثل SPEAKER_00. إذا كنت تعرف عدد المتحدثين، يمكنك إرسال num_speakers عند إنشاء المشروع.
تقوم واجهة برمجة التطبيقات بتفريغ 75 لغة مصدر، بما في ذلك الإنجليزية، مع ميزة التحديد التلقائي للغة: اترك src_lang فارغاً، أو أدخل رمزاً مكوناً من حرفين مثل en. يمكن ترجمة النصوص المفرغة إلى أكثر من 135 لغة وخياراً إقليمياً، مثل en-us أو es-mx.
تعتمد الدقة على الفيديو: فالضوضاء في الخلفية، والبيئات الصاخبة، وتداخل الأصوات، واللهجات، والمصطلحات التقنية تلعب دوراً أساسياً. جرب واجهة برمجة التطبيقات على فيديوهاتك الخاصة، وقم بتصحيح أي مقطع من خلالها قبل النشر.
يأتي النص المفرغ في شكل مقاطع بتنسيق JSON تحتوي على أسماء المتحدثين والطوابع الزمنية. يمكنك دمج نصوص المقاطع للحصول على نص عادي، أو الاحتفاظ بالطوابع الزمنية لجعل النصوص قابلة للبحث. يتم تضمين التعليقات التوضيحية بتنسيق SRT و VTT باللغة المستهدفة.
لا. تعيد واجهة برمجة التطبيقات النص المفرغ، وترجمته، والتعليقات التوضيحية، والنسخة المدبلجة. لإنشاء ملخصات أو ملاحظات اجتماعات مولدة بالذكاء الاصطناعي، قم بتمرير النص المفرغ إلى أداة تلخيص من اختيارك.
نعم، من خلال التسجيلات. قم برفع الاجتماع المسجل كملف فيديو أو صوت. لا تتصل واجهة برمجة التطبيقات بمنصات الاجتماعات ولا توفر ترجمة فورية أو تفريغاً قليل التأخير للمكالمات المباشرة.
لا تنشر وثائق واجهة برمجة التطبيقات حد أقصى ثابتاً لحجم الملفات. يعرض كل مشروع original_duration و duration بعد تطبيق حدود باقتك. للفيديوهات الطويلة جداً أو الكميات الكبيرة، تواصل مع فريقنا.
تتم محاسبة المشاريع بناءً على دقائق الفيديو، ويتم تقريبها لأعلى إلى أقرب دقيقة كاملة، وذلك من رصيد الدقائق نفسه في تطبيق Rask. يشمل السعر التفريغ، والترجمة، والتعليقات التوضيحية، والنسخة المدبلجة. تكلف الدقائق الإضافية 3 دولارات للدقيقة في الباقات القياسية المؤهلة. أما أسعار الشركات فتُحدد حسب اتفاقك.
ابدأ بتجربة مجانية في تطبيق Rask، دون الحاجة بطاقة اкреدت، لاختبار التفريغ على فيديوهاتك الخاصة. يتوفر الوصول إلى واجهة برمجة التطبيقات في باقات Creator Pro وBusiness وEnterprise، وتتحدد الميزات بناءً على باقتك.
يتوفر الوصول إلى واجهة برمجة التطبيقات (API) في خطط Creator Pro، وBusiness، وEnterprise، وتتحدد الميزات المتاحة حسب خطتك. يمكنك إنشاء معرف العميل (client id) والرمز السرّي (secret) من داخل التطبيق والبدء في استخدامه فوراً. أما خطط Enterprise، والأسعار الخاصة بكميات الاستخدام، ودعم اللغات المخصصة، فتتم عبر التواصل مع فريقنا.