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



อัปโหลดไฟล์วิดีโอในรูปแบบฟอร์มแบบหลายส่วน (multipart) หรือโพสต์ลิงก์ YouTube, Google Drive, Vimeo, S3 หรือลิงก์ตรง คุณจะได้รับรหัสสื่อ (media id) และข้อมูลวิดีโอก่อนที่คุณจะเสียค่าใช้จ่ายใดๆ
ป้อนรหัสสื่อเป็น 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ดังนั้นการแก้ไขในภายหลังจึงไม่ส่งผลกระทบต่อAงานที่เสร็จสมบูรณ์แล้วมีครับ/ค่ะ ส่งไฟล์วิดีโอหรือลิงก์ สร้างโปรเจกต์ และอ่านข้อความที่ถอดเสียงพร้อมระบุชื่อผู้พูดและเวลาได้จาก GET /v2/projects/{id}/transcription การถอดเสียงคือขั้นตอนแรกของทุกโปรเจกต์ใน Rask ซึ่งจะตามด้วยการแปล การสร้างคำบรรยาย และการพากย์เสียง
ใช่ครับ คุณสามารถโพสต์ลิงก์ YouTube, Google Drive, Vimeo, S3 หรือลิงก์ดาวน์โหลดโดยตรงไปยังจุดปลายทางของสื่อ (media endpoint) และ API จะดึงวิดีโอมาเอง คุณยังสามารถอัปโหลดไฟล์วิดีโอโดยตรงได้อีกด้วย
ได้ครับ/ค่ะ สร้างหนึ่งโปรเจกต์ต่อหนึ่งวิดีโอแล้วรันพร้อมกันได้เลย API ไม่มีข้อจำกัดเรื่องอัตราการเรียกใช้ ไม่มีโควตาการทำงานพร้อมกัน และไม่มีการจำกัดความเร็วต่อคีย์ ดังนั้นคุณจึงสามารถถอดเสียงคลังวิดีโอทั้งหมดได้ด้วยลูปเดียวในโค้ดของคุณ
ระบบจะตรวจจับผู้พูดแต่ละคนโดยอัตโนมัติ และแต่ละช่วงจะมีป้ายกำกับผู้พูด เช่น SPEAKER_00 หากคุณทราบจำนวนผู้พูด สามารถระบุค่า num_speakers ตอนสร้างโปรเจกต์ได้
API สามารถถอดเสียงจากภาษาต้นทางได้ 75 ภาษา รวมถึงภาษาอังกฤษ พร้อมระบบตรวจจับภาษาอัตโนมัติ โดยปล่อยช่อง src_lang ว่างไว้ หรือระบุรหัสสองตัวอักษร เช่น en สามารถแปลบทถอดเสียงเป็นภาษาและภูมิภาคต่างๆ ได้มากกว่า 135 แบบ เช่น en-us หรือ es-mx
ความแม่นยำขึ้นอยู่กับตัววิดีโอ: เสียงพื้นหลัง, สภาพแวดล้อมที่มีเสียงรบกวน, เสียงพูดทับซ้อนกัน, สำเนียง และคำศัพท์เฉพาะทางล้วนมีผลทั้งสิ้น ลองทดสอบ API กับวิดีโอของคุณเอง และแก้ไขส่วนต่างๆ ผ่าน API ก่อนเผยแพร่
บทถอดเสียงจะมาในรูปแบบส่วนข้อมูล JSON พร้อมระบุผู้พูดและเวลา คุณสามารถรวมข้อความของแต่ละส่วนเข้าด้วยกันเพื่อให้ได้ข้อความธรรมดา หรือเก็บบันทึกเวลาไว้เพื่อให้ค้นหาบทถอดเสียงได้ มีคำบรรยายในรูปแบบ SRT และ VTT ในภาษาปลายทางรวมอยู่ด้วย
ไม่ครับ/ค่ะ API จะส่งคืนบทถอดเสียง การแปล คำบรรยาย และเวอร์ชันพากย์เสียง หากต้องการสร้างบทสรุปหรือบันทึกการประชุมที่สร้างโดย AI ให้ส่งบทถอดเสียงไปยังเครื่องมือสรุปข้อมูลที่คุณเลือก
ได้ครับ/ค่ะ จากการบันทึกเสียง โดยอัปโหลดการประชุมที่บันทึกไว้เป็นไฟล์วิดีโอหรือเสียง API ไม่ได้เชื่อมต่อกับแพลตฟอร์มการประชุม และไม่มีบริการสร้างคำบรรยายแบบเรียลไทม์หรือถอดเสียงการโทรสดแบบมีความหน่วงต่ำ
เอกสาร API ไม่ได้ระบุขีดจำกัดขนาดไฟล์ที่แน่นอน แต่ละโปรเจกต์จะแสดง original_duration และ duration หลังจากนำขีดจำกัดของแพ็กเกจคุณมาใช้แล้ว สำหรับวิดีโอที่ยาวมากๆ หรือมีปริมาณมาก โปรดติดต่อทีมงานของเรา
โปรเจกต์จะถูกคิดค่าบริการเป็นนาทีของวิดีโอ โดยปัดเศษขึ้นเป็นนาทีเต็มถัดไป จากพูลนาทีเดียวกันกับแอป Rask ราคานี้รวมการถอดเสียง การแปล คำบรรยาย และเวอร์ชันพากย์เสียงแล้ว นาทีเพิ่มเติมมีราคา $3/นาที สำหรับแพ็กเกจมาตรฐานที่มีสิทธิ์ สำหรับราคาองค์กรจะปรับเปลี่ยนตามข้อตกลงของคุณ
เริ่มต้นใช้งานด้วยการทดลองใช้ฟรีในแอป Rask ไม่ต้องใช้บัตรเครดิต เพื่อทดสอบการถอดเสียงกับวิดีโอของคุณเอง สามารถเข้าถึง API ได้ในแพ็กเกจ Creator Pro, Business และ Enterprise โดยความสามารถจะขึ้นอยู่กับแพ็กเกจของคุณ
สามารถเข้าถึง API ได้ในแพ็กเกจ Creator Pro, Business และ Enterprise โดยความสามารถจะขึ้นอยู่กับแพ็กเกจของคุณ คุณสามารถสร้างรหัสลูกค้า (client id) และรหัสลับ (secret) ในแอปแล้วเริ่มใช้งานได้ทันที สำหรับแพ็กเกจระดับองค์กร, ราคาตามปริมาณการใช้งาน และการรองรับภาษาเพิ่มเติม โปรดติดต่อทีมงานของเรา