# 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}'



Laden Sie das Video oder die Audiodatei hoch, für die Sie das Voiceover benötigen – per Datei oder unterstützter Medien-URL. Die Zeitleiste bestimmt das Timing für Ihr Skript.
Erstellen Sie ein Transkript aus Textsegmenten mit Zeitstempeln und Sprechern oder aus einer SRT-Datei. Erstellen Sie dann das Projekt mit der transcript_id und einer Zielsprache.
Listen Sie die Stimmen auf, weisen Sie jedem Sprecher eine Voreinstellung oder einen Klon zu, generieren Sie sie bei Bedarf neu und laden Sie anschließend das Voiceover, das Video und die Untertitel herunter.
# 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 und es-es gleichermaßen dient. Das Projekt speichert glossary_version, sodass spätere Änderungen bereits fertiggestellte Arbeit nicht unbemerkt verändern.Ja, für Video-Voiceover. Senden Sie Ihr Skript als zeitlich abgestimmte Textsegmente oder als SRT-Datei zusammen mit einem Video. Die API generiert dann natürlich klingende Sprache, die perfekt zum Bild passt – entweder mit KI-Stimmen oder Stimmenklonen, einschließlich Untertitel und Audiospuren im selben Projekt.
Rask generiert Sprache für komplette Projekte und stellt fertige Dateien bereit, was sich ideal für veröffentlichte Videos, Schulungen und Marketinginhalte eignet. Für Sprachassistenten, Callcenter und andere Anwendungen mit geringer Latenz, die Audio innerhalb von Sekunden benötigen, ist eine Streaming-Text-to-Speech-API besser geeignet.
Die Sprachausgabe wird bereitgestellt, sobald die Generierung für das Projekt abgeschlossen ist: das Voiceover als WAV (bei entsprechenden Tarifen), das gemischte Audio und das Video. Die API streamt keine Audioteile oder Audio-Bytes während der Generierung.
Erstellen Sie ein Transkript mit POST /v2/transcriptions aus Segmenten, die jeweils einen Sprecher, eine Start- und Endzeit im Format HH:MM:SS,mmm sowie den Text enthalten. Sie können auch eine SRT-Datei an POST /v2/transcriptions/srt hochladen. Übergeben Sie dann die transcript_id, wenn Sie das Projekt erstellen.
Für jedes Zielsprachengebiet gibt es in der Sprachbibliothek KI-Stimmvorlagen mit einem festgelegten Geschlecht. Rufen Sie die Optionen für ein Projekt über GET /v2/projects/{id}/voices ab und weisen Sie jedem Sprecher eine Stimme anhand der Voice-ID zu. In unterstützten Sprachen für das Stimmenklonen können Sie auch Stimmklone verwenden.
Ja. Erstellen Sie einmalig einen benutzerdefinierten Stimmklon in der Rask-App mit der Zustimmung des Sprechers und weisen Sie dessen Voice-ID dann über die API in den unterstützten Sprachen jedem Sprecher zu. Dies eignet sich hervorragend für eine einheitliche Markenstimme.
Wählen Sie aus über 135 Sprachen und regionalen Optionen. Schreiben Sie das Skript in einer Sprache und lassen Sie es von Rask übersetzen, oder übergeben Sie das Skript bereits in der Zielsprache. KI-Stimmen sind für jedes Zielgebiet verfügbar.
Die API verarbeitet einfachen Text pro Segment. Um die Aussprache anzupassen, ändern Sie die Schreibweise im Skripttext. Glossare steuern, wie Begriffe übersetzt werden, jedoch nicht, wie sie ausgesprochen werden.
Die Sprachausgabe richtet sich nach der ausgewählten Stimme und Ihrem Text, einschließlich der Interpunktion. Für eine emotionale Bandbreite, die einer echten Darbietung nahekommt, bewahrt ein Stimmklon des Originalsprechers mehr von dessen persönlicher Stimmidentität.
Sie können ein Video oder eine Audioaufnahme verwenden. Laden Sie die Mediendatei hoch und stellen Sie ein zeitlich abgestimmtes Skript bereit, um das Voiceover passend zur Timeline zu erstellen. Eine hochgeladene Mediendatei ist erforderlich.
Nein. Die Nutzung wird pro Videominute abgerechnet, aufgerundet auf die nächste volle Minute, aus demselben Kontingent wie die Rask-App. Zusätzliche Minuten kosten bei berechtigten Standardtarifen 3 $/Minute. Enterprise-Preise sind auf Ihre Vereinbarung zugeschnitten. Das erneute Synchronisieren wird nach geänderten Segmenten berechnet, mit einer Mindestdauer von einer Minute pro kostenpflichtigem Durchlauf.
Starten Sie eine kostenlose Testversion in der Rask-App (keine Kreditkarte erforderlich), um die Stimmen in Ihrem eigenen Video zu hören. Der API-Zugriff ist in den Tarifen Creator Pro, Business und Enterprise verfügbar, wobei der Funktionsumfang von Ihrem Tarif abhängt.
Der API-Zugriff ist in den Tarifen Creator Pro, Business und Enterprise verfügbar, wobei der genaue Funktionsumfang von Ihrem Tarif abhängt. Sie erstellen Ihre Client-ID sowie Ihr Secret direkt in der App und können sofort loslegen. Enterprise-Bedingungen, Staffelpreise und spezielle Sprachanpassungen stimmen wir gerne persönlich mit Ihnen ab.