API de sous-titres pour les fichiers SRT et VTT traduits

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

Tout ce que l'API de sous-titres renvoie

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 même temps que la transcription, la traduction et le contenu doublé.

Fichiers SRT et WebVTT

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

Sous-titres dans une autre langue

Supprimez les barrières linguistiques pour les spectateurs de tous les marchés : créez un projet par langue cible, telle que es-mx, pt-br ou fr-ca, à partir du même fichier importé. La langue source est détectée automatiquement.

Synchronisés avec le contenu parlé

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

Sous-titres dans la langue d'origine

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

Étiquettes d'intervenant pour les dialogues

Chaque segment de transcription comporte une étiquette d'intervenant, ce qui vous permet d'ajouter l'identification des locuteurs aux sous-titres pour les interviews, les tables rondes et les dialogues.

Modifiez une ligne avant de publier

Corrigez le texte ou le minutage de n'importe quel segment via l'API et régénérez le tout. Les mots flous, les noms et les accents sont corrigés une seule fois, dans tous les formats.

Des termes cohérents dans toutes les langues

Un glossaire permet de garder les noms de produits et les termes techniques identiques dans toutes les langues de sous-titrage, ou de conserver intentionnellement la langue d'origine.

Sous-titres et version doublée

Le même projet fournit également les pistes vidéo et audio traduites, de sorte que les sous-titres et la version doublée proviennent d'une seule importation.

Évoluez sans limites

Pas de limite de débit, pas de quota de concurrence, pas de restriction par clé. Ajoutez des sous-titres à l'ensemble de votre bibliothèque vidéo dans toutes les langues cibles en parallèle.
Voir en action

Une vidéo, cinq versions linguistiques

Le même extrait en anglais, français, allemand, portugais et espagnol. Chaque version linguistique est fournie avec 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 la version doublée 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 provenant de 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

Transmettez 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 du statut merging_done, puis téléchargez les fichiers .srt et .vtt pour les stocker de votre côté.

GET /v2/projects/{project_id}
Le temps de traitement varie selon la longueur de la vidéo, le nombre d'intervenants et 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

Vous avez besoin d'un format de sous-titres ou d'un mode de livraison qui ne figure pas dans la liste ? Parlez-en à notre équipe

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

Langues et voix

Besoin de sous-titres dans une langue qui ne figure pas dans le catalogue public ? Parlez-en à notre équipe pour lui faire part de vos besoins et découvrir les options disponibles.

Diffusion et intégration

Webhooks, envoi vers votre propre file d'attente, livraison directe sur votre S3, endpoints personnalisés. Dites-nous comment votre système souhaite être alimenté.

Volume et débit

La taille des lots, les langues cibles par action et la priorité de traitement sont des conditions contractuelles, et non des limites de produit fixes.

Sécurité et hébergement

La résidence des données, le SSO et SAML, les règles de conservation et le support pour l'examen de la sécurité sont pris en charge lors de l'intégration des grandes entreprises.
Cas d'utilisation

Qui utilise une API de sous-titres

Plateformes intégrant de la vidéo

Plateformes LMS et de formation client, plateformes de création et de vidéo, outils de webinaires et d'événements virtuels, solutions SaaS d'hébergement vidéo et de flux de travail, plateformes d'adoption numérique, shopping en direct. Intégrez les sous-titres de toutes les langues comme fonctionnalité clé de vos vidéos.

Agences de localisation et de production

Fournissez des fichiers SRT et VTT pour chaque langue client à partir d'un seul téléchargement. Les réviseurs corrigent les lignes via l'API et les fichiers se mettent à jour automatiquement, sans nécessiter de nouveau minutage.

Production vidéo continue en interne

Vente au détail et commerce électronique internationaux, franchises mondiales, éditeurs de médias, universités d'entreprise. Rendez vos contenus de formation et vos vidéos de produits accessibles à tous les marchés ainsi qu'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, chiffres à l'appui.
flèche
flèche
Code

Exemples de code pour l'API de sous-titrage

Un exemple complet dans chaque langue : téléchargez une vidéo, créez un projet par langue de sous-titre, patientez, puis enregistrez les fichiers .srt et .vtt ou intégrez-les dans 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. Les onglets Node, PHP et cURL montrent des exemples HTTP simples utilisant les mêmes points de terminaison.
Progression

Comment un projet de sous-titrage communique sa progression

Chaque projet passe par des statuts bien documentés, permettant aux utilisateurs qui importent des vidéos dans votre application de suivre la progression de chaque langue de sous-titre. Vous n'avez à intervenir que sur trois étapes principales.

