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



Çok parça form verisi olarak bir video dosyası yükleyin ya da YouTube, Google Drive, Vimeo, S3 veya doğrudan bir bağlantı gönderin. Herhangi bir ücret ödemeden önce bir medya kimliği ve video üst verisi elde edersiniz.
Medya kimliğini video_id olarak ve hedef dili iletin. Otomatik dil algılama için kaynak dili boş bırakın. Metin dökümü hemen başlar.video_id
Çevrilen medya işlenmeye devam ederken kaydı dizine eklemeye başlayabilmeniz için metin dökümü parçalarını 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ı glossary_version, böylece sonraki düzenlemeler tamamlanan çalışmaları asla 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ına sahip metni okuyun. Transkripsiyon, her Rask projesinin ilk aşamasıdır; ardından çeviri, altyazı ve dublajlı sürüm 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 kısıtlaması yoktur; bu nedenle tüm kütüphanenizin toplu transkripsiyonu kodunuzda sadece tek bir döngüdür.
Farklı konuşmacılar otomatik olarak algılanır ve her segment SPEAKER_00 gibi bir konuşmacı etiketi taşır. 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 transkribe eder: src_lang alanını boş bırakın veya en gibi iki harfli bir kod girin. Metinler, 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ü ortamlar, ü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 herhangi bir segmenti düzeltin.
Metin, konuşmacılar ve zaman damgaları içeren JSON segmentleri olarak gelir. Düz metin elde etmek için segmentlerin metinlerini birleştirin veya transkriptleri aranabilir kılmak için zaman damgalarını koruyun. SRT ve VTT formatındaki altyazılar hedef dilde dahildir.
Hayır. API; transkripti, çevirisini, altyazıları ve dublajlı sürümü döndürür. Yapay zeka tarafından oluşturulan özetler veya toplantı notları oluşturmak için transkripti dilediğiniz bir özetleme aracına aktarın.
Evet, kayıtlar üzerinden. 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ı veya düşük gecikmeli transkripsiyon sunmaz.
API belgelerinde sabit bir dosya boyutu sınırı belirtilmemiştir. Her proje, planınızın limitleri uygulandıktan sonra orijinal süreyi ve süreyi bildirir. Çok uzun videolar veya yüksek hacimli içerikler için ekibimizle görüşün.
Projeler, Rask uygulamasındaki dakika havuzundan, bir sonraki tam dakikaya yuvarlanarak video dakikası başına ücretlendirilir. Fiyata transkripsiyon, çeviri, altyazı ve dublajlı sürüm dahildir. Uygun standart planlarda ek dakikaların maliyeti dk başına 3$'dır. Kurumsal fiyatlandırma anlaşmanıza göre belirlenir.
Transkripsiyonu kendi videolarınızda test etmek için kredi kartı gerektirmeden Rask uygulamasında ücretsiz deneme ile başlayın. API erişimi, planınızın belirlediği özelliklerle birlikte Creator Pro, Business ve Enterprise planlarında sunulmaktadır.
API erişimi Creator Pro, Business ve Enterprise planlarında sunulmakta olup, özellikler planınıza göre belirlenir. Uygulama içinde istemci kimliğinizi ve gizli anahtarınızı oluşturarak hemen çağrı yapmaya başlayabilirsiniz. Enterprise planları, hacim bazlı fiyatlandırma ve özel dil kapsamı için ekibimizle iletişime geçebilirsiniz.