FlowKit

Générer des sous-titres automatiques pour vos vidéos avec n8n et Whisper

Publié le 10 août 2026 · 7 min de lecture

Sous-titrer une vidéo de 20 minutes à la main prend facilement une heure, et les outils dédiés (Rev, Sonix, Descript) facturent à la minute — vite coûteux dès qu’une équipe produit des tutoriels, des démonstrations produit ou des modules de formation en volume. Pourtant, la brique technique qui fait tout le travail — Whisper, le modèle de reconnaissance vocale d’OpenAI — est accessible via une simple clé API, pour quelques centimes par vidéo. n8n peut orchestrer l’ensemble du pipeline : récupération de la source, transcription horodatée, mise en forme SRT, et publication. Voici comment le construire de bout en bout.

Pourquoi construire ce pipeline plutôt que payer un outil dédié

Les plateformes de sous-titrage automatique reposent, pour la grande majorité, sur la même famille de modèles de reconnaissance vocale que celle exposée directement par l’API OpenAI — elles ajoutent une interface et un abonnement, pas une technologie fondamentalement différente. Construire le pipeline soi-même dans n8n a trois avantages concrets : un coût qui reste proportionnel à l’usage réel (pas de palier mensuel à amortir), des fichiers vidéo qui ne transitent par aucun service tiers supplémentaire, et surtout une intégration directe avec le reste de votre chaîne de contenu — publication automatique, archivage, traduction en plusieurs langues, tout dans le même workflow. C’est la même logique que celle détaillée dans notre guide sur la transcription et le résumé de réunions avec Whisper : une seule brique IA, plusieurs usages, sans abonnement superflu.

À noter une distinction importante : ceci diffère de l’extraction des sous-titres déjà existants d’une vidéo YouTube tierce, couverte dans notre guide sur la transcription de vidéos YouTube. Ici, on part d’un fichier audio ou vidéo brut — le vôtre — et on génère les sous-titres depuis zéro.

Vue d’ensemble du pipeline

Quatre étapes suffisent : récupérer la source, transcrire avec horodatage via Whisper, convertir le résultat en fichier SRT (ou VTT) dans un node Code, puis publier ou archiver ce fichier. Une cinquième étape optionnelle ajoute une traduction automatique pour une diffusion multilingue.

Étape 1 — Récupérer la vidéo ou l’audio source

Trois déclencheurs courants, du plus simple au plus automatisé :

  • Form Trigger avec un champ fichier, pour tester le pipeline sans intégration externe ni dossier partagé.
  • Trigger Google Drive (« nouveau fichier ») qui surveille un dossier où atterrissent les exports bruts d’une équipe marketing ou formation.
  • Trigger S3 ou node HTTP Request planifié, si les vidéos proviennent d’un pipeline de production vidéo déjà automatisé.

Whisper accepte un fichier audio directement (mp3, wav, m4a…), mais aussi certains formats vidéo courants. Pour une vidéo volumineuse, mieux vaut cependant n’envoyer que la piste audio : elle pèse une fraction du fichier vidéo complet et reste sous la limite de 25 Mo imposée par l’API bien plus longtemps. Sur une instance self-hosted, un node Execute Command appelant ffmpeg -i video.mp4 -vn -acodec libmp3lame audio.mp3 extrait cette piste en une seconde — notre guide sur le node Execute Command détaille les précautions à prendre sur ce node (sandboxing, disponible uniquement en self-hosted). Sur n8n Cloud, où l’exécution de commandes système n’est pas disponible, il faut soit envoyer l’audio déjà extrait en amont, soit passer par un service d’extraction tiers via HTTP Request.

Étape 2 — Transcrire avec horodatage via Whisper

Le node OpenAI, en mode « Transcribe », accepte le fichier binaire reçu à l’étape précédente. Le réglage déterminant pour la suite est le paramètre response_format : en verbose_json plutôt qu’en simple texte, la réponse contient un tableau segments, chacun avec un texte, un start et un end en secondes. Sans ces horodatages, impossible de produire un fichier de sous-titres synchronisé — c’est la différence essentielle avec un usage « résumé de réunion » où seul le texte brut compte.

