# 1. upload the video once - YouTube, Drive, S3, Vimeo 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://example.com/onboarding.mp4", "name": "onboarding"}'
# 2. one project per subtitle language
for lang in es-mx fr-fr ja-jp; do
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\": \"$lang\"}"
done# When status is merging_done, download both subtitle files
P=$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN")
curl -s -o onboarding.es-mx.srt "$(echo $P | jq -r .translation_srt_path)"
curl -s -o onboarding.es-mx.vtt "$(echo $P | jq -r .translation_vtt_path)"



Videoyu dosya olarak gönderin veya YouTube, Google Drive, S3, Vimeo ya da herhangi bir doğrudan bağlantı (URL) üzerinden paylaşın. Tek bir yükleme, tüm altyazı dilleri için geçerlidir.
Media ID'yi video_id olarak ve her proje için tek bir hedef dil belirtin. Farklı dillere ait projeler aynı anda çalışır.
Durum 'merging_done' (birleştirme tamamlandı) aşamasına gelene kadar kontrol edin, ardından .srt ve .vtt dosyalarını indirip kendi sisteminize kaydedin.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio, urllib.request
from rask_sdk import clients, enums, schemas
LANGS = ["es-mx", "fr-fr", "ja-jp"]
async def subtitle(client, video_id, lang):
job = await client.create_project(data=schemas.ProjectCreate(video_id=video_id, dst_lang=lang))
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
# links are presigned for one hour - save the files right away
urllib.request.urlretrieve(job.translation_srt_path, f"video.{lang}.srt")
urllib.request.urlretrieve(job.translation_vtt_path, f"video.{lang}.vtt")
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/onboarding.mp4"))
while media.status is enums.MediaStatus.PROCESSING:
await asyncio.sleep(5)
media = await client.get_media(media_id=media.id)
await asyncio.gather(*(subtitle(client, media.id, l) for l in LANGS))
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}"}
pid = requests.post(f"{API}/v2/projects", headers=h,
json={"video_id": VIDEO_ID, "dst_lang": "de-de"}).json()["id"]
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
time.sleep(10)
# translated subtitles: download the files
open("video.de-de.vtt", "wb").write(requests.get(p["translation_vtt_path"]).content)
# original-language captions: build a WebVTT file from the transcript segments
segs = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
cues = [f"{s['start'].replace(',', '.')} --> {s['end'].replace(',', '.')}\n{s['src']['text']}" for s in segs]
open("video.en.vtt", "w").write("WEBVTT\n\n" + "\n\n".join(cues) + "\n")// no dependencies, Node 18+ global fetch
import { writeFile } from 'node:fs/promises';
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 langs = ['es-mx', 'pt-br', 'ko-kr'];
const tracks = await Promise.all(langs.map(async (dst_lang) => {
let p = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
const file = `subs/${dst_lang}.vtt`;
await writeFile(file, await ((await fetch(p.translation_vtt_path)).text()));
return `<track kind="subtitles" srclang="${dst_lang}" src="/${file}">`;
}));
console.log(tracks.join('\n')); // paste inside your <video> element# 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. create the project for one subtitle language
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\": \"it-it\"}" | jq -r .id)
# 3. wait for merging_done
until [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" = merging_done ]; do
sleep 10
done
# 4. save both subtitle files
P=$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN")
curl -s -o video.it-it.srt "$(echo $P | jq -r .translation_srt_path)"
curl -s -o video.it-it.vtt "$(echo $P | jq -r .translation_vtt_path)"<?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']];
foreach (['es-mx', 'tr-tr'] as $lang) {
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $videoId, 'dst_lang' => $lang]]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
// presigned links, valid for one hour
file_put_contents("video.$lang.srt", file_get_contents($p['translation_srt_path']));
file_put_contents("video.$lang.vtt", file_get_contents($p['translation_vtt_path']));
} 0s created
11s transcription_started
87s translation_started
99s voiceover_started
154s merging_started
165s merging_done

