API napisów dla przetłumaczonych plików SRT i VTT

Prześlij wideo raz i uzyskaj pliki napisów w formatach SRT i WebVTT dla każdego języka docelowego, zsynchronizowane z wypowiadaną treścią. Popraw dowolną linię przez API, a następnie pobierz zaktualizowane pliki dla swojego odtwarzacza, aplikacji lub programu do edycji wideo.
SRT i WebVTT
Ponad 135 języków i opcji regionalnych
REST + Python SDK
upload, create, download
OAuth 2.0
# 1. upload the video once - YouTube, Drive, S3, Vimeo or direct URL
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/onboarding.mp4", "name": "onboarding"}'

# 2. one project per subtitle language
for lang in es-mx fr-fr ja-jp; do
  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\": \"$lang\"}"
done
GET /v2/projects/{project_id}
.srt + .vtt
# When status is merging_done, download both subtitle files
P=$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN")
curl -s -o onboarding.es-mx.srt "$(echo $P | jq -r .translation_srt_path)"
curl -s -o onboarding.es-mx.vtt "$(echo $P | jq -r .translation_vtt_path)"
Używane przez zespoły na całym świecie
Możliwości

Wszystko, co zwraca API napisów

Twórz przetłumaczone pliki SRT i WebVTT z nagrań wideo lub audio, w tym podcastów i wywiadów. Wybierz język docelowy dla każdego projektu i otrzymaj pliki napisów wraz z transkrypcją, tłumaczeniem i treścią z dubbingiem.

Pliki SRT i WebVTT

Każdy ukończony projekt zwraca plik .srt oraz .vtt w języku docelowym: SRT do programów edycji wideo i większości platform, WebVTT do odtwarzania wideo w internecie.

Napisy w innym języku

Usuń bariery językowe dla widzów na każdym rynku: utwórz jeden projekt dla każdego języka docelowego, takiego jak es-mx, pt-br lub fr-ca, z tego samego pliku. Język źródłowy jest wykrywany automatycznie.

Zsynchronizowane z wypowiadaną treścią

Każdy napis odpowiada fragmentowi transkrypcji z czasem rozpoczęcia i zakończenia, dzięki czemu każda linijka pojawia się na ekranie w momencie jej wypowiadania.

Napisy w języku oryginalnym

Transkrypcja zawiera tekst źródłowy każdego fragmentu wraz z znacznikami czasu. Przekształć ją w plik SRT lub VTT, aby uzyskać napisy w tym samym języku za pomocą kilku linijek kodu.

Oznaczenia mówców w dialogach

Każdy fragment transkrypcji zawiera etykietę mówcy, dzięki czemu możesz dodać identyfikację osób do napisów w wywiadach, panelach i dialogach.

Edytuj linię przed publikacją

Popraw tekst lub czas trwania dowolnego fragmentu za pomocą API i wygeneruj go ponownie. Niejasne słowa, nazwiska i akcenty można naprawić raz, we wszystkich formatach.

Spójne terminy w każdym języku

Słownik pozwala zachować nazwy produktów i terminy techniczne w identycznej formie we wszystkich językach napisów lub celowo w języku oryginalnym.

Napisy i wersja z dubbingiem

Ten sam projekt zwraca również przetłumaczone ścieżki wideo i audio, dzięki czemu napisy i wersja z dubbingiem pochodzą z jednego przesłania.

Skaluj bez ograniczeń

Brak limitów zapytań, brak kwot współbieżności, brak ograniczeń na klucz. Dodawaj napisy do całej swojej biblioteki wideo we wszystkich językach docelowych jednocześnie.
Zobacz jak to działa

Jedno wideo, pięć wersji językowych

Ten sam klip w języku angielskim, francuskim, niemieckim, portugalskim i hiszpańskim. Każda wersja językowa posiada własne pliki z napisami w formatach SRT i VTT.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Przepływ pracy

Trzy kroki od przesłania wideo do pliku z napisami

Utworzenie projektu uruchamia transkrypcję, tłumaczenie oraz wersję z dubbingiem za jednym razem. Użyj punktu końcowego /generate po edycji linii napisów.
1

Prześlij wideo

Wyślij wideo jako plik lub podaj link z serwisu YouTube, Google Drive, S3, Vimeo lub dowolny bezpośredni adres URL. Jedno przesłanie obsługuje każdy język napisów.

POST /api/library/v1/media/link
2

Utwórz projekt

Przekaż identyfikator pliku multimedialnego jako video_id oraz jeden język docelowy na projekt. Projekty dla różnych języków uruchamiane są równolegle.

POST /v2/projects
3

Pobierz pliki z napisami

Sprawdzaj status, aż osiągnie wartość merging_done, a następnie pobierz pliki .srt i .vtt i zapisz je po swojej stronie.

GET /v2/projects/{project_id}
Czas przetwarzania zależy od długości wideo, liczby osób mówiących oraz języka docelowego. W jednym z testów wideo o długości 3:47 zostało przetworzone w 165 sekund.
Stworzone z myślą o Tobie

Potrzebujesz formatu napisów lub sposobu dostarczenia, którego nie ma na liście? Skontaktuj się z naszym zespołem

Inny format napisów, dostarczenie do własnej pamięci masowej, język spoza katalogu lub wyższa przepustowość: nasz zespół przeanalizuje potrzeby Twojego procesu produkcyjnego i dostępne opcje.

Języki i głosy

Potrzebujesz napisów w języku spoza publicznego katalogu? Porozmawiaj z naszym zespołem o swoich wymaganiach i dostępnych opcjach.

Dostarczanie i integracja

Webhooki, przesyłanie do własnej kolejki, dostarczanie bezpośrednio do S3, niestandardowe endpointy. Powiedz nam, jak Twój system oczekuje danych.

Wolumen i przepustowość

Rozmiary partii, liczba języków docelowych na akcję i priorytet przetwarzania to warunki umowy, a nie sztywne limity produktu.

Bezpieczeństwo i hosting

Kwestie związane z przechowywaniem danych, logowaniem SSO i SAML, zasadami ich zachowania oraz wsparciem przy audycie bezpieczeństwa są omawiane podczas wdrażania planu dla firm.
Przykłady zastosowań

Kto korzysta z interfejsu API do obsługi napisów?

Platformy zawierające materiały wideo

Platformy LMS i edukacji klientów, platformy dla twórców i wideo, narzędzia do webinarów i wydarzeń wirtualnych, hosting wideo i SaaS do obsługi procesów, platformy cyfrowej adopcji, zakupy na żywo. Przekształć napisy w każdym języku w funkcję przesyłanych filmów.

Agencje lokalizacji i produkcyjne

Dostarczaj pliki SRT i VTT dla każdego języka klienta za pomocą jednego przesłania. Osoby dokonujące korekty mogą poprawiać linie przez API, a pliki aktualizują się bez potrzeby ponownego ustawiania czasu.

Wewnętrzna, ciągła produkcja wideo

Międzynarodowy handel detaliczny i e-commerce, globalne franczyzy, wydawcy mediów, uniwersytety korporacyjne. Udostępnij szkolenia i materiały wideo o produktach na każdym rynku oraz widzom oglądającym bez dźwięku.
Historie klientów

Prawdziwe zespoły, wymierne wyniki

Jak firmy lokalizują wideo z Rask, wyrażone w liczbach.
strzałka
strzałka
Kod

Przykłady kodu API napisów

Jeden kompletny przykład w każdym języku: przesuń wideo, utwórz projekt dla każdego języka napisów, poczekaj, a następnie zapisz pliki .srt i .vtt lub dodaj je do odtwarzacza HTML5.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio, urllib.request
from rask_sdk import clients, enums, schemas

LANGS = ["es-mx", "fr-fr", "ja-jp"]