Pour les fichiers plus longs qu’une vingtaine de minutes, prévoir un node Loop Over Items avec un Wait si plusieurs vidéos sont traitées en lot dans la même exécution, afin de rester sous les limites de débit de l’API.

Étape 3 — Convertir la transcription en fichier SRT

C’est l’étape la plus spécifique de ce pipeline : un node Code transforme le tableau segments en texte au format SRT, qui impose une syntaxe précise (numéro de séquence, horodatage HH:MM:SS,mmm --> HH:MM:SS,mmm, texte, ligne vide). Un exemple de fonction pour ce node :

function formatTimestamp(seconds) {
  const h = Math.floor(seconds / 3600);
  const m = Math.floor((seconds % 3600) / 60);
  const s = Math.floor(seconds % 60);
  const ms = Math.round((seconds - Math.floor(seconds)) * 1000);
  const pad = (n, len = 2) => String(n).padStart(len, "0");
  return `${pad(h)}:${pad(m)}:${pad(s)},${pad(ms, 3)}`;
}

const segments = $input.first().json.segments;
const srt = segments
  .map((seg, i) => {
    const start = formatTimestamp(seg.start);
    const end = formatTimestamp(seg.end);
    return `${i + 1}\n${start} --> ${end}\n${seg.text.trim()}\n`;
  })
  .join("\n");

return [{ json: { srt } }];

Pour un fichier VTT (utilisé par les lecteurs HTML5 natifs plutôt que SRT), la logique est identique à un détail près : les millisecondes sont séparées par un point plutôt qu’une virgule, et le fichier commence par l’en-tête WEBVTT. Un node Convert to File transforme ensuite cette chaîne en fichier binaire .srt ou .vtt, prêt à être uploadé.

Étape 4 (optionnelle) — Sous-titres multilingues

Pour une audience internationale, insérez avant la conversion SRT une Basic LLM Chain qui traduit le champ text de chaque segment tout en conservant sa structure — la même approche que celle décrite dans notre guide sur la traduction automatique de contenus. Le point d’attention propre aux sous-titres : demandez explicitement au modèle de préserver la longueur relative du texte traduit, faute de quoi une traduction plus longue que l’original dépasse le temps d’affichage alloué par le segment et devient illisible à l’écran.

Étape 5 — Publier ou archiver le fichier

Selon la destination :

  • YouTube (votre propre chaîne) : la YouTube Data API v3 accepte l’upload direct d’une piste de sous-titres via captions.insert, décrit dans notre guide sur la transcription de vidéos YouTube (méthode réservée aux vidéos dont vous êtes propriétaire).
  • Site web ou plateforme e-learning : un simple upload S3 ou Google Drive à côté du fichier vidéo, avec la convention de nommage attendue par le lecteur vidéo (souvent nom-de-la-video.srt dans le même dossier). Notre guide sur l’archivage automatique avec S3 couvre la structuration d’un tel dépôt.
  • Sous-titres incrustés (burned-in) : sur une instance self-hosted, ffmpeg via Execute Command peut ré-encoder la vidéo avec le filtre subtitles=fichier.srt, utile pour les réseaux sociaux qui n’acceptent pas de piste séparée.

Combien ça coûte réellement

La transcription Whisper via l’API OpenAI est facturée à la minute d’audio, à un tarif de l’ordre de 0,006 $/minute. Une vidéo de 15 minutes revient donc à moins de 0,10 $ à transcrire, traduction éventuelle à part (le coût d’un appel LLM classique, généralement inférieur au coût de la transcription elle-même sur un texte de cette longueur). À l’échelle d’une équipe qui produit dix vidéos par semaine, la facture mensuelle reste sous quelques dollars — largement sous le tarif d’un abonnement à un outil de sous-titrage dédié.

