# 1. exchange client credentials for a token (valid 1 hour)
curl -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d "grant_type=client_credentials"# 2. upload by link - YouTube, Drive, S3, Vimeo or direct URL
curl -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" \
-d '{"link": "https://youtu.be/...", "name": "Q3 launch"}'# 3. create the dubbing project - this starts the dub
curl -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" \
-d '{
"video_id": "b8f7835d-e8c9-4ff4-8e34-5c336d818319",
"dst_lang": "es-mx",
"name": "Q3 launch"
}'# Poll the project until status is merging_done.while :; do
curl -s https://api.rask.ai/v2/projects/$ID \
-H "Authorization: Bearer $TOKEN" | jq .status
sleep 10done



ส่งไฟล์ในรูปแบบ multipart form data หรือโพสต์ลิงก์ แหล่งที่มาของลิงก์ที่รองรับ ได้แก่ YouTube, Google Drive, S3, Vimeo และ URL ดาวน์โหลดโดยตรง ระบบจะคืนค่ารหัสสื่อและข้อมูลทางเทคนิคครบถ้วนก่อนที่คุณจะเสียค่าใช้จ่ายใดๆ
ส่งรหัสสื่อเป็น video_id พร้อมระบุภาษาเป้าหมาย นอกจากนี้คุณยังสามารถแนบบทแปลหรืออภิธานศัพท์ของคุณเองได้ ระบบจะเริ่มพากย์เสียงทันที
ตรวจสอบสถานะ status จนกว่าจะเปลี่ยนเป็น merging_done จากนั้นดาวน์โหลดวิดีโอที่พากย์เสียงแล้ว แทร็กเสียง และไฟล์ซับไตเติลได้เลย
# pip install git+https://github.com/braskai/rask-sdk
import asyncio
from rask_sdk import RaskSDKClient
async def main():
client = RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
media = await client.upload_media_link(link="https://youtu.be/...")
project = await client.create_project(video_id=media.id, dst_lang="es-mx")
while project.status != "merging_done":
await asyncio.sleep(10)
project = await client.get_project(project.id)
print(project.translated_video, project.translation_srt_path)
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 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 media = await fetch(`${API}/api/library/v1/media/link`, {
method: 'POST', headers: h,
body: JSON.stringify({ link: 'https://youtu.be/...' }),
}).then(r => r.json());
let project = await fetch(`${API}/v2/projects`, {
method: 'POST', headers: h,
body: JSON.stringify({ video_id: media.id, dst_lang: 'es-mx' }),
}).then(r => r.json());
while (project.status !== 'merging_done') {
await new Promise(r => setTimeout(r, 10000));
project = await fetch(`${API}/v2/projects/${project.id}`, { headers: h }).then(r => r.json());
}
console.log(project.translated_video);# 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 by link
VIDEO_ID=$(curl -s -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" \
-d '{"link": "https://youtu.be/..."}' | jq -r .id)
# 3. create the dubbing project
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" \
-d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\"}" | jq -r .id)
# 4. poll, then download
while [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" != "merging_done" ]; do
sleep 10
done<?php
use GuzzleHttp\Client;
$http = new Client(['base_uri' => 'https://api.rask.ai']);
$auth = json_decode((new Client)->post(
'https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
['auth' => [$clientId, $clientSecret],
'form_params' => ['grant_type' => 'client_credentials']]
)->getBody(), true);
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];
$media = json_decode($http->post('/api/library/v1/media/link',
['headers' => $h, 'json' => ['link' => 'https://youtu.be/...']])->getBody(), true);
$project = json_decode($http->post('/v2/projects',
['headers' => $h, 'json' => ['video_id' => $media['id'], 'dst_lang' => 'es-mx']])->getBody(), true);
while ($project['status'] !== 'merging_done') {
sleep(10);
$project = json_decode($http->get("/v2/projects/{$project['id']}",
['headers' => $h])->getBody(), true);
} 0s created
12s transcription_started
70s translation_started
95s voiceover_started
150s merging_started
170s merging_done

es-mx และ es-es เช่นเดียวกัน บันทึกของโปรเจกต์ glossary_versionเพื่อให้การแก้ไขภายหลังไม่ไปกระทบงานที่เสร็จสมบูรณ์แล้วโดยไม่รู้ตัวสิทธิ์การใช้งาน API รวมอยู่ในแพ็กเกจแบบชำระเงินแล้ว คุณสามารถสร้างรหัสลูกค้าและรหัสลับในแอปเพื่อเริ่มเรียกใช้งานได้ทันที สำหรับเงื่อนไขระดับองค์กร, ราคาตามปริมาณการใช้งาน และภาษาเฉพาะทาง โปรดติดต่อทีมงานของเรา
ข้อมูลประจำตัวไคลเอนต์ OAuth 2.0: แลกเปลี่ยนรหัสไคลเอนต์ (client id) และรหัสลับของคุณ เพื่อรับโทเค็นการเข้าถึงที่มีอายุการใช้งานสั้น โทเค็นมีอายุการใช้งานหนึ่งชั่วโมง ดังนั้นควรแคชและนำกลับมาใช้ใหม่
แบบอะซิงโครนัส การสร้างโปรเจกต์จะเสร็จสิ้นทันทีและเริ่มกระบวนการพากย์เสียงโดยอัตโนมัติ ให้ทำการเรียกข้อมูล (Poll) ไปที่ GET /v2/projects/{id} จนกว่าสถานะจะเปลี่ยนเป็น merging_done การส่งเว็บฮุกเป็นส่วนหนึ่งของการตั้งค่าสำหรับองค์กร
ทุกคำขอจะได้รับการยอมรับตามที่ส่งมา ปริมาณงานที่ประมวลผลได้จะขึ้นอยู่กับคิวการประมวลผล และลำดับความสำคัญในการประมวลผลถือเป็นส่วนหนึ่งของข้อตกลงระดับองค์กร
รองรับมากกว่า 135 ภาษาเป้าหมาย รวมถึงภาษาสเปน ฝรั่งเศส เยอรมัน โปรตุเกส ฮินดี ญี่ปุ่น และเกาหลี พร้อมสำเนียงตามภูมิภาคที่สำคัญ เพื่อให้พารามิเตอร์ dst_lang ใช้ค่าเช่น es-mx แทนที่จะเป็น es ภาษาต้นทางจะถูกตรวจจับโดยอัตโนมัติ หรือคุณสามารถตั้งค่าเองได้ รายชื่อรหัสภาษาต้นทางและเป้าหมายทั้งหมดอยู่ในคู่มือ API สำหรับภาษาที่ไม่อยู่ในรายการ โปรดติดต่อทีมงานของเราเพื่อพูดคุยถึงความเป็นไปได้และตัวเลือกที่มี
ฟีเจอร์โคลนเสียงทันที (Instant Voice Clone) จะใช้เสียงของผู้พูดจากวิดีโอต้นทางของคุณสำหรับภาษาเป้าหมายที่รองรับ สำหรับการโคลนเสียงแบบกำหนดเองที่นำกลับมาใช้ใหม่ได้ (Custom Voice Clone) สามารถสร้างได้ในแอป Rask โดยได้รับความยินยอมจากผู้พูด จากนั้นจึงกำหนดค่าผ่าน API ผลลัพธ์จะขึ้นอยู่กับเสียงต้นทาง ภาษาที่เลือก และเสียงที่ใช้งาน
ขึ้นอยู่กับความยาวของวิดีโอ จำนวนผู้พูด ภาษาเป้าหมาย และคิวการประมวลผล แต่ละโปรเจกต์จะรายงานสถานะในทุกขั้นตอน ตั้งแต่การถอดเสียงไปจนถึงการรวมไฟล์ เพื่อให้คุณสามารถแสดงความคืบหน้าจริงให้ผู้ใช้งานของคุณเห็นได้
รองรับรูปแบบวิดีโอ 7 รูปแบบ (MP4, MOV, MKV, AVI, WebM, M4V, 3GP) และรูปแบบเสียง 4 รูปแบบ (MP3, WAV, FLAC, M4A) คุณยังสามารถนำเข้าจาก YouTube, Google Drive, S3, Vimeo หรือลิงก์ตรงได้แทนการอัปโหลด
ระบบจะตรวจจับและแยกผู้พูดออกจากเสียงต้นทางโดยอัตโนมัติ พร้อมกำหนดเสียงในภาษาเป้าหมายให้ผู้พูดแต่ละคน คุณสามารถเปลี่ยนการกำหนดเสียงสำหรับผู้พูดแต่ละคน หรือระบุจำนวนผู้พูด (num_speakers) ตอนสร้างโปรเจกต์ได้หากคุณทราบจำนวนอยู่แล้ว
ได้ คุณสามารถอัปโหลดไฟล์ .srt เพื่อสร้างบทถอดเสียงและส่งรหัสของไฟล์นั้นเมื่อสร้างโปรเจกต์ หรือจะปล่อยให้ API ทำการถอดเสียงให้ จากนั้นค่อยแก้ไขบทพูดทีละส่วนก็ได้เช่นกัน
ทุกโปรเจกต์ที่เสร็จสมบูรณ์จะมีไฟล์ซับไตเติลทั้งในรูปแบบ .srt และ .vtt มาให้พร้อมกับไฟล์วิดีโอและเสียง ซึ่งซิงค์เวลามาให้อย่างลงตัวกับการพากย์
มีชุดพัฒนาซอฟต์แวร์ (SDK) ภาษา Python แบบอะซิงโครนัสอย่างเป็นทางการ เผยแพร่บน GitHub พร้อมอินเทอร์เฟซที่มีเสถียรภาพและรองรับการใช้งานร่วมกับเวอร์ชันเก่าได้ สำหรับภาษาอื่นๆ คุณสามารถสร้างไคลเอนต์จากสเปก OpenAPI ที่เผยแพร่ไว้ได้ นอกจากนี้ยังมีโหนด n8n สำหรับระบบอัตโนมัติแบบไม่ต้องเขียนโค้ดอีกด้วย
คิดค่าบริการเฉพาะส่วนที่มีการเปลี่ยนแปลงเท่านั้น ระยะเวลาของส่วนที่แก้ไขและเพิ่มเข้ามาจะถูกนำมารวมกันและปัดเศษขึ้นเป็นนาทีที่ใกล้ที่สุด ดังนั้นการแก้ไขเพียงไม่กี่บรรทัดจึงใช้เวลาคิดค่าบริการประมาณหนึ่งนาที