async def subtitle(client, video_id, lang):
    job = await client.create_project(data=schemas.ProjectCreate(video_id=video_id, dst_lang=lang))
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)
    # links are presigned for one hour - save the files right away
    urllib.request.urlretrieve(job.translation_srt_path, f"video.{lang}.srt")
    urllib.request.urlretrieve(job.translation_vtt_path, f"video.{lang}.vtt")

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/onboarding.mp4"))
    while media.status is enums.MediaStatus.PROCESSING:
        await asyncio.sleep(5)
        media = await client.get_media(media_id=media.id)
    await asyncio.gather(*(subtitle(client, media.id, l) for l in LANGS))

asyncio.run(main())
github.com/braskai/rask-sdk
async, typed models
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}"}

pid = requests.post(f"{API}/v2/projects", headers=h,
                    json={"video_id": VIDEO_ID, "dst_lang": "de-de"}).json()["id"]
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
    time.sleep(10)

# translated subtitles: download the files
open("video.de-de.vtt", "wb").write(requests.get(p["translation_vtt_path"]).content)

# original-language captions: build a WebVTT file from the transcript segments
segs = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
cues = [f"{s['start'].replace(',', '.')} --> {s['end'].replace(',', '.')}\n{s['src']['text']}" for s in segs]
open("video.en.vtt", "w").write("WEBVTT\n\n" + "\n\n".join(cues) + "\n")
requests + polling
same-language captions
// no dependencies, Node 18+ global fetch
import { writeFile } from 'node:fs/promises';
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 langs = ['es-mx', 'pt-br', 'ko-kr'];
const tracks = await Promise.all(langs.map(async (dst_lang) => {
  let p = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang });
  while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
  const file = `subs/${dst_lang}.vtt`;
  await writeFile(file, await ((await fetch(p.translation_vtt_path)).text()));
  return `<track kind="subtitles" srclang="${dst_lang}" src="/${file}">`;
}));
console.log(tracks.join('\n'));   // paste inside your <video> element
fetch, Node 18+
HTML5 track elements
# 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. create the project for one subtitle language
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\": \"it-it\"}" | jq -r .id)

# 3. wait for merging_done
until [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" = merging_done ]; do
  sleep 10
done

# 4. save both subtitle files
P=$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN")
curl -s -o video.it-it.srt "$(echo $P | jq -r .translation_srt_path)"
curl -s -o video.it-it.vtt "$(echo $P | jq -r .translation_vtt_path)"
download .srt and .vtt
shell script
<?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']];

foreach (['es-mx', 'tr-tr'] as $lang) {
    $p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
        'video_id' => $videoId, 'dst_lang' => $lang]]));
    while ($p['status'] !== 'merging_done') {
        sleep(10);
        $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
    }
    // presigned links, valid for one hour
    file_put_contents("video.$lang.srt", file_get_contents($p['translation_srt_path']));
    file_put_contents("video.$lang.vtt", file_get_contents($p['translation_vtt_path']));
}
Guzzle 7
plain HTTP
Python to oficjalny pakiet SDK. Zakładki Node, PHP i cURL przedstawiają proste przykłady żądań HTTP dla tych samych punktów końcowych.
Postęp

Jak projekt raportuje postępy w tworzeniu napisów

Każdy projekt przechodzi przez udokumentowane statusy, dzięki czemu użytkownicy przesyłający wideo w Twojej aplikacji mogą śledzić postępy dla każdego języka napisów. Musisz zareagować tylko na trzy grupy.

Sukces, zatrzymaj się tutaj

merging_done
Pliki z napisami są gotowe. Pobierz projekt ponownie, aby uzyskać świeże linki do pobrania.

W toku, sprawdzaj dalej

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
Oraz pasujące _done statusy. Doskonale pasują one do interfejsu pokazującego postęp krok po kroku.

Błąd, zatrzymanie i raport

