API per i sottotitoli per file SRT e VTT tradotti

Carica un video una sola volta e ottieni i file di sottotitoli in SRT e WebVTT per ogni lingua di arrivo, sincronizzati con l'audio. Correggi qualsiasi riga tramite API e scarica i file aggiornati per il tuo player, app o software di montaggio video.
SRT e WebVTT
Oltre 135 lingue e varianti regionali
REST + SDK Python
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)"
Utilizzato da team in tutto il mondo
Funzionalità

Tutto ciò che restituisce l'API di sottotitoli

Crea file SRT e WebVTT tradotti da registrazioni video o audio, inclusi podcast e interviste. Scegli una lingua di arrivo per ciascun progetto e ricevi i file dei sottotitoli insieme alla trascrizione, alla traduzione e al contenuto doppiato.

File SRT e WebVTT

Ogni progetto completato restituisce un file .srt e un file .vtt nella lingua di arrivo: SRT per i software di montaggio video e la maggior parte delle piattaforme, WebVTT per la riproduzione video sul web.

Sottotitoli in un'altra lingua

Rimuovi le barriere linguistiche per gli spettatori di ogni mercato: crea un progetto per ciascuna lingua di arrivo, come es-mx, pt-br o fr-ca, dallo stesso caricamento. La lingua di origine viene rilevata automaticamente.

Sincronizzati con il contenuto parlato

Ogni sottotitolo segue un segmento della trascrizione con un orario di inizio e di fine, in modo che ogni riga compaia sullo schermo mentre viene pronunciata.

Sottotitoli nella lingua originale

La trascrizione contiene il testo originale di ogni segmento con i timestamp. Convertila in un file SRT o VTT per avere sottotitoli nella stessa lingua con poche righe di codice.

Etichette dei parlanti per i dialoghi

Ogni segmento della trascrizione include un'etichetta del parlante, consentendoti di aggiungere l'identificazione dei parlanti ai sottotitoli per interviste, tavole rotonde e dialoghi.

Modifica una riga prima di pubblicare

Correggi il testo o la tempistica di qualsiasi segmento tramite l'API e rigenera. Parole poco chiare, nomi e accenti vengono corretti una sola volta, in ogni formato.

Termini coerenti in ogni lingua

Un glossario mantiene i nomi dei prodotti e i termini tecnici identici in tutte le lingue dei sottotitoli, o intenzionalmente nella lingua originale.

Sottotitoli e versione doppiata

Lo stesso progetto restituisce anche le tracce video e audio tradotte, così sottotitoli e versione doppiata provengono da un unico caricamento.

Cresci senza limiti

Nessun limite di frequenza, nessuna quota di concorrenza, nessun blocco per chiave. Aggiungi i sottotitoli all'intera libreria video in ogni lingua di arrivo in parallelo.
Guardalo in azione

Un video, cinque versioni in lingua

La stessa clip in inglese, francese, tedesco, portoghese e spagnolo. Ogni versione linguistica include i propri file di sottotitoli in formato SRT e VTT.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Flusso di lavoro

Tre passaggi dal caricamento del video al file dei sottotitoli

La creazione del progetto avvia la trascrizione, la traduzione e la versione doppiata in un'unica soluzione. Usa l'endpoint /generate dopo aver modificato le righe dei sottotitoli.
1

Carica il tuo video

Invia il video come file o inserisci un link da YouTube, Google Drive, S3, Vimeo o qualsiasi URL diretto. Un solo caricamento copre tutte le lingue dei sottotitoli.

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

Crea il progetto

Passa l'ID multimediale come video_id e una lingua di arrivo per progetto. I progetti per lingue diverse vengono eseguiti in parallelo.

POST /v2/projects
3

Scarica i file dei sottotitoli

Leggi lo stato fino a quando non raggiunge merging_done, quindi scarica i file .srt e .vtt e salvali sui tuoi sistemi.

GET /v2/projects/{project_id}
Il tempo di elaborazione varia in base alla lunghezza del video, al numero di parlanti e alla lingua di arrivo. In un test osservato, un video di 3 minuti e 47 secondi è stato completato in 165 secondi.
Creato intorno a te

Hai bisogno di un formato o di una modalità di consegna dei sottotitoli che non è presente nell'elenco? Contatta il nostro team

Un formato di didascalia diverso, la consegna sul tuo spazio di archiviazione, una lingua non inclusa nel catalogo o una maggiore capacità: il nostro team analizza le esigenze del tuo flusso di lavoro di produzione e le opzioni disponibili.

Lingue e voci

Hai bisogno di sottotitoli in una lingua non presente nel catalogo pubblico? Parla con il nostro team per esaminare le tue esigenze e le opzioni disponibili.

Consegna e integrazione

