Communitygithub.com

iamaanahmad/captions-subtitles

Créez, éditez, traduisez et incrustez des légendes et sous-titres — retranscrivez la parole avec Whisper, rédigez des fichiers SRT/VTT/ASS, stylisez-les, et incrustez des légendes avec mise en évidence mot-à-mot pour Shorts, Reels et TikTok. Idéal pour toute demande de sous-titrage, transcription ou accessibilité.

Qu'est-ce que captions-subtitles ?

Cette compétence spécialisée dans les légendes et sous-titres est conçue pour les créateurs de contenu vidéo, les développeurs et les spécialistes de l'accessibilité. Elle permet de transcrire automatiquement l'audio à l'aide de Whisper ou Faster-Whisper, de générer et d'éditer des fichiers de sous-titres dans les formats SRT, VTT et ASS, et de les incruster en dur dans la vidéo via FFmpeg. La compétence prend en charge le surlignage mot-à-mot pour les formats courts comme les Shorts YouTube, Reels Instagram et TikTok, grâce à des fichiers ASS avec balises karaoké. Elle offre également des conseils pratiques sur la lisibilité (limite de caractères, vitesse de lecture, césure des phrases) et la traduction des sous-titres en préservant le minutage. L'outil est multiplateforme (fonctionne avec Claude Code, Cursor, Codex et autres agents compatibles) et s'appuie sur des outils en ligne de commande courants (FFmpeg, Whisper) et des bibliothèques Python pour la transcription.

Compatible avec~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/iamaanahmad/agents-video-editing-skills/tree/HEAD/skills/captions-subtitles

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Légendes et sous-titres

La plupart des vidéos sur les réseaux sociaux sont regardées sans son. Les légendes font partie du montage, pas un ajout.

1. Transcrire

# openai-whisper (pip install openai-whisper)
whisper audio.mp3 --model small --language en --output_format srt --output_dir captions/

# faster-whisper (pip install faster-whisper) : plus rapide, moins de mémoire, horodatage par mot
python - <<'PY'
from faster_whisper import WhisperModel
model = WhisperModel("small", compute_type="int8")
segments, info = model.transcribe("audio.mp3", word_timestamps=True, vad_filter=True)
for s in segments:
    for w in s.words:
        print(f"{w.start:.2f}\t{w.end:.2f}\t{w.word}")
PY

Extrayez d'abord l'audio proprement pour de meilleurs résultats :

ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 audio.wav

La taille du modèle fait un compromis entre précision et vitesse : base < small < medium < large. Utilisez small ou medium pour l'anglais, large pour les accents prononcés ou les autres langues.

Si le script existe déjà (vous avez généré la voix off à partir de celui-ci), ne vous fiez pas au libellé de la transcription. Utilisez le texte du script et utilisez Whisper uniquement pour le calage temporel (alignement forcé). Cela garantit l'exactitude des noms et des nombres.

2. Corriger le texte

Relisez les noms propres, les noms de produits, les nombres. Whisper les comprend souvent de travers. Demandez un glossaire à l'utilisateur lorsque le sujet est technique.

3. Écrire les fichiers de sous-titres

SRT :

1
00:00:00,000 --> 00:00:02,400
La plupart des builds échouent le vendredi.

2
00:00:02,400 --> 00:00:05,100
Voici pourquoi.

Règles de lisibilité :

  • Maximum 2 lignes, environ 42 caractères par ligne (environ 20 pour une vidéo verticale).
  • Vitesse de lecture inférieure à 17 caractères par seconde ; durée minimale d'une réplique de 1 seconde.
  • Couper aux phrases, pas au milieu d'une phrase. Ne jamais scinder un nom entre deux répliques.
  • Les répliques ne doivent pas se chevaucher. Gardez un écart de 2 images ou aucun.

4. Incruster

# Style doux via force_style (SRT)
ffmpeg -i in.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=2,Alignment=2,MarginV=60'" -c:a copy out/captioned.mp4

# ASS donne un contrôle total (karaoké, surlignage mot, positions, animation)
ffmpeg -i in.mp4 -vf "ass=captions.ass" -c:a copy out/captioned.mp4

Piège sous Windows : dans les filtres, échappez le deux-points du lecteur et utilisez des barres obliques (subtitles='C\:/work/captions.srt'), ou exécutez FFmpeg depuis le dossier contenant le fichier et utilisez un chemin relatif.

5. Style avec surlignage mot-à-mot pour les formats courts

Générez un fichier ASS avec un événement par groupe de mots (2 à 4 mots), et utilisez la balise karaoké \k ou une surcharge de couleur par mot pour que le mot actif change de couleur. Apparence typique : police sans-serif en gras, texte blanc, contour noir de 3 à 4 px, mot actif dans une couleur d'accentuation de la marque, placé dans le tiers inférieur-milieu, pas tout en bas (l'interface utilisateur de la plateforme le cache).

En-tête ASS minimal pour commencer :

[Script Info]
ScriptType: v4.00+
PlayResX: 1080
PlayResY: 1920

[V4+ Styles]
Format: Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,OutlineColour,BackColour,Bold,Italic,Underline,StrikeOut,ScaleX,ScaleY,Spacing,Angle,BorderStyle,Outline,Shadow,Alignment,MarginL,MarginR,MarginV,Encoding
Style: Default,Arial,72,&H00FFFFFF,&H0000D7FF,&H00000000,&H64000000,-1,0,0,0,100,100,0,0,1,4,0,2,60,60,520,1

[Events]
Format: Layer,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text
Dialogue: 0,0:00:00.00,0:00:01.20,Default,,0,0,0,,{\k30}La plupart {\k40}des builds {\k30}échouent

Les couleurs dans ASS sont au format &HAABBGGRR (ordre bleu-vert-rouge, alpha en premier).

6. Livrer

  • Version incrustée pour les réseaux sociaux.
  • Un fichier .srt ou .vtt séparé pour YouTube, LinkedIn et les lecteurs web (les spectateurs peuvent activer/désactiver et traduire).
  • Piste de sous-titres douce dans MP4 : -i captions.srt -c copy -c:s mov_text.

Traduire

Traduisez le texte des répliques, pas le minutage. Respectez les limites de lignes par langue (l'allemand et le finnois sont plus longs, donc réajustez). Faites vérifier par un locuteur natif lorsque la vidéo est publique.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés