Convertissez vos sous-titres SRT en WebVTT
Transformez un fichier de sous-titres SRT en WebVTT accepté par les lecteurs web : 00:00:01,250 devient 00:00:01.250, l’en-tête WEBVTT est ajouté et les sous-titres sur plusieurs lignes restent intacts, avec le nombre de blocs produits. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Transformez un texte de sous-titres SubRip en WebVTT conforme aux standards sans remplacer vous-même la ponctuation ni reconstruire les blocs. Le convertisseur ajoute l’en-tête WEBVTT requis, remplace les virgules des temps SRT par des points décimaux, conserve les sous-titres multilignes et indique le nombre de repères produits. Chaque ligne temporelle est contrôlée avant le résultat : une entrée endommagée provoque donc une erreur explicite plutôt qu’un fichier peu fiable.
Intégrez vos sous-titres SRT à un flux WebVTT
SRT et WebVTT se ressemblent, mais ces fichiers ne sont pas interchangeables. Les lecteurs web attendent généralement un fichier commençant par la signature WEBVTT, tandis qu’un fichier SRT débute souvent par un repère numéroté. Les séparateurs de millisecondes diffèrent aussi : SRT emploie une virgule et WebVTT un point.
Collez ou envoyez le document SRT complet dans le champ srt. Le convertisseur normalise les fins de ligne courantes, retire une éventuelle marque d’ordre des octets Unicode initiale, lit chaque repère dans l’ordre et produit un document WebVTT. Les lignes restent dans leur ordre d’origine, y compris dans les sous-titres multilignes.
Les index numériques servent de structure et ne sont pas recopiés. La réponse fournit le texte converti dans vtt ainsi que le nombre de repères, pratique pour les contrôles automatisés.
Détectez les temps incorrects avant publication
Les erreurs de sous-titres sont parfois discrètes : un repère peut employer un point à la place de la virgule requise en SRT, omettre un chiffre des millisecondes, perdre la flèche ou contenir une minute impossible. Cette capacité vérifie chaque ligne selon la forme HH:MM:SS,mmm --> HH:MM:SS,mmm. Les minutes et secondes doivent être comprises entre 00 et 59, les millisecondes comporter exactement trois chiffres et la fin ne peut pas précéder le début.
Si une entrée enfreint ces règles, la requête entière renvoie une erreur identifiant le repère concerné au lieu de générer silencieusement un fichier incomplet. Les textes vides et les index non numériques inattendus sont également refusés. Aucun temps ambigu n’est deviné ni réparé, car une estimation pourrait décaler le dialogue.
Corrigez l’entrée signalée, puis renvoyez le document.
Utilisez une sortie déterministe sur vos sites et automatisations
Le texte WebVTT renvoyé peut être enregistré avec l’extension .vtt et servi sous le type text/vtt. Dans une page vidéo HTML, référencez ce fichier depuis un élément track et choisissez la langue et le libellé appropriés. La conversion est déterministe : une entrée identique donne une sortie identique, avec des fins de ligne Unix, une ligne vide après l’en-tête, des séparations entre repères et un saut de ligne final.
Le résultat convient donc au contrôle de versions, aux builds reproductibles, aux migrations et aux tests. La capacité se limite à la structure : elle ne traduit pas les dialogues, ne transcrit pas l’audio, ne recale pas les temps, ne fusionne pas les sous-titres superposés et n’analyse pas la vidéo.
Cas d’usage
Préparez des sous-titres pour une vidéo HTML5
Convertissez la livraison SRT d’un monteur en WebVTT avant de la relier à un élément track HTML.
Validez les exports dans votre CI
Arrêtez le build dès qu’un repère contient un temps incorrect au lieu de publier des sous-titres défectueux.
Migrez une bibliothèque de sous-titres
Produisez des ressources WebVTT stables depuis des textes SRT existants au cours d’une migration reproductible.
Questions fréquentes
Que modifie la conversion ?
Elle ajoute l’en-tête WEBVTT, remplace les virgules des millisecondes par des points, retire les index SRT numériques et conserve le texte.
Quel format temporel est accepté ?
Chaque repère doit suivre HH:MM:SS,mmm --> HH:MM:SS,mmm, avec des minutes et secondes valides et trois chiffres de millisecondes.
Que se passe-t-il si une ligne temporelle est incorrecte ?
La requête échoue avec une erreur identifiant l’entrée SRT. Aucun document WebVTT partiel n’est renvoyé.
Les sous-titres multilignes sont-ils conservés ?
Oui. Toutes les lignes suivant le temps d’un repère restent dans le même ordre.
Cet outil traduit-il ou recale-t-il les sous-titres ?
Non. Seul le format du conteneur change ; le texte et les temps valides restent inchangés.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/video/subtitle-srt-to-vtt \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"srt":"1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."}'const res = await fetch("https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/subtitle-srt-to-vtt",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"srt":"1\\n00:00:01,250 --> 00:00:03,500\\nWelcome to the presentation.\\n\\n2\\n00:00:04,000 --> 00:00:06,125\\nLet us begin."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"srt":"1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.subtitle_srt_to_vtt",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Utilisez une sortie déterministe sur vos sites et automatisations
Testez-la gratuitement dans votre navigateur ou utilisez l’API au tarif de $0.002 par élément pour automatiser vos documents.
Questions techniques
Quel est le prix de la conversion par API ?
Chaque requête API coûte $0.002 par élément. La version proposée dans le navigateur est gratuite.