API de sous-titres pour fichiers SRT et VTT traduits

Téléchargez une vidéo une seule fois et obtenez des fichiers de sous-titres en SRT et WebVTT pour chaque langue cible, synchronisés avec les dialogues. Corrigez n'importe quelle ligne via l'API, puis téléchargez les fichiers mis à jour pour votre lecteur, application ou logiciel de montage vidéo.
SRT et WebVTT
Plus de 135 options de langues et de régions
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)"
Utilisé par des équipes du monde entier
Fonctionnalités

Tout ce que renvoie l'API de sous-titres

Créez des fichiers SRT et WebVTT traduits à partir d'enregistrements vidéo ou audio, y compris des podcasts et des interviews. Choisissez une langue cible pour chaque projet et obtenez des fichiers de sous-titres en plus de la transcription, de la traduction et du contenu doublé.

Fichiers SRT et WebVTT

Chaque projet terminé renvoie un fichier .srt et un fichier .vtt dans la langue cible : le format SRT pour les logiciels de montage et la plupart des plateformes, et WebVTT pour la lecture vidéo sur le web.

Sous-titres dans une autre langue

Éliminez les barrières linguistiques pour vos spectateurs du monde entier : créez un projet par langue cible (comme es-mx, pt-br ou fr-ca) à partir d'un seul fichier. La langue source est détectée automatiquement.

Synchronisés avec les dialogues

Chaque sous-titre correspond à un segment de transcription avec un début et une fin, pour que chaque ligne s'affiche à l'écran au moment exact où elle est prononcée.

Sous-titres dans la langue d'origine

La transcription contient le texte source de chaque segment avec les repères temporels. Convertissez-la en fichier SRT ou VTT pour obtenir des sous-titres dans la même langue avec quelques lignes de code.

Noms des locuteurs pour les dialogues

Chaque segment de transcription indique le nom de la personne qui parle, ce qui vous permet d'identifier les intervenants dans les sous-titres pour des interviews, des tables rondes ou des dialogues.

Modifiez une ligne avant de publier

Corrigez le texte ou le minutage de n'importe quel segment via l'API et relancez la génération. Les mots ambigus, les noms et les accents sont corrigés une seule fois pour tous les formats.

Terminologie cohérente dans toutes les langues

Un glossaire garantit que les noms de produits et les termes techniques restent identiques dans toutes les langues de sous-titrage, ou conservent volontairement la langue d'origine.

Sous-titres et version doublée

Un même projet fournit également les pistes vidéo et audio traduites, ce qui vous permet d'obtenir à la fois les sous-titres et le doublage à partir d'un seul téléchargement.

Évoluez sans limites

Sans limite de débit, de quota de simultanéité ni de restrictions par clé. Créez les sous-titres de toute votre vidéothèque dans toutes les langues cibles en même temps.
Voir en action

Une vidéo, cinq versions linguistiques

Le même extrait en anglais, français, allemand, portugais et espagnol. Chaque version linguistique dispose de ses propres fichiers de sous-titres SRT et VTT.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Flux de travail

Trois étapes, du téléchargement de la vidéo au fichier de sous-titres

La création du projet lance la transcription, la traduction et le doublage en une seule fois. Utilisez le point de terminaison /generate après avoir modifié les lignes de sous-titres.
1

Téléchargez votre vidéo

Envoyez la vidéo sous forme de fichier ou partagez un lien YouTube, Google Drive, S3, Vimeo ou toute URL directe. Un seul téléchargement suffit pour toutes les langues de sous-titres.

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

Créer le projet

Indiquez l'identifiant du média comme video_id et une langue cible par projet. Les projets pour différentes langues s'exécutent en parallèle.

POST /v2/projects
3

Téléchargez les fichiers de sous-titres

Suivez l'état d'avancement jusqu'à l'obtention de merging_done, puis téléchargez les fichiers .srt et .vtt pour les enregistrer de votre côté.

GET /v2/projects/{project_id}
Le temps de traitement dépend de la durée de la vidéo, du nombre d'intervenants et de la langue cible. Lors d'un test, une vidéo de 3 minutes 47 a été traitée en 165 secondes.
Conçu pour vous

Besoin d'un format de sous-titres ou d'une option de livraison qui ne figure pas dans la liste ? Contactez notre équipe

Un autre format de sous-titres, une livraison sur votre propre espace de stockage, une langue non répertoriée ou un volume plus élevé : notre équipe étudie vos besoins et les options disponibles pour votre flux de production.

Langues et voix

Besoin de sous-titres dans une langue qui ne figure pas dans le catalogue public ? Parlez-nous de vos besoins et des options disponibles avec notre équipe.

Livraison et intégration