failed
upload_failed
transcription_failed
translation_failed
voiceover_failed
merging_failed
no_audio
no_words
forbidden_link
no_audio, no_words oraz forbidden_link są wystarczająco jasne, aby pokazać je bezpośrednio Twoim użytkownikom.
Observed run, 3:47 source video, en → es-mx
GET /v2/projects/{project_id}
   0s  created
  11s  transcription_started
  87s  translation_started
  99s  voiceover_started
 154s  merging_started
 165s  merging_done

Lub całkowicie pomiń sprawdzanie

Wskaż nam punkt końcowy webhooka, a każda zmiana stanu pojawi się jako żądanie POST, dzięki czemu Twoja kolejka zareaguje na każdą zmianę w momencie jej wystąpienia. Dostarczanie przez webhook jest częścią wdrożenia dla klientów korporacyjnych.
Przeczytaj dokumentację
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
Wynik

Najpierw pliki z napisami, a zaraz obok cała reszta

Każdy ukończony projekt udostępnia oba formaty napisów, segmenty transkrypcji oraz multimedia z dubbingiem. Linki do pobrania są podpisane cyfrowo i ważne przez godzinę, dlatego skopiuj pliki do własnej pamięci masowej.
Pole
Format
Co to jest
translation_srt_path
.srt
Napisy w języku docelowym, przeznaczone dla oprogramowania do edycji oraz większości platform wideo
translation_vtt_path
.vtt
Napisy WebVTT do odtwarzania wideo w HTML5 oraz odtwarzaczach internetowych
/transcription
JSON
Tekst źródłowy, tłumaczenie, oznaczenie osoby mówiącej i znaczniki czasu dla każdego fragmentu
translated_video
MP4
Zdubbingowane wideo, jeśli publikujesz również wersję z głosem
translated_audio
WAV
Przetłumaczona mowa połączona z oryginalną muzyką i efektami dźwiękowymi
original_video
MP4
Twój plik źródłowy w takim stanie, w jakim został zapisany, do wglądu
Kontrola

Popraw linię napisów i wygeneruj ponownie tylko tę część

Napisy pochodzą z fragmentów transkrypcji. Edytuj tekst lub czas jednej linii, wygeneruj ponownie, a pliki napisów i wersja z dubbingiem zaktualizują się razem. Rozliczenie obejmuje zmienione fragmenty, z minimalnym czasem trwania wynoszącym jedną minutę na operację.

Edycja na poziomie segmentów

Edycja na poziomie segmentów
Każdy projekt udostępnia swoją transkrypcję jako dostępne do edycji fragmenty, dzięki czemu poprawienie błędnego słowa lub spóźnionych napisów wymaga tylko jednej prośby o aktualizację.
Pobierz transkrypcję i jej segmenty
Zmień tekst źródłowy, a my przetłumaczymy go ponownie
Edytuj przetłumaczony tekst bezpośrednio, aby zachować własne słownictwo
Dopasowuj znaczniki czasu, dodawaj segmenty i usuwaj je
Zmień głos przypisany do dowolnego mówcy

Słowniczki terminologii

Słowniczki terminologii
Dołącz słowniczek, aby nazwy marek i terminy techniczne brzmiały tak samo w napisach w każdym języku lub celowo pozostały w języku oryginalnym.

Jeden słowniczek obejmuje jedną parę językową i działa we wszystkich odmianach regionalnych tego języka docelowego, więc jeden hiszpański słowniczek obsłuży 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.
Dane wejściowe

Obsługiwane formaty plików

Prześlij obsługiwany plik wideo lub audio albo użyj obsługiwanego adresu URL pliku multimedialnego. Utwórz projekt dla każdego języka docelowego i pobierz jego pliki SRT oraz WebVTT.

Wideo

7 formatów
.mp4
.mov
.mkv
.avi
.webm
.m4v
.3gp

Audio

4 formaty
.mp3
.wav
.flac
.m4a

Metadane przed wydaniem środków

Punkt końcowy multimediów zwraca czas trwania, rozmiar pliku, kodek wideo, liczbę klatek na sekundę, rozdzielczość, kodek audio, częstotliwość próbkowania i układ kanałów. Zweryfikuj plik i oszacuj koszty z góry, ponieważ projekty są rozliczane za minuty wideo.
Bezpieczeństwo i zgodność z przepisami

Bezpieczeństwo i zgodność z przepisami dla Twoich treści wideo

Brask Inc posiada certyfikat SOC 2 Type II, działa zgodnie z RODO i publikuje status kontroli na żywo w swoim Centrum Zaufania do weryfikacji pod kątem bezpieczeństwa.

Certyfikaty

SOC 2 Type II
RODO
Członek CAI i C2PA

Szyfrowanie

TLS 1.2 w tranzycie
AES-256 w spoczynku
Klucze zarządzane SSE-S3
Rotacja kluczy co najmniej co 12 miesięcy

Twoje treści

Zamknięte środowisko AI
Nigdy nieużywane do trenowania ogólnych modeli
Pełny eksport, bez wiązania się z jedną platformą

Dostęp

SSO i SAML
Kontrola dostępu oparta na rolach
Poświadczenia klienta OAuth 2.0

Dla firm

Opcje lokalizacji danych
Niestandardowe umowy SLA
Dedykowany opiekun klienta

Prawa do głosu

Syntetyczne głosy z prawami do użytkowania
Klonowanie głosu oparte na zgodzie
Zasady bezpieczeństwa AI, człowiek w pętli
Porównanie

API Rask w porównaniu z samodzielnie zbudowanym potokiem przetwarzania napisów

Napisy w innym języku wymagają transkrypcji, tłumaczenia, dopasowania czasu i eksportu pliku. Oto ten sam wynik uzyskany na dwa sposoby.
Czego potrzebujesz
Rask API
Złożone z części
Transkrypcja ze znacznikami czasu
W zestawie
API zamiany mowy na tekst
Napisy w innym języku
Ponad 135 języków i opcji regionalnych
API tłumaczenia oraz ponowne dopasowanie czasu
Eksport do formatów SRT i WebVTT
Oba formaty w każdym projekcie
Twój własny moduł zapisujący pliki
Spójna terminologia
Słowniczki
Niestandardowe przetwarzanie końcowe
Poprawianie jednej linii
Jedno żądanie modyfikacji, a następnie ponowne wygenerowanie
Edytuj każdy plik ręcznie
Zdubbingowana wersja tego samego wideo
Zawarte w tym samym projekcie
Dostawca TTS oraz Twoje własne miksowanie
Limity zapytań
Brak
Niezależnie od wymagań Twojego dostawcy
Napisy wtopione w wideo
W aplikacji internetowej Rask, jeszcze niedostępne w API
Twoje własne renderowanie wideo
Czcionka, rozmiar i układ
Ustawiane w odtwarzaczu wideo
Ustawiane w odtwarzaczu wideo
Najczęściej zadawane pytania

API napisów: najczęściej zadawane pytania

Nie możesz znaleźć tego, czego szukasz? Skontaktuj się z działem sprzedaży.

Czy Rask posiada API do napisów?

Jakie formaty napisów zwraca API?

Czy mogę uzyskać napisy w języku oryginalnym?

Jakie języki są obsługiwane?

Czy API potrafi wtopić napisy w wideo?

Czy mogę zmienić czcionkę, rozmiar lub układ napisów?

Czy napisy zawierają opisy muzyki i efektów dźwiękowych?

Czy osoby mówiące są identyfikowane?

Jak mogę poprawić linię napisów?

Jak długo ważne są linki do pobrania?

Czy mogę użyć własnych napisów?

Jak rozliczane jest API napisów?

Jak mogę uzyskać dostęp do API i klucz API?

Rozpocznij dubbingowanie w jedno popołudnie

Wyślij swoje pierwsze zapytanie już dziś i skontaktuj się z nami, gdy potrzebujesz warunków dla dużych wolumenów lub języka, którego nikt inny nie ma.