# 1. upload an audio or video file by link
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/interview.mp3", "name": "interview"}'
# 2. create the project - speech recognition starts automatically
# src_lang is optional: leave it out and the language is detected
curl -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"es-mx\"}"# Read the transcript: one object per segment
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq '.segments[] | {speaker, start, end, text: .src.text}'



ส่งไฟล์เสียงหรือวิดีโอในรูปแบบฟอร์มมัลติพาร์ท หรือโพสต์ลิงก์จาก YouTube, Google Drive, S3, Vimeo หรือ URL ตรงใดก็ได้ คุณจะได้รับรหัสมีเดียและข้อมูลเมตาของไฟล์ก่อนที่คุณจะเสียค่าใช้จ่ายใดๆ
ระบุรหัสมีเดียเป็น video_id และภาษาปลายทาง เพิ่มภาษาต้นทางหรือจำนวนผู้พูดหากคุณทราบ กระบวนการรู้จำจะเริ่มต้นขึ้นทันที
อ่านข้อความถอดเสียงทันทีที่ส่วนต่างๆ พร้อมใช้งาน ในขณะที่กระบวนการแปลสื่อกำลังดำเนินการอยู่ ดาวน์โหลดไฟล์ซับไตเติลและไฟล์สื่อเมื่อโปรเจกต์เสร็จสมบูรณ์
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
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/interview.mp3"))
while media.status is enums.MediaStatus.PROCESSING:
await asyncio.sleep(5)
media = await client.get_media(media_id=media.id)
# src_lang omitted: the source language is detected automatically
job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="es-mx"))
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
transcript = await client.get_project_transcription(project_id=job.id)
for seg in transcript.segments:
print(seg.start, seg.end, seg.speaker, seg.src.text)
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}"}
with open("interview.mp3", "rb") as f:
media = requests.post(f"{API}/api/library/v1/media", headers=h,
params={"kind": "audio"}, files={"data": f}).json()
while media["status"] == "processing":
time.sleep(5)
media = requests.get(f"{API}/api/library/v1/media/{media['id']}", headers=h).json()
pid = requests.post(f"{API}/v2/projects", headers=h, json={
"video_id": media["id"], "dst_lang": "es-mx", "num_speakers": 2}).json()["id"]
while requests.get(f"{API}/v2/projects/{pid}", headers=h).json()["status"] != "merging_done":
time.sleep(10)
# write the source transcript as an .srt file
segments = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
with open("interview_en.srt", "w") as out:
for i, s in enumerate(segments, 1):
out.write(f"{i}\n{s['start']} --> {s['end']}\n{s['speaker']}: {s['src']['text']}\n\n")// 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://example.com/webinar.mp4' });
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, src_lang: 'en', dst_lang: 'de-de' });
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`);
segments.forEach((s) => console.log(`[${s.start}] ${s.speaker}: ${s.src.text}`));
console.log(p.translation_vtt_path); // German subtitles for your player# 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 audio file
MEDIA_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=audio" \
-H "Authorization: Bearer $TOKEN" -F "data=@podcast_episode.mp3" | 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\": \"$MEDIA_ID\", \"dst_lang\": \"fr-fr\"}" | jq -r .id)
# 4. when status is merging_done, read the transcript with speaker labels
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
| jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'<?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://example.com/interview.mp3']]));
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' => 'es-mx']]));
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]));
foreach ($t['segments'] as $s) {
echo $s['start'], ' ', $s['speaker'], ': ', $s['src']['text'], PHP_EOL;
}{"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,320", "end": "00:00:07,316", "status": "done",
"src": {"text": "Thanks for joining us. Let's start with the new release.", "lang": "en"},
"dst": {"text": "Gracias por acompañarnos. Empecemos con la nueva versión.", "lang": "es-mx"}},
{"speaker": "SPEAKER_01", "start": "00:00:07,640", "end": "00:00:11,900", "status": "done",
"src": {"text": "Sure. The biggest change is the reporting view.", "lang": "en"},
"dst": {"text": "Claro. El cambio más grande es la vista de reportes.", "lang": "es-mx"}}
]}

es-mx และ es-es เช่นเดียวกัน บันทึกของโปรเจกต์ glossary_versionเพื่อให้การแก้ไขภายหลังไม่ไปกระทบงานที่เสร็จสมบูรณ์แล้วโดยไม่รู้ตัวมีครับ/ค่ะ การรู้จำเสียงพูดคือขั้นตอนแรกของทุกโปรเจกต์ใน Rask อัปโหลดเสียงหรือวิดีโอ สร้างโปรเจกต์ และอ่านข้อความถอดเสียงในรูปแบบส่วนต่างๆ พร้อมป้ายกำกับผู้พูดและประทับเวลาจาก GET /v2/projects/{id}/transcription โปรเจกต์เดียวกันนี้จะแปลข้อความถอดเสียงและส่งคืนคำบรรยายรวมถึงเสียงพากย์ด้วย
API รองรับภาษาต้นทาง 75 ภาษา คุณสามารถเว้นว่าง src_lang ไว้เพื่อตรวจจับภาษาโดยอัตโนมัติ หรือระบุรหัสสองตัวอักษร เช่น en หรือ de ข้อความถอดเสียงสามารถแปลเป็นภาษาและภูมิภาคต่างๆ ได้มากกว่า 135 แบบ
ได้ครับ/ค่ะ อัปโหลดไฟล์เสียงในรูปแบบ MP3, WAV, FLAC หรือ M4A เช่น พอดแคสต์ การสัมภาษณ์ และการบันทึกการโทร แล้วโปรเจกต์จะทำการถอดเสียงในลักษณะเดียวกับวิดีโอ
รองรับครับ/ค่ะ ระบบจะตรวจจับผู้พูดที่แตกต่างกันโดยอัตโนมัติ และแต่ละส่วนจะมีป้ายกำกับผู้พูดในรูปแบบ SPEAKER_XX คุณสามารถระบุ num_speakers หากทราบจำนวน และแก้ไขผู้พูดในส่วนใดก็ได้ผ่าน API
ไม่ได้ครับ/ค่ะ การประทับเวลาจะเป็นระดับส่วน (segment-level): แต่ละส่วนจะมีเวลาเริ่มต้นและสิ้นสุดในรูปแบบ HH:MM:SS,mmm ซึ่งเป็นเวลาที่ใช้สำหรับคำบรรยายและซับไตเติล หากคุณต้องการประทับเวลาสำหรับทุกๆ คำ โปรดเลือกใช้ API แปลงเสียงพูดเป็นข้อความโดยเฉพาะ
ไม่รองรับครับ/ค่ะ Rask จะถอดเสียงไฟล์เสียงและวิดีโอที่บันทึกไว้ล่วงหน้าจนสมบูรณ์ สำหรับคำบรรยายแบบเรียลไทม์, บอทเสียง, AI สนทนา และศูนย์บริการลูกค้า ซึ่งจำเป็นต้องแสดงข้อความในขณะที่ผู้พูดกำลังพูดอยู่ API แปลงเสียงพูดเป็นข้อความแบบสตรีมมิ่งจะเหมาะสมกว่า
ความแม่นยำขึ้นอยู่กับคุณภาพเสียง: ไมโครโฟน สำเนียง การพูดทับซ้อนกัน และเสียงรบกวนรอบข้างล้วนมีผลทั้งสิ้น ลองทดสอบ API กับตัวอย่างการบันทึกเสียงของคุณเอง และแก้ไขส่วนต่างๆ ผ่าน API ก่อนที่คุณจะเผยแพร่หรือแปล
ระบบการรู้จำเสียงไม่ได้ใช้รายการคำศัพท์เฉพาะที่คุณกำหนดเอง แต่คุณสามารถแก้ไขคำเฉพาะในข้อความถอดเสียงได้ผ่านทางเอนด์พอยต์ส่วนต่างๆ เมื่อข้อความถอดเสียงถูกแปลแล้ว อภิธานศัพท์จะช่วยให้ชื่อผลิตภัณฑ์ คำนามเฉพาะ และคำศัพท์เฉพาะทางมีความสอดคล้องกัน
โปรงานที่เสร็จแล้วจะมีไฟล์คำบรรยายในรูปแบบ SRT และ VTT ในภาษาปลายทาง ส่วนบทพูดของภาษาต้นทางจะมาในรูปแบบชิ้นส่วน JSON พร้อมเวลากเริ่มต้นและสิ้นสุด ซึ่งสามารถแปลงเป็น SRT ได้ด้วยโค้ดเพียงไม่กี่บรรทัด
ได้ ในแพ็กเกจที่มีฟังก์ชันนำเข้าบทพูด คุณสามารถอัปโหลดบทพูดต้นทางที่มีอยู่แล้ว คำแปลภาษาปลายทางที่ตรวจสอบแล้ว หรือทั้งสองอย่างในรูปแบบไฟล์ SRT หรือข้อความที่มีการกำหนดเวลาเมื่อสร้างโปรเจกต์ Rask สามารถแปลสคริปต์ต้นทางของคุณหรือใช้คำแปลที่คุณอนุมัติเพื่อทำการพากย์ได้
โปรเจกต์จะคิดค่าบริการเป็นนาทีของเสียงหรือวิดีโอ โดยปัดเศษขึ้นเป็นนาทีเต็มถัดไปจากโควตานาทีเดียวกันกับในแอป Rask ราคาดังกล่าวรวมการถอดเสียง การแปล เสียงพากย์ และคำบรรยายแล้ว นาทีเพิ่มเติมมีราคา $3 ต่อนาที สำหรับแพ็กเกจมาตรฐานที่รองรับ สำหรับลูกค้าระดับองค์กร ราคาจะถูกปรับตามข้อตกลงของคุณ หากคุณต้องการเพียงแค่บทพูด API แปลงเสียงพูดเป็นข้อความโดยเฉพาะจะมีราคาถูกกว่า
เริ่มต้นใช้งานด้วยการทดลองใช้ฟรีในแอป Rask ไม่ต้องใช้บัตรเครดิต เพื่อทดสอบการถอดเสียงและการแปลกับไฟล์ของคุณเอง การเข้าถึง API มีให้บริการในแพ็กเกจ Creator Pro, Business และ Enterprise โดยความสามารถจะขึ้นอยู่กับแพ็กเกจของคุณ
การเข้าถึง API มีให้บริการในแพ็กเกจ Creator Pro, Business และ Enterprise โดยความสามารถจะขึ้นอยู่กับแพ็กเกจของคุณ คุณสามารถสร้างรหัสลูกค้าและรหัสลับได้ในแอปและเริ่มใช้งานได้ทันที สำหรับเงื่อนไขระดับองค์กร ราคาส่ง และการรองรับภาษาเฉพาะ โปรดติดต่อทีมงานของเรา