Webhook, invio nella tua coda, consegna diretta al tuo S3, endpoint personalizzati. Diteci come il vostro sistema si aspetta di ricevere i dati.

Volume e capacità

Le dimensioni dei lotti, le lingue di arrivo per azione e la priorità di elaborazione sono termini contrattuali, non limiti fissi del prodotto.

Sicurezza e hosting

La residenza dei dati, l'SSO e SAML, le regole di conservazione e il supporto per la revisione della sicurezza vengono gestiti durante l'attivazione per le aziende.
Casi d'uso

Chi utilizza un'API per i sottotitoli?

Piattaforme con video integrati

Piattaforme LMS e di formazione per clienti, piattaforme per creator e video, strumenti per webinar e eventi virtuali, hosting video e SaaS per flussi di lavoro, piattaforme di digital adoption, live shopping. Trasforma i sottotitoli in ogni lingua in una funzione dei tuoi caricamenti video.

Agenzie di localizzazione e produzione

Fornisci file SRT e VTT per ogni lingua del cliente con un solo caricamento. I revisori correggono le righe tramite l'API e i file si aggiornano senza che nessuno debba risincronizzarli.

Produzione video interna e continua

Retail e e-commerce internazionali, franchise globali, editori multimediali, università aziendali. Rendi i contenuti video di formazione e di prodotto accessibili a ogni mercato e agli spettatori che guardano i video senza audio.
Storie di clienti

Squadre vere, risultati tangibili

Come le aziende localizzano i video con Rask, attraverso i loro numeri.
freccia
freccia
Codice

Esempi di codice per l'API dei sottotitoli

Un esempio completo per ogni lingua: carica un video, crea un progetto per ogni lingua di sottotitoli, attendi e poi salva i file .srt e .vtt o aggiungili a un player 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 è l'SDK ufficiale. Le schede Node, PHP e cURL mostrano semplici esempi HTTP sugli stessi endpoint.
Avanzamento

Come un progetto di sottotitoli segnala l'avanzamento

Ogni progetto passa attraverso stati documentati, in modo che gli utenti che caricano video nella tua app possano seguire i progressi di ogni lingua di sottotitoli. Devi intervenire solo su tre gruppi.

Operazione riuscita, fermati qui

merging_done
I file dei sottotitoli sono pronti. Recupera il progetto un'altra volta per ottenere nuovi link di download.

In corso, continua a verificare

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
In più la corrispondenza _done stati. Questi si adattano perfettamente a un'interfaccia a fasi.

Errore, interruzione e segnalazione

failed
upload_failed
transcription_failed
translation_failed
voiceover_failed
merging_failed
no_audio
no_words
forbidden_link
no_audio, no_words e forbidden_link sono abbastanza specifici da poter essere mostrati direttamente ai vostri utenti.
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

Oppure salta del tutto il controllo

Indica un endpoint webhook e ogni transizione di stato arriverà come richiesta POST, così la tua coda potrà reagire a ogni cambiamento nel momento stesso in cui si verifica. La consegna tramite webhook fa parte dell'onboarding per le aziende.
Leggi la documentazione
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
Output

Prima i file dei sottotitoli, tutto il resto insieme

Ogni progetto completato offre entrambi i formati di sottotitoli, i segmenti di trascrizione corrispondenti e i contenuti multimediali doppiati. I link di download sono pre-firmati e validi per un'ora, quindi assicurati di copiare i file sul tuo spazio di archiviazione.
Campo
Formato
Cosa contiene
translation_srt_path
.srt
Sottotitoli nella lingua di arrivo, ideali per software di editing e la maggior parte delle piattaforme video
translation_vtt_path
.vtt
Sottotitoli WebVTT per la riproduzione video HTML5 e i player web
/transcription
JSON
Testo di origine, traduzione, etichetta del parlante e timestamp per ogni segmento
translated_video
MP4
Il video doppiato, se pubblichi anche una versione con voce
translated_audio
WAV
Discorso tradotto mescolato con la musica originale e gli effetti sonori
original_video
MP4
Il file di origine salvato, come riferimento
Controllo

Correggi una riga di sottotitoli, rigenera solo quella parte

I sottotitoli derivano dai segmenti della trascrizione. Modifica il testo o la tempistica di una riga, rigenera e i file dei sottotitoli e la versione doppiata si aggiorneranno insieme. La fatturazione copre i segmenti modificati, con un minimo di un minuto per esecuzione.

Modifica per singoli segmenti

Modifica per singoli segmenti
Ogni progetto presenta la sua trascrizione come segmenti accessibili, quindi una parola sbagliata o un sottotitolo in ritardo richiedono una sola modifica.
Scarica la trascrizione e i suoi segmenti
Modifica il testo originale e noi penseremo a ritradurlo
Modifica direttamente il testo tradotto per usare le parole che preferisci
Modifica i tempi, aggiungi segmenti o cancellane altri
Cambia la voce associata a qualsiasi speaker

Glossari per la terminologia

Glossari per la terminologia
Collega unglossario per far sì che i nomi dei brand e i termini tecnici rimangano uguali nei sottotitoli di ogni lingua, o mantieni quelli originali di proposito.

Un glossario copre una coppia di lingue e si applica a tutte le varianti regionali di quella lingua, così un unico glossario in spagnolo è utile per es-mx e es-es allo stesso modo. Il progetto registra glossary_version, così le modifiche successive non alterano mai inaspettatamente il lavoro completato.
Input

Formati di file supportati

Carica un video o una registrazione audio supportata, oppure usa un URL multimediale supportato. Crea un progetto per ogni lingua di arrivo e scarica i relativi file SRT e WebVTT.

Video

7 formati
.mp4
.mov
.mkv
.avi
.webm
.m4v
.3gp

Audio

4 formati
.mp3
.wav
.flac
.m4a

Tutte le informazioni prima di iniziare

L'endpoint multimediale restituisce durata, dimensioni del file, codec video, frequenza dei fotogrammi, risoluzione, codec audio, frequenza di campionamento e layout dei canali. Valida un file e stima i costi in anticipo, poiché i progetti vengono fatturati al minuto di video.
Sicurezza e conformità

Sicurezza e conformità per i tuoi contenuti video

Brask Inc detiene la certificazione SOC 2 Type II, opera nel rispetto del GDPR e pubblica lo stato dei controlli in tempo reale nel suo Trust Center per la tua verifica di sicurezza.

Certificazioni

SOC 2 Tipo II
GDPR
Membro CAI e C2PA

Crittografia

TLS 1.2 in transito
AES-256 a riposo
Chiavi gestite SSE-S3
Rotazione delle chiavi almeno ogni 12 mesi

I tuoi contenuti

Ambiente di intelligenza artificiale chiuso
Mai utilizzato per addestrare modelli generali
Esportazione completa, senza vincoli

Accesso

SSO e SAML
Controllo degli accessi basato sui ruoli
Credenziali client OAuth 2.0

Enterprise

Opzioni di localizzazione dei dati
SLA personalizzati
Account manager dedicato

Diritti sulle voci

Voci sintetiche con diritti di utilizzo
Clonazione vocale basata sul consenso
Controlli di sicurezza dell'IA, supervisione umana
Confronto

API di Rask rispetto a una pipeline di sottotitoli creata da te

I sottotitoli in un'altra lingua richiedono trascrizione, traduzione, sincronizzazione ed esportazione del file. Ecco lo stesso risultato, ottenuto in due modi diversi.
Ciò di cui hai bisogno
Rask API
Assemblato da componenti
Trascrizione con timestamp
Incluso
Un'API da voce a testo
Sottotitoli in un'altra lingua
Oltre 135 lingue e varianti regionali
Un'API di traduzione con risincronizzazione
Esportazione in formato SRT e WebVTT
Entrambi i formati in ogni progetto
Un tuo sistema di scrittura file
Terminologia coerente
Glossari
Post-elaborazione personalizzata
Correzione di una riga
Una richiesta di patch, quindi rigenera
Modifica manuale di ogni file
Una versione doppiata dello stesso video
Incluso nello stesso progetto
Un fornitore TTS unito al tuo mixaggio
Limiti di velocità
Nessuno
Qualsiasi cosa richiedano i vostri fornitori
Sottotitoli impressi nel video
Nell'applicazione web di Rask, non ancora nell'API
Il vostro sistema di elaborazione video
Carattere, dimensione e disposizione
Impostati nel vostro lettore video
Impostati nel vostro lettore video
Domande frequenti

API dei sottotitoli: domande frequenti

Non riesci a trovare quello che cerchi? Contatta l'ufficio vendite.

Rask dispone di un'API per i sottotitoli?

Quali formati di sottotitoli restituisce l'API?

È possibile ottenere i sottotitoli nella lingua originale?

Quali lingue sono supportate?

L'API permette di imprimere i sottotitoli direttamente nel video?

Posso modificare il carattere, la dimensione o la disposizione dei sottotitoli?

I sottotitoli includono la descrizione di musica ed effetti sonori?

I vari interlocutori vengono identificati?

Come posso correggere una riga di sottotitoli?

Quanto tempo sono validi i link per il download?

Posso usare i miei sottotitoli?

Come viene fatturata l'API dei sottotitoli?

Come posso ottenere l'accesso alle API e una chiave API?

Inizia a doppiare in un solo pomeriggio

Fai la tua prima prova oggi e contattaci se hai bisogno di tariffe per grandi volumi o di una lingua che nessun altro offre.