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