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



Prześlij plik wideo lub nagranie dźwiękowe, do którego należy Twój lektor, za pomocą pliku lub obsługiwanego adresu URL mediów. Jego osie czasu zapewniają odpowiednie czasy dla Twojego tekstu.
Utwórz transkrypcję z segmentów tekstowych z znacznikami czasu i mówcami lub z pliku SRT, a następnie utwórz projekt za pomocą jego transcript_id i języka docelowego.
Wyświetl listę głosów, przypisz szablon lub klon do każdego mówcy, w razie potrzeby wygeneruj ponownie, a następnie pobierz nagranie lektorskie, pliki wideo i napisy.
# 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 oraz es-es podobnie. Projekt rejestruje wersja_słownika, dzięki czemu późniejsze poprawki nigdy nie zmieniają ukończonej pracy w tle.Tak, dla lektorów wideo. Wyślij swój scenariusz jako podzielone na czas segmenty tekstu lub plik SRT razem z wideo, a API wygeneruje brzmiącą naturalnie mowę zsynchronizowaną z obrazem, używając głosów AI lub sklonowanych głosów, z napisami i ścieżkami dźwiękowymi w tym samym projekcie.
Rask generuje mowę dla całościowych projektów i dostarcza pliki, co sprawdza się w przypadku publikowanych materiałów wideo, szkoleniowych i marketingowych. W przypadku agentów głosowych, centrów kontaktowych i innych zastosowań o niskich opóźnieniach, które potrzebują dźwięku w kilka sekund, lepiej sprawdzi się streamingowe API zamiany tekstu na mowę.
Dźwięk jest dostarczany po zakończeniu generowania projektu: ścieżka lektora w formacie WAV w wybranych planach, zmiksowany dźwięk oraz wideo. API nie przesyła strumieniowo fragmentów audio ani bajtów dźwięku w trakcie generowania.
Utwórz transkrypcję za pomocą POST /v2/transcriptions z segmentów, z których każdy zawiera mówcę, czas rozpoczęcia i zakończenia w formacie GG:MM:SS,mmm oraz tekst. Możesz również przesłać plik SRT do POST /v2/transcriptions/srt. Następnie przekaż identyfikator transcript_id podczas tworzenia projektu.
Każda lokalizacja docelowa ma domyślne głosy AI o określonej płci w bibliotece głosów. Pobierz opcje dla projektu za pomocą GET /v2/projects/{id}/voices i przypisz po jednym głosie na mówcę za pomocą identyfikatora głosu. W obsługiwanych językach klonowania głosu możesz również używać sklonowanych głosów.
Tak. Utwórz niestandardowy klon głosu raz w aplikacji Rask za zgodą osoby mówiącej, a następnie przypisz jego identyfikator głosu dowolnemu mówcy przez API w obsługiwanych językach klonowania głosu. To świetne rozwiązanie, aby zachować spójny głos marki.
Wybieraj spośród ponad 135 języków i opcji regionalnych. Napisz scenariusz w jednym języku, a Rask go przetłumaczy, lub wyślij tekst od razu w języku docelowym. Głosy AI są dostępne dla każdego regionu.
API przyjmuje zwykły tekst dla każdego segmentu. Aby pokierować wymową, dostosuj pisownię w tekście scenariusza. Słowniczki kontrolują sposób tłumaczenia terminów, a nie sposób ich wymawiania.
Sposób wypowiedzi zależy od wybranego głosu oraz Twojego tekstu, w tym znaków interpunkcyjnych. Aby uzyskać zakres emocjonalny dorównujący prawdziwemu występowi, klon głosu oryginalnego mówcy pozwala zachować więcej cech jego tożsamości głosowej.
Możesz użyć wideo lub nagrania audio. Prześlij plik źródłowy i dodaj dopasowany czasowo scenariusz, aby wygenerować lektora. Przesłanie pliku multimedialnego jest wymagane.
Nie. Korzystanie z usługi jest rozliczane za minutę wideo (zaokrąglając w górę do pełnej minuty), korzystając z puli minut dostępnej w aplikacji Rask. Dodatkowe minuty kosztują 3 USD za minutę w ramach wybranych planów standardowych. Ceny dla firm są dostosowywane indywidualnie. Ponowne dubbingowanie jest rozliczane za zmodyfikowane fragmenty, z minimalną opłatą za jedną minutę.
Rozpocznij od bezpłatnego okresu próbnego w aplikacji Rask (bez podawania karty), aby sprawdzić głosy na własnym filmie. Dostęp do API jest dostępny w planach Creator Pro, Business oraz Enterprise, a możliwości zależą od wybranego planu.
Dostęp do API jest oferowany w planach Creator Pro, Business i Enterprise, a jego możliwości zależą od wybranego planu. Wystarczy wygenerować identyfikator klienta oraz klucz tajny w aplikacji i od razu rozpocząć korzystanie z funkcji. Warunki dla firm, ceny hurtowe i obsługa niestandardowych języków są ustalane indywidualnie z naszym zespołem.