# 1. send your script as timed segments - one speaker per line
curl -X POST https://api.rask.ai/v2/transcriptions \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
"src": {"text": "Welcome to the new dashboard.", "lang": "en"},
"dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}}
]}'
# 2. voice the script over your video
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\", \"transcript_id\": \"$TRANSCRIPT_ID\"}"# When status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, voiceover, translated_audio, translated_video}'



قم بتحميل الفيديو أو التسجيل الصوتي الذي يتبع له التعليق الصوتي، باستخدام ملف أو رابط وسائط مدعوم. يحدد الجدول الزمني توقيت النص الخاص بك.
قم بإنشاء نص من مقاطع نصية تحتوي على طوابع زمنية والمتحدثين، أو من ملف SRT، ثم أنشئ المشروع باستخدام transcript_id واللغة المستهدفة.
اعرض الأصوات، وقم تعيين إعداد مسبق أو صوت منسوخ لكل متحدث، وأعد الإنشاء إذا لزم الأمر، ثم قم بتنزيل التعليق الصوتي وفيديو وملفات الترجمة.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
async def wait(client, job):
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
return job
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
script = await client.create_transcription(data=schemas.TranscriptionCreate(segments=[
schemas.SegmentCreate(speaker="SPEAKER_00", start="00:00:00,500", end="00:00:04,800",
src=schemas.SegmentTextCreatePatch(text="Welcome to the new dashboard.", lang="en"),
dst=schemas.SegmentTextCreatePatch(text="Bienvenido al nuevo panel.", lang="es-mx")),
]))
job = await wait(client, await client.create_project(data=schemas.ProjectCreate(
video_id=VIDEO_ID, dst_lang="es-mx", transcript_id=script.id)))
# pick a female AI voice preset from the library for SPEAKER_00
voices = await client.get_project_voices(project_id=job.id)
preset = next(v for v in voices if v.gender == "female")
await client.patch_project(project_id=job.id, data=schemas.ProjectPatch(voice={**job.voice, "SPEAKER_00": preset.id}))
job = await wait(client, await client.generate_project(project_id=job.id))
print(job.voiceover, job.translated_video)
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}"}
def wait(pid):
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
time.sleep(10)
return p
script = requests.post(f"{API}/v2/transcriptions", headers=h, json={"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
"src": {"text": "Welcome to the new dashboard.", "lang": "en"},
"dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}},
]}).json()
pid = requests.post(f"{API}/v2/projects", headers=h, json={
"video_id": VIDEO_ID, "dst_lang": "es-mx", "transcript_id": script["id"]}).json()["id"]
project = wait(pid)
voices = requests.get(f"{API}/v2/projects/{pid}/voices", headers=h).json()
preset = next(v for v in voices if v["gender"] == "female")
requests.patch(f"{API}/v2/projects/{pid}", headers=h,
json={"voice": {**project["voice"], "SPEAKER_00": preset["id"]}})
requests.post(f"{API}/v2/projects/{pid}/generate", headers=h)
print(wait(pid)["voiceover"])// 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());
const wait = async (id) => { let p; while ((p = await call('GET', `/v2/projects/${id}`)).status !== 'merging_done') await sleep(10000); return p; };
const script = await call('POST', '/v2/transcriptions', { segments: [
{ speaker: 'SPEAKER_00', start: '00:00:00,500', end: '00:00:04,800',
src: { text: 'Welcome to the new dashboard.', lang: 'en' },
dst: { text: 'Bienvenido al nuevo panel.', lang: 'es-mx' } },
] });
const { id } = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang: 'es-mx', transcript_id: script.id });
const project = await wait(id);
const voices = await call('GET', `/v2/projects/${id}/voices`);
const preset = voices.find((v) => v.gender === 'female');
await call('PATCH', `/v2/projects/${id}`, { voice: { ...project.voice, SPEAKER_00: preset.id } });
await call('POST', `/v2/projects/${id}/generate`);
console.log((await wait(id)).voiceover);# 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. your script as an SRT file in the target language
TRANSCRIPT_ID=$(curl -s -X POST "https://api.rask.ai/v2/transcriptions/srt?dst_lang=es-mx" \
-H "Authorization: Bearer $TOKEN" -F "dst=@script_es-mx.srt" | jq -r .id)
# 3. voice it over the video
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\": \"es-mx\", \"transcript_id\": \"$TRANSCRIPT_ID\"}" | jq -r .id)
# 4. when status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, voiceover, translated_video}'<?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']];
$script = $json($http->post('/v2/transcriptions', ['headers' => $h, 'json' => ['segments' => [[
'speaker' => 'SPEAKER_00', 'start' => '00:00:00,500', 'end' => '00:00:04,800',
'src' => ['text' => 'Welcome to the new dashboard.', 'lang' => 'en'],
'dst' => ['text' => 'Bienvenido al nuevo panel.', 'lang' => 'es-mx'],
]]]]));
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $videoId, 'dst_lang' => 'es-mx', 'transcript_id' => $script['id']]]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['voiceover'];{"label": "Renata", "gender": "female", "sample_src": "https://..."} AI voice preset
{"label": "Gerardo", "gender": "male", "sample_src": "https://..."} AI voice preset
{"label": "Maria Lopez", "gender": "auto", "sample_src": "https://..."} custom voice clone
{"label": "Voice Clone", "gender": "auto", "sample_src": null} instant voice clone