Webhooks, envoi direct dans votre propre file d'attente, livraison sur votre espace S3, points de terminaison personnalisés. Dites-nous comment alimenter votre système.

Volume et débit

La taille des lots, le nombre de langues cibles par action et la priorité de traitement font l'objet de conditions contractuelles, et non de limites figées dans le produit.

Sécurité et hébergement

La gestion des données, l'authentification unique (SSO et SAML), les règles de conservation et l'aide aux audits de sécurité sont prises en charge lors de l'intégration des grandes entreprises.
Cas d'utilisation

Qui utilise l'API de sous-titrage ?

Plateformes intégrant de la vidéo

Plateformes LMS et de formation client, plateformes de contenu et vidéo, outils de webinaires et d'événements virtuels, hébergement vidéo et SaaS de flux de travail, plateformes d'adoption numérique, live shopping. Intégrez des sous-titres dans toutes les langues à vos téléchargements vidéo.

Agences de localisation et de production

Obtenez des fichiers SRT et VTT pour chaque langue de vos clients à partir d'un seul téléchargement. Les réviseurs corrigent les lignes via l'API et les fichiers se mettent à jour automatiquement sans avoir à les resynchroniser.

Production vidéo continue en interne

Vente au détail et e-commerce international, franchises mondiales, éditeurs de médias, universités d'entreprise. Rendez vos formations et vos vidéos de produits accessibles à tous les marchés, y compris aux spectateurs qui regardent sans le son.
Témoignages clients

De véritables équipes, des résultats mesurables

Découvrez comment les entreprises localisent leurs vidéos avec Rask, en chiffres.
flèche
flèche
Code

Exemples de code pour l'API de sous-titrage

Un exemple complet par langue : téléchargez une vidéo, créez un projet par langue de sous-titrage, patientez, puis enregistrez les fichiers .srt et .vtt ou intégrez-les à un lecteur 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 est le kit de développement officiel (SDK). Les onglets Node, PHP et cURL proposent des exemples HTTP simples ciblant les mêmes points de terminaison.
Progression

Comment suivre la progression d'un projet de sous-titrage

Chaque projet passe par des états clairement documentés, permettant aux utilisateurs de votre application de suivre l'avancement de chaque langue de sous-titrage. Vous n'avez besoin d'intervenir que sur trois groupes.

Succès, s'arrêter ici

merging_done
Les fichiers de sous-titres sont prêts. Récupérez à nouveau le projet pour obtenir de nouveaux liens de téléchargement.

En cours, continuer d'interroger

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
Ainsi que les _done états correspondants. Ceux-ci s'intègrent parfaitement dans une interface de progression par étapes.

Échec, s'arrêter et signaler

failed
upload_failed
transcription_failed
translation_failed
voiceover_failed
merging_failed
no_audio
no_words
forbidden_link
no_audio, no_words et forbidden_link sont suffisamment précis pour être affichés directement à vos propres utilisateurs.
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

Ou passez entièrement le système d'interrogation

Indiquez-nous un point de terminaison de webhook et chaque changement d'état arrive sous forme de requête POST, permettant à votre file d'attente de réagir instantanément. La livraison par webhook fait partie de l'offre entreprise.
Lire la documentation
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
Résultat

Les fichiers de sous-titres en priorité, et tout le reste en même temps

Chaque projet terminé propose les deux formats de sous-titres, les segments de transcription associés ainsi que le média doublé. Les liens de téléchargement sont pré-signés et valables une heure, pensez donc à copier les fichiers sur votre propre espace de stockage.
Champ
Format
Description
translation_srt_path
.srt
Sous-titres dans la langue cible, pour les logiciels de montage et la plupart des plateformes vidéo
translation_vtt_path
.vtt
Sous-titres WebVTT pour la lecture vidéo HTML5 et les lecteurs web
/transcription
JSON
Texte source, traduction, nom de l'intervenant et horodatages pour chaque segment
translated_video
MP4
La vidéo doublée, si vous publiez également une version vocale
translated_audio
WAV
Discours traduit mélangé avec la musique originale et les effets sonores
original_video
MP4
Votre fichier source tel qu'il a été enregistré, à titre de référence
Contrôle

Corrigez une ligne de sous-titres, régénérez uniquement cette partie

Les sous-titres proviennent des segments de transcription. Modifiez le texte ou le minutage d'une ligne, régénérez, et les fichiers de sous-titres ainsi que la version doublée se mettent à jour ensemble. La facturation couvre les segments modifiés, avec un minimum d'une minute par exécution.

Édition au niveau du segment

Édition au niveau du segment
Chaque projet expose sa transcription sous forme de segments modifiables, ce qui fait qu'un mot erroné ou un sous-titre décalé se corrige en une seule modification.
Récupérer la transcription et ses segments
Modifiez le texte source et nous le traduisons à nouveau
Modifiez directement le texte traduit pour conserver vos propres mots
Ajuster les repères temporels, ajouter des segments, supprimer des segments
Réattribuer la voix associée à un locuteur