es-mx ve es-es benzer şekilde hizmet eder. Proje kayıtları sözlük_sürümü, böylece daha sonra yapılan düzenlemeler tamamlanan çalışmayı habersiz değiştirmez.Evet. Her Rask projesi, hedef dilde SRT ve WebVTT formatında altyazı dosyaları sunar. Bir video yükleyin, her altyazı dili için ayrı bir proje oluşturun ve proje tamamlandığında dosyaları indirin.
Her proje için iki format sunulur: hedef dilde bir SRT dosyası ve bir WebVTT (VTT) dosyası. Platformunuzun farklı bir altyazı formatına ihtiyacı varsa, döküm (transkript) zaman damgalı JSON segmentleri olarak da kullanılabilir.
Altyazı dosyaları hedef dildedir. Orijinal dilde altyazı almak için döküm segmentlerini inceleyebilirsiniz: her segment, birkaç satır kodla SRT veya VTT dosyasına dönüştürülebilen başlangıç ve bitiş zamanlarına sahip kaynak metni içerir.
Altyazılar, 75 kaynak dilden es-mx, pt-br ve fr-ca gibi 135'ten fazla dil ve bölge seçeneğiyle sunulur. Her proje tek bir hedef dili destekler; aynı yüklemeden her dil için ayrı bir proje oluşturun.
Henüz değil. API, oynatıcınız veya video düzenleme yazılımınız için altyazı dosyaları sağlar. Altyazıların videonun içine gömülü olduğu bir sonuç için Rask web uygulamasını kullanın.
Dosyalar metin ve zamanlama içerir. Yazı tipi, boyut, renk ve konum video oynatıcınızda, uygulamanızda veya düzenleme yazılımınızda ayarlanır; böylece tek bir altyazı dosyası her yerde kullanılabilir.
Dosyalar konuşulan diyalogları içerir. İşitme engelli izleyiciler için müzik ve ses efekti açıklamaları otomatik olarak oluşturulmaz; bunları kendi altyazı düzenleme adımınızda ekleyebilirsiniz.
Her döküm segmenti SPEAKER_XX formatında bir konuşmacı etiketi taşır, böylece röportajlar ve diyaloglar için altyazı oluştururken konuşmacı adlarını ekleyebilirsiniz.
API aracılığıyla segmentin metnini veya zamanlamasını güncelleyin ve projeyi yeniden oluşturun. Altyazı dosyaları dublajlı versiyonla birlikte güncellenir. Yeniden oluşturma işlemi, çalıştırma başına bir dakikalık minimum süreyle değişen segmentler üzerinden ücretlendirilir.
İndirme bağlantıları önceden imzalanmıştır ve bir saat süreyle geçerlidir. Dosyaları kendi depolama alanınıza kaydedin veya yeni bağlantılar almak için projeyi tekrar açın.
Evet. Transkript içerme özelliğine sahip planlarda, proje oluştururken kaynak dildeki altyazıları, onaylanmış hedef dildeki bir SRT dosyasını veya her ikisini birden yükleyebilirsiniz. Mevcut altyazıları kaynak olarak kullanabilir ya da hedef dildeki altyazılar ve dublaj için kendi onaylanmış çevirinizi saklayabilirsiniz.
Projeler, Rask uygulamasındaki dakika havuzunuzdan düşülerek, sonraki tam dakikaya yuvarlanan video dakikası başına ücretlendirilir. Fiyata transkripsiyon, çeviri, altyazı ve dublajlı sürüm dahildir. Uygun standart planlarda ek dakikaların dakikası 3 ABD dolarıdır. Kurumsal fiyatlandırma, sizinle yapılan anlaşmaya göre belirlenir.
API erişimi Creator Pro, Business ve Enterprise planlarında sunulur ve özellikler planınıza göre belirlenir. Uygulama üzerinden istemci kimliğinizi ve gizli anahtarınızı oluşturarak hemen kullanmaya başlayabilirsiniz. Kurumsal şartlar, hacim bazlı fiyatlandırma ve özel dil seçenekleri için ekibimizle iletişime geçebilirsiniz.