es-mx و es-es على حد سواء. يسجل المشروع glossary_version، بحيث لا تؤدي التعديلات لاحقاً إلى تغيير العمل المكتمل دون ملاحظة ذلك.نعم، للتعليق الصوتي للفيديو. أرسل النص الخاص بك كشرائح زمنية أو ملف SRT مع الفيديو، وستقوم واجهة برمجة التطبيقات بإنشاء صوت طبيعي متزامن مع الصورة، باستخدام أصوات الذكاء الاصطناعي أو استنساخ الأصوات، مع ترجمات ومسارات صوتية في نفس المشروع.
تقوم Rask بتوليد الصوت للمشاريع الكاملة وتسليم الملفات، وهو ما يناسب مقاطع الفيديو المنشورة والمحتوى التدريبي والتسويقي. أما بالنسبة لوكلاء الصوت ومراكز الاتصال والتطبيقات الأخرى التي تتطلب استجابة سريعة جداً للحصول على الصوت في غضون ثوانٍ، فإن واجهة برمجة تطبيقات تحويل النص إلى كلام المتدفقة تُعد الخيار الأنسب.
يتم تسليم الصوت عند اكتمال عملية التوليد للمشروع: التعليق الصوتي بصيغة WAV في الخطط المؤهلة، بالإضافة إلى الصوت المُمزج والفيديو. لا تقوم واجهة برمجة التطبيقات ببث أجزاء أو بيانات الصوت أثناء عملية التوليد.
قم بإنشاء نص باستخدام POST /v2/transcriptions من المقاطع التي يحتوي كل منها على متحدث، ووقت بداية ونهاية بتنسيق HH:MM:SS,mmm، والنص. يمكنك أيضاً تحميل ملف SRT إلى POST /v2/transcriptions/srt. ثم قم بتمرير transcript_id عند إنشاء المشروع.
تتضمن كل لغة مستهدفة أصواتاً مُسبقة الإعداد للذكاء الاصطناعي مع جنس محدد في مكتبة الأصوات. احصل على الخيارات المتاحة للمشروع باستخدام GET /v2/projects/{id}/voices وقم تعيين صوت واحد لكل متحدث باستخدام معرف الصوت. في اللغات التي تدعم استنساخ الأصوات، يمكنك أيضاً استخدام الأصوات المستنسخة.
نعم. قم بإنشاء نسخة صوتية مخصصة مرة واحدة في تطبيق Rask بموافقة المتحدث، ثم قم بتعيين معرف الصوت الخاص به لأي متحدث عبر واجهة برمجة التطبيقات في اللغات التي تدعم استنساخ الصوت. يعمل هذا الخيار بشكل ممتاز كصوت علامة تجارية متسق.
اختر من بين أكثر من 135 لغة وخياراً إقليمياً. اكتب النص بلغة واحدة وسيقوم Rask بترجمته، أو أرسل النص مترجماً بالفعل باللغة المستهدفة. تتوفر أصوات الذكاء الاصطناعي لكل لغة مستهدفة.
تقبل واجهة برمجة التطبيقات نصاً عادياً لكل مقطع. لتوجيه النطق، قم بتعديل الهجاء في نص السكريبت. تتحكم المسارد في كيفية ترجمة المصطلحات، وليس في طريقة نطقها.
يتبع الأداء الصوتي الصوت المحدد والنص الخاص بك، بما في ذلك علامات الترقيم. للحصول على نطاق عاطفي يضاهي الأداء الحقيقي، فإن استنساخ صوت المتحدث الأصلي يحافظ بشكل أكبر على هوية صوته.
يمكنك استخدام مقطع فيديو أو تسجیل صوتي. قم برفع الوسائط الأصلية وتوفير نص زمني لإنشاء التعليق الصوتي على طول خطه الزمني. يلزم رفع ملف وسائط.
لا. يتم احتساب الاستخدام بناءً على دقائق الفيديو، مع التقريب إلى الدقيقة الكاملة التالية، من نفس رصيد الدقائق في تطبيق Rask. تكلفة الدقائق الإضافية هي 3 دولارات لكل دقيقة في خطط القياسية المؤهلة. أما أسعار خطط المؤسسات فتُحدد حسب اتفاقك. تُحسب إعادة الدبلجة على الأجزاء المعدلة، بحد أدنى دقيقة واحدة لكل عملية.
ابدأ بفترة تجريبية مجانية في تطبيق Rask دون الحاجة لبطاقة ائتمان، لتسمع الأصوات على فيديوك الخاص. يتوفر الوصول إلى API في خطط Creator Pro وBusiness وEnterprise، وتتحدد الميزات المتاحة حسب خطتك.
تتوفر إمكانية الوصول ضمن خطط Creator Pro، وBusiness، وEnterprise، وتتحدد الميزات بناءً على خطتك. يمكنك إنشاء معرف العميل والرمز السري الخاص بك في التطبيق والبدء في الاستخدام فوراً. أما بالنسبة لشروط خطة Enterprise، وأسعار الكميات الكبيرة، ودعم اللغات المخصصة، فيمكنك التواصل مع فريقنا.