Glossaires pour la terminologie

Glossaires pour la terminologie
Associez un glossaire pour que les noms de marque et les termes techniques restent identiques dans les sous-titres de toutes les langues, ou conservez-les intentionnellement dans la langue d'origine.

Un glossaire couvre une paire de langues et s'applique à toutes les variantes régionales de cette langue cible, ce qui signifie qu'un seul glossaire en espagnol sert es-mx et es-es de même. Les enregistrements du projet glossary_version, de sorte que les modifications ultérieures ne modifient jamais le travail terminé sans que vous le sachiez.
Entrée

Formats de fichiers pris en charge

Téléchargez une vidéo, un enregistrement audio ou utilisez une URL multimédia compatible. Créez un projet pour chaque langue cible et téléchargez ses fichiers SRT et WebVTT.

Vidéo

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

Audio

4 formats
.mp3
.wav
.flac
.m4a

Métadonnées avant de dépenser

Le point de terminaison multimédia renvoie la durée, la taille du fichier, le codec vidéo, la fréquence d'images, la résolution, le codec audio, la fréquence d'échantillonnage et la disposition des canaux. Validez un fichier et estimez le coût à l'avance, car les projets sont facturés à la minute de vidéo.
Sécurité et conformité

Sécurité et conformité pour votre contenu vidéo

Rask Inc détient la certification SOC 2 Type II, fonctionne selon le RGPD et publie l'état de ses contrôles en direct dans son centre de confiance pour votre examen de sécurité.

Certifications

SOC 2 Type II
RGPD
Membre de CAI et C2PA

Cryptage

TLS 1.2 en transit
AES-256 au repos
Clés gérées SSE-S3
Rotation des clés au moins tous les 12 mois

Votre contenu

Environnement IA fermé
Jamais utilisé pour entraîner des modèles généraux
Exportation complète, sans exclusivité

Accès

SSO et SAML
Contrôle d'accès par rôle
Identifiants client OAuth 2.0

Entreprise

Options de résidence des données
SLA personnalisés
Gestionnaire de compte dédié

Droits sur les voix

Voix synthétiques avec droits d'utilisation
Clonage vocal basé sur le consentement
Contrôles de sécurité de l'IA, intervention humaine
Comparaison

Rask API par rapport à un système de sous-titrage fait maison

Les sous-titres dans une autre langue nécessitent une transcription, une traduction, un minutage et l'exportation du fichier. Voici le même résultat, obtenu de deux manières différentes.
Ce dont vous avez besoin
Rask API
Assemblé à partir de pièces
Transcription avec horodatage
Inclus
Une API de conversion de la parole en texte
Sous-titres dans une autre langue
Plus de 135 options de langues et de régions
Une API de traduction avec réajustement du minutage
Exportation SRT et WebVTT
Les deux formats dans chaque projet
Votre propre générateur de fichiers
Terminologie cohérente
Glossaires
Post-traitement personnalisé
Correction d'une seule ligne
Une requête de modification, puis régénération
Modifier chaque fichier à la main
Une version doublée de la même vidéo
Inclus dans le même projet
Un fournisseur de synthèse vocale et votre propre mixage
Limites de débit
Aucun
Quelles que soient les contraintes de vos fournisseurs
Sous-titres intégrés à la vidéo
Dans l'application web Rask, pas encore disponible dans l'API
Votre propre rendu vidéo
Police, taille et mise en page
À configurer dans votre lecteur vidéo
À configurer dans votre lecteur vidéo
FAQ

API de sous-titrage : questions fréquentes

Vous ne trouvez pas ce que vous cherchez ? Contactez le service commercial.

Rask propose-t-il une API de sous-titrage ?

Quels formats de sous-titres l'API renvoie-t-elle ?

Puis-je obtenir des sous-titres dans la langue d'origine ?

Quelles sont les langues prises en charge ?

L'API peut-elle incruster les sous-titres dans la vidéo ?

Puis-je modifier la police, la taille ou la disposition des sous-titres ?

Les sous-titres décrivent-ils la musique et les effets sonores ?

Les interlocuteurs sont-ils identifiés ?

Comment corriger une ligne de sous-titres ?

Quelle est la durée de validité des liens de téléchargement ?

Puis-je utiliser mes propres sous-titres ?

Comment l'API de sous-titrage est-elle facturée ?

Comment obtenir un accès à l'API et une clé API ?

Commencez le doublage en un après-midi

Faites votre première requête dès aujourd'hui et contactez-nous si vous avez besoin de tarifs dégressifs pour de grands volumes ou d'une langue rare.