Succès, arrêtez-vous ici

merging_done
Les fichiers de sous-titres sont prêts. Récupérez le projet une dernière fois pour obtenir de nouveaux liens de téléchargement.

En cours, continuez à vérifier

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
Ainsi que la correspondance _done états. Ceux-ci correspondent parfaitement à une interface de progression par étapes.

Échec, arrêt et rapport

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 assez précis pour être montré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 ignorez complètement le sondage

Indiquez-nous un point de terminaison webhook et chaque changement d'état est envoyé sous forme de POST, permettant à votre file d'attente de réagir instantanément à chaque modification. L'envoi de webhooks fait partie de l'intégration pour les entreprises.
Lire la documentation
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
Sortie

Les fichiers de sous-titres d'abord, tout le reste ensuite

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
Ce que c'est
translation_srt_path
.srt
Sous-titres dans la langue cible, adaptés aux logiciels de montage et à la plupart des plateformes vidéo
translation_vtt_path
.vtt
Sous-titres WebVTT pour la lecture de vidéos HTML5 et les lecteurs Web
/transcription
JSON
Texte source, traduction, identification de l'orateur et repères temporels 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 et les effets sonores d'origine
original_video
MP4
Votre fichier source tel qu'il a été stocké, à titre de référence
Contrôle

Corrigez une ligne de sous-titres et 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 mettront à jour ensemble. La facturation couvre les segments modifiés, avec un minimum d'une minute par exécution.

Édition au niveau des segments

Édition au niveau des segments
Chaque projet présente sa transcription sous forme de segments accessibles, ce qui fait qu'un mot erroné ou un sous-titre en retard se corrige avec une simple requête de mise à jour.
Récupérer la transcription et ses segments
Modifier le texte source pour lancer une nouvelle traduction
Modifier directement le texte traduit pour conserver vos propres formulations
Ajuster les repères temporels, ajouter ou supprimer des segments
Réassigner la voix associée à un locuteur

Glossaires pour la terminologie

Glossaires pour la terminologie
Ajoutez 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 volontairement dans la langue d'origine.

Un glossaire couvre une paire de langues et s'applique à toutes les variantes régionales de cette langue cible. Ainsi, un seul glossaire en espagnol sert es-mx et es-es de la même manière. L'historique du projet glossary_version, de sorte que les modifications ultérieures ne modifient jamais discrètement le travail déjà terminé.
Entrée

Formats de fichiers pris en charge

Téléchargez une vidéo ou un enregistrement audio pris en charge, 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

L'API 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

Brask Inc détient la certification SOC 2 Type II, opère conformément au RGPD et publie l'état de ses contrôles en direct dans son Centre de confiance pour vos vérifications de sécurité.

Certifications

SOC 2 Type II
GDPR
Membre 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 d'IA fermé
Jamais utilisé pour entraîner des modèles généraux
Exportation complète, sans dépendance vis-à-vis d'un fournisseur

Accès

SSO et SAML
Contrôle d'accès basé sur les rôles
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 de voix basé sur le consentement
Contrôles de sécurité de l'IA, intervention humaine
Comparaison

API Rask par rapport à une chaîne de traitement des sous-titres créée par vos soins

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 repères temporels
Inclus
Une API de conversion de la parole en texte
Sous-titres dans une autre langue
Plus de 135 langues et options régionales
Une API de traduction avec ajustement du minutage
Exportation au format SRT et WebVTT
Les deux formats dans chaque projet
Votre propre outil de création de fichiers
Terminologie cohérente
Glossaires
Post-traitement personnalisé
Correction d'une ligne
Une seule 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 taux
Aucun
Quelles que soient les exigences de vos fournisseurs
Sous-titres incrustés dans la vidéo
Dans l'application Web de Rask, pas encore dans l'API
Votre propre rendu vidéo
Police, taille et mise en page
Définis dans votre lecteur vidéo
Définis dans votre lecteur vidéo
FAQ

API de sous-titres : questions fréquentes

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

Rask dispose-t-il d'une API de sous-titres ?

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

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

Quelles langues sont prises en charge ?

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

Puis-je modifier la police, la taille ou la mise en page des sous-titres ?

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

Les locuteurs sont-ils identifiés ?

Comment corriger une ligne de sous-titres ?

Combien de temps les liens de téléchargement sont-ils valides ?

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 à doubler en un après-midi

Faites votre première demande dès aujourd'hui et contactez-nous si vous avez besoin de tarifs de gros ou d'une langue introuvable ailleurs.