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



Bir video dosyasını çok parçalı form verisi (multipart form data) olarak yükleyin veya YouTube, Google Drive, Vimeo, S3 ya da doğrudan bir bağlantı paylaşın. Herhangi bir ücret ödemeden bir medya kimliği (ID) ve video meta verilerini elde edersiniz.
Medya kimliğini video_id olarak ve hedef dili belirtin. Otomatik dil algılama için kaynak dili boş bırakın. Transkripsiyon hemen başlar.video_id
Çevrilen medyanın işlenmesi devam ederken kaydı dizine eklemeye (indexlemeye) başlayabilmeniz için konuşma metni bölümlerini hazır olur olmaz okuyun. Proje tamamlandığında altyazı ve medya dosyalarını indirin.
# 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 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. Bir video dosyası veya bağlantısı gönderin, bir proje oluşturun ve GET /v2/projects/{id}/transcription adresinden konuşmacı etiketleri ile zaman damgalarını içeren dökümü okuyun. Döküm, her Rask projesinin ilk aşamasıdır ve ardından çeviri, altyazı ve dublajlı versiyon eklenir.
Evet. Medya uç noktasına bir YouTube, Google Drive, Vimeo, S3 veya doğrudan indirme bağlantısı gönderin; API videonun kendisini getirir. Ayrıca doğrudan video dosyaları da yükleyebilirsiniz.
Evet. Her video için bir proje oluşturun ve bunları aynı anda çalıştırın. API'nin kullanım sınırı, eşzamanlılık kotası veya anahtar başına sınırlaması yoktur; bu nedenle tüm arşivinizin toplu dökümü kodunuzda yalnızca tek bir döngüdür.
Farklı konuşmacılar otomatik olarak algılanır ve her segmentte SPEAKER_00 gibi bir konuşmacı etiketi bulunur. Konuşmacı sayısını biliyorsanız, projeyi oluştururken num_speakers değerini iletin.
API, otomatik dil algılama özelliğiyle İngilizce dahil 75 kaynak dili destekler; src_lang değerini boş bırakabilir veya en gibi iki harfli bir kod iletebilirsiniz. Dökümler, en-us veya es-mx gibi 135'ten fazla dil ve bölge seçeneğine çevrilebilir.
Doğruluk videoya bağlıdır: arka plan gürültüsü, gürültülü ortamlarlar, üst üste binen konuşmalar, aksanlar ve teknik terimler bunda rol oynar. API'yi kendi videolarınızda test edin ve yayınlamadan önce API üzerinden gerekli düzeltmeleri yapın.
Döküm, konuşmacılar ve zaman damgalarıyla birlikte JSON segmentleri olarak gelir. Düz metin elde etmek için segmentlerin metnini birleştirin veya dökümlerde arama yapılabilmesi için zaman damgalarını saklayın. SRT ve VTT formatındaki altyazılar hedef dilde dahildir.
Hayır. API; dökümü, çeviriyi, altyazıları ve dublajlı versiyonu döndürür. Yapay zeka tarafından oluşturulan özetler veya toplantı notları oluşturmak için dökümü tercih ettiğiniz bir özetleme aracına iletin.
Evet, kayıtlardan alınabilir. Kaydedilen toplantıyı video veya ses dosyası olarak yükleyin. API, toplantı platformlarına bağlanmaz ve canlı aramalar için gerçek zamanlı altyazı ya da düşük gecikmeli döküm sunmaz.
API belgelerinde sabit bir dosya boyutu sınırı belirtilmemiştir. Her proje, planınızın limitleri uygulandıktan sonraki original_duration ve duration değerlerini bildirir. Çok uzun videolar veya yüksek hacimli işlemler için ekibimizle görüşün.
Projeler, Rask uygulamasındaki dakikalar havuzundan düşülmek üzere video dakikası başına (en yakın tam dakikaya yuvarlanarak) ücretlendirilir. Fiyata döküm, çeviri, altyazılar ve dublajlı versiyon dahildir. Uygun standart planlarda ek dakikalar 3$/dk'dır. Kurumsal fiyatlandırma, anlaşmanıza göre özel olarak belirlenir.
Kendi videolarınızda döküm özelliğini test etmek için kredi kartı gerekmeden, Rask uygulamasındaki ücretsiz deneme sürümüyle başlayın. API erişimi Creator Pro, Business ve Enterprise planlarında sunulur; özellikler planınıza göre belirlenir.
API erişimi Creator Pro, Business ve Enterprise planlarında sunulur; özellikler planınıza göre belirlenir. İstemci kimliğinizi (client id) ve gizli anahtarınızı (secret) uygulamada oluşturup hemen kullanmaya başlayabilirsiniz. Kurumsal planlar, hacim odaklı fiyatlandırma ve özel dil kapsamı için ekibimizle iletişime geçebilirsiniz.