Pièges fréquents

  • Envoyer le fichier vidéo complet plutôt que l’audio extrait : au-delà de la limite de 25 Mo, l’appel échoue purement et simplement ; extraire l’audio en amont règle ce problème pour l’immense majorité des vidéos.
  • Oublier verbose_json : sans ce réglage, la réponse ne contient qu’un texte continu, sans les horodatages nécessaires à un fichier de sous-titres synchronisé.
  • Silences longs mal gérés : Whisper segmente naturellement autour des pauses, mais une vidéo avec de longs silences (écran de titre, transition) peut produire un segment vide ou mal calé ; un contrôle visuel rapide sur les premières vidéos traitées permet de calibrer les attentes.
  • Traduction qui allonge le texte : comme mentionné plus haut, sans consigne de concision, une traduction en allemand ou en espagnol peut dépasser largement la longueur du segment source.

Ce que dit la recherche sur l’intérêt des sous-titres

Au-delà de l’accessibilité pour les personnes sourdes ou malentendantes, une étude de synthèse de Gernsbacher publiée en 2015 dans Policy Insights from the Behavioral and Brain Sciences (voir sur Google Scholar) montre que les sous-titres améliorent la compréhension et la mémorisation d’un contenu vidéo pour l’ensemble des spectateurs, pas seulement pour un public malentendant — un argument de poids pour en généraliser l’usage sur du contenu de formation ou de démonstration produit. Sur le plan technique, le modèle Whisper lui-même est documenté dans l’article de Radford et al. (2022), Robust Speech Recognition via Large-Scale Weak Supervision (voir sur Google Scholar), qui détaille les données d’entraînement multilingues expliquant sa robustesse même sur de l’audio de qualité moyenne.

Pour aller plus loin

Ce pipeline — transcription horodatée, mise en forme SRT, traduction optionnelle — repose sur les mêmes briques IA (node OpenAI, Basic LLM Chain) que celles couvertes dans notre guide pour connecter OpenAI à n8n. Si votre organisation combine déjà production de contenu, tri d’emails par IA et documentation interne interrogeable, le Bundle FlowKit Complet (269 € au lieu de 347 €) réunit le Pack Inbox IA (79 €), le Pack Assistant RAG (119 €) et le Pack Conformité & Audit (149 €) — trois briques complémentaires à ce pipeline de sous-titrage, pour une pile d’automatisation IA cohérente de bout en bout.

FAQ

Questions fréquentes

Le node OpenAI de n8n peut-il générer directement un fichier SRT ?

Pas nativement. Le node OpenAI en mode transcription renvoie soit du texte brut, soit un objet JSON structuré (avec l’option verbose_json) contenant les segments et leurs horodatages. La mise en forme au format SRT ou VTT — avec la syntaxe précise de numérotation et de virgules pour les millisecondes — se fait ensuite dans un node Code, à partir de ces segments.

Whisper fonctionne-t-il pour des vidéos qui ne sont pas en français ou en anglais ?

Oui. Whisper (whisper-1 et les modèles plus récents proposés par l’API OpenAI) reconnaît nativement des dizaines de langues et détecte automatiquement la langue parlée si elle n’est pas précisée. La qualité reste toutefois meilleure sur les langues les mieux représentées dans les données d’entraînement — l’anglais et le français en tête.

Quelle est la taille maximale de fichier audio acceptée ?

L’API de transcription d’OpenAI plafonne à 25 Mo par fichier. Pour une vidéo plus longue, il faut soit extraire uniquement la piste audio (bien plus légère que le fichier vidéo complet) via ffmpeg, soit découper l’audio en plusieurs segments transcrits séparément puis recollés en tenant compte du décalage temporel de chaque segment.

Peut-on incruster les sous-titres directement dans la vidéo plutôt que produire un fichier séparé ?

n8n peut piloter cette étape en appelant ffmpeg via un node Execute Command sur une instance self-hosted, en passant le fichier SRT généré en filtre subtitles. C’est toutefois un traitement plus lourd (ré-encodage vidéo complet) réservé aux cas où la plateforme de diffusion cible n’accepte pas de piste de sous-titres séparée.

Bundle FlowKit Complet

269 €