# 1. send your script as timed segments - one speaker per line
curl -X POST https://api.rask.ai/v2/transcriptions \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
"src": {"text": "Welcome to the new dashboard.", "lang": "en"},
"dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}}
]}'
# 2. voice the script over your video
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\", \"transcript_id\": \"$TRANSCRIPT_ID\"}"# When status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, voiceover, translated_audio, translated_video}'



Seslendirmenizin ait olduğu video veya ses kaydını bir dosya ya da desteklenen bir medya URL'si kullanarak yükleyin. Zaman çizelgesi, metniniz için gerekli zamanlamayı sağlar.
Zaman damgalarına ve konuşmacılara sahip metin segmentlerinden ya da bir SRT dosyasından bir döküm oluşturun, ardından projeyi transcript_id ve hedef dille birlikte oluşturun.
Sesleri listeleyin, her konuşmacıya hazır bir ses veya kopya bir ses atayın, gerekirse yeniden oluşturun ve ardından seslendirmeyi, videoyu ve altyazı dosyalarını indirin.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
async def wait(client, job):
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
return job
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
script = await client.create_transcription(data=schemas.TranscriptionCreate(segments=[
schemas.SegmentCreate(speaker="SPEAKER_00", start="00:00:00,500", end="00:00:04,800",
src=schemas.SegmentTextCreatePatch(text="Welcome to the new dashboard.", lang="en"),
dst=schemas.SegmentTextCreatePatch(text="Bienvenido al nuevo panel.", lang="es-mx")),
]))
job = await wait(client, await client.create_project(data=schemas.ProjectCreate(
video_id=VIDEO_ID, dst_lang="es-mx", transcript_id=script.id)))
# pick a female AI voice preset from the library for SPEAKER_00
voices = await client.get_project_voices(project_id=job.id)
preset = next(v for v in voices if v.gender == "female")
await client.patch_project(project_id=job.id, data=schemas.ProjectPatch(voice={**job.voice, "SPEAKER_00": preset.id}))
job = await wait(client, await client.generate_project(project_id=job.id))
print(job.voiceover, job.translated_video)
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}"}
def wait(pid):
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
time.sleep(10)
return p
script = requests.post(f"{API}/v2/transcriptions", headers=h, json={"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
"src": {"text": "Welcome to the new dashboard.", "lang": "en"},
"dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}},
]}).json()
pid = requests.post(f"{API}/v2/projects", headers=h, json={
"video_id": VIDEO_ID, "dst_lang": "es-mx", "transcript_id": script["id"]}).json()["id"]
project = wait(pid)
voices = requests.get(f"{API}/v2/projects/{pid}/voices", headers=h).json()
preset = next(v for v in voices if v["gender"] == "female")
requests.patch(f"{API}/v2/projects/{pid}", headers=h,
json={"voice": {**project["voice"], "SPEAKER_00": preset["id"]}})
requests.post(f"{API}/v2/projects/{pid}/generate", headers=h)
print(wait(pid)["voiceover"])// 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());
const wait = async (id) => { let p; while ((p = await call('GET', `/v2/projects/${id}`)).status !== 'merging_done') await sleep(10000); return p; };
const script = await call('POST', '/v2/transcriptions', { segments: [
{ speaker: 'SPEAKER_00', start: '00:00:00,500', end: '00:00:04,800',
src: { text: 'Welcome to the new dashboard.', lang: 'en' },
dst: { text: 'Bienvenido al nuevo panel.', lang: 'es-mx' } },
] });
const { id } = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang: 'es-mx', transcript_id: script.id });
const project = await wait(id);
const voices = await call('GET', `/v2/projects/${id}/voices`);
const preset = voices.find((v) => v.gender === 'female');
await call('PATCH', `/v2/projects/${id}`, { voice: { ...project.voice, SPEAKER_00: preset.id } });
await call('POST', `/v2/projects/${id}/generate`);
console.log((await wait(id)).voiceover);# 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. your script as an SRT file in the target language
TRANSCRIPT_ID=$(curl -s -X POST "https://api.rask.ai/v2/transcriptions/srt?dst_lang=es-mx" \
-H "Authorization: Bearer $TOKEN" -F "dst=@script_es-mx.srt" | jq -r .id)
# 3. voice it over the video
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\": \"es-mx\", \"transcript_id\": \"$TRANSCRIPT_ID\"}" | jq -r .id)
# 4. when status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, voiceover, translated_video}'<?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']];
$script = $json($http->post('/v2/transcriptions', ['headers' => $h, 'json' => ['segments' => [[
'speaker' => 'SPEAKER_00', 'start' => '00:00:00,500', 'end' => '00:00:04,800',
'src' => ['text' => 'Welcome to the new dashboard.', 'lang' => 'en'],
'dst' => ['text' => 'Bienvenido al nuevo panel.', 'lang' => 'es-mx'],
]]]]));
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $videoId, 'dst_lang' => 'es-mx', 'transcript_id' => $script['id']]]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['voiceover'];{"label": "Renata", "gender": "female", "sample_src": "https://..."} AI voice preset
{"label": "Gerardo", "gender": "male", "sample_src": "https://..."} AI voice preset
{"label": "Maria Lopez", "gender": "auto", "sample_src": "https://..."} custom voice clone
{"label": "Voice Clone", "gender": "auto", "sample_src": null} instant voice clone

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, video seslendirmeleri için. Metninizi zamanlanmış metin parçaları veya bir SRT dosyası olarak bir videoyla birlikte gönderin; API, aynı projede altyazılar ve ses dosyalarıyla birlikte, görsele göre zamanlanmış doğal sesli konuşmalar veya ses klonları üretir.
Rask, eksiksiz projeler için ses üretir ve dosyaları teslim eder; bu da yayınlanan videolar, eğitim ve pazarlama içerikleri için uygundur. Ses ajanları, çağrı merkezleri ve saniyeler içinde ses gerektiren diğer düşük gecikmeli uygulamalar için akış özellikli bir metinden sese API'si daha uygundur.
Ses, proje için üretim tamamlandığında teslim edilir: uygun planlarda WAV formatında seslendirme, mikslenmiş ses ve video. API, üretim sırasında ses parçaları veya ses baytlarının akışını yapmaz.
Her birinde bir konuşmacı, SS:DD:SS,mmm formatında bir başlangıç ve bitiş zamanı ile metin bulunan parçalardan POST /v2/transcriptions kullanarak bir döküm oluşturun. Ayrıca POST /v2/transcriptions/srt adresine bir SRT dosyası yükleyebilirsiniz. Ardından projeyi oluştururken transcript_id değerini iletin.
Her hedef yerel ayarın, ses kütüphanesinde belirli bir cinsiyete sahip yapay zeka ses ön ayarları vardır. GET /v2/projects/{id}/voices ile bir proje için seçenekleri alın ve ses kimliğine göre konuşmacı başına bir ses atayın. Desteklenen ses klonlama dillerinde ses klonlarını da kullanabilirsiniz.
Evet. Konuşmacının onayıyla Rask uygulamasında bir kez Özel Ses Klonu oluşturun, ardından desteklenen ses klonlama dillerinde API aracılığıyla ses kimliğini herhangi bir konuşmacıya atayın. Tutarlı bir marka sesi olarak iyi çalışır.
135'ten fazla dil ve bölge seçeneğinden birini seçin. Metni tek bir dilde yazın ve Rask bunu çevirsin ya da metni doğrudan hedef dilde gönderin. Yapay zeka sesleri her hedef yerel ayar için mevcuttur.
API, parça başına düz metin alır. Telaffuzu yönlendirmek için metin içindeki yazılışı düzenleyin. Sözlükler terimlerin nasıl çevrileceğini kontrol eder, nasıl telaffuz edileceğini değil.
Anlatım, seçilen sesinize ve noktalama işaretleri dahil metninize uyum sağlar. Gerçek bir performansla eşleşen bir duygu aralığı için orijinal konuşmacının ses klonu, ses kimliğinin daha fazlasını korur.
Bir video veya ses kaydı kullanabilirsiniz. Zaman çizelgesine uygun bir seslendirme oluşturmak için kaynak medyayı yükleyin ve zaman ayarlı bir metin sağlayın. Yüklenen bir medya dosyası gereklidir.
Hayır. Kullanım, Rask uygulamasındaki dakikalar havuzundan olmak üzere, bir sonraki tam dakikaya yuvarlanarak video dakikası başına ücretlendirilir. Uygun standart planlarda ek dakikalar dakikası 3$'dan ücretlendirilir. Kurumsal fiyatlandırma sözleşmenize göre belirlenir. Yeniden dublaj, ücretlendirilen çalışma başına en az bir dakika olmak üzere değişen segmentler üzerinden faturalandırılır.
Kendi videonuzdaki sesleri duymak için kart gerektirmeyen, Rask uygulamasındaki ücretsiz deneme sürümüyle başlayın. API erişimi, özellikler planınıza göre belirlenecek şekilde Creator Pro, Business ve Enterprise planlarında mevcuttur.
API erişimi, Creator Pro, Business ve Enterprise planlarında sunulmakta olup özellikler planınıza göre belirlenir. Uygulamada istemci kimliğinizi ve gizli anahtarınızı oluşturarak hemen kullanmaya başlayabilirsiniz. Kurumsal şartlar, hacim bazlı fiyatlandırma ve özel dil kapsamı ekibimiz aracılığıyla yürütülür.