Communitygithub.com

omniharmonic/agentic-video-editor

Générer, vérifier et graver des sous-titres (fichier SRT + ASS stylisé) pour un montage brut, final, sélection ou court, ou reconstruire des SRT exacts en retranscrivant une vidéo rendue. À utiliser après le montage (brut ou ultérieur) et avant le rendu final, quand l'utilisateur demande des sous-titres, des sous-titres style karaoké pour vidéos courtes, ou une vérification des sous-titres.

Qu'est-ce que agentic-video-editor ?

Cette compétence automatise entièrement le workflow de sous-titrage pour les projets vidéo pilotés par un agent d'IA (comme Claude Code, Cursor ou Codex). Elle permet de générer, vérifier et graver des sous-titres dans des formats SRT et ASS (Advanced SubStation Alpha) à partir d'une transcription et d'un montage existants, en respectant des règles de style configurables (podcast, court, minimal). Les sous-titres sont calculés en mappant `work/transcript.json` sur les segments de dialogue du montage – les mots supprimés et les bruits de fond ne sont pas sous-titrés. La compétence prend en charge différents stages (brut, final, sélection) et peut graver les sous-titres directement dans la vidéo finale via ffmpeg, sans impliquer Resolve. Elle offre également une commande de vérification (`check`) qui valide les fichiers SRT et ASS selon des règles typographiques (longueur de ligne, temps de lecture, chevauchements) et une commande de retranscription (`retranscribe`) qui utilise FluidAudio Parakeet ou whisper.cpp pour produire des sous-titres parfaitement synchronisés avec la vidéo rendue. Enfin, elle permet d'ajuster les styles par épisode via des fichiers YAML et d'ajouter un glossaire pour corriger la casse des noms propres. Idéale pour les créateurs de contenu, les monteurs vidéo et les workflows d'édition automatisés.

Compatible avec~Claude Code✓Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/omniharmonic/agentic-video-editor/tree/HEAD/skills/ave-captions

Demander à votre IA préférée

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

Documentation

Sous-titres

Les sous-titres sont calculés à partir de work/transcript.json mis en correspondance avec les segments de dialogue du montage (les mots supprimés disparaissent, les bruits de fond ne sont jamais sous-titrés), segmentés selon les règles de config/captions.styles.yaml, écrits sous forme de fichiers bruts et gravés par ffmpeg. Resolve n'est pas impliqué.

Commandes

ave captions <ep> --stage rough --style podcast        # -> captions/rough.srt + .ass, NOUVEAU edits/rough.vN.json avec les sous-titres définis
ave captions <ep> --stage rough --name s2              # montage d'une session (identique à --stage rough:s2) -> captions/rough.s2.srt, NOUVEAU rough.s2.vN.json
ave captions <ep> --stage select:<name> --style short  # clip vertical : karaoké ASS (\kf par mot), bloc à 65 % de hauteur
ave captions <ep> --stage final --burn [--video exports/final.mp4]   # grave aussi dans le rendu -> <video>.captions.mp4
ave captions check <ep> captions/rough.srt             # exit 1 + JSON des problèmes si une règle est violée (SRT ou ASS)
ave captions retranscribe <ep> exports/final.mp4 [--srt-out f.srt] [--asr whisper] [--diarize]

Styles : podcast (centré en bas, blanc, contour fin), short (gras, surbrillance du mot, zone de sécurité dégagée des 25 % inférieurs et des 120 px de droite en 1080 de large), minimal (petit, discret). Les tailles sont des fractions du canvas, donc le même style est correct à 1920x1080 et 1080x1920. Ajustez les nombres dans le YAML, ou remplacez-les par épisode dans <ep>/policy/captions.styles.yaml (fusion profonde).

Évaluation du résultat

  1. Lisez les problems dans le JSON. Types : line_too_long, too_many_lines, orphan_line, too_short, too_long, reading_speed, overlap, empty. reading_speed sur une zone de texte coincée entre deux autres est réel (parleur rapide) : dites-le à l'humain, ne le cachez pas.
  2. Lisez le SRT. Vérifiez que les coupures tombent sur la ponctuation ou les propositions, pas au milieu d'une phrase (« la plu / part »). Si beaucoup sont mauvaises, ajustez avoid_ending_with/clause_starters dans le YAML plutôt que d'éditer le fichier à la main.
  3. REGARDEZ une image avec les sous-titres gravés (ave frame sur la vidéo gravée) : texte lisible sur des images chargées, dans la zone de sécurité, ne recouvrant pas un tiers inférieur.
  4. Noms propres : ajoutez-les dans episode.json glossary et relancez. Soit {"glossary": {"open ai": "OpenAI"}} (faux -> vrai, mots multiples acceptés) soit une liste de noms correctement capitalisés ["Maren", "Cloudflare"] (correspondance insensible à la casse). Évitez de lister des noms qui sont aussi des mots courants.
  5. drop_fillers (euh, hum...) sont entendus mais pas sous-titrés par défaut ; définissez drop_fillers: [] pour une transcription textuelle.

Processus de rendu final

Le timing des sous-titres dépend du montage final. Après l'approbation du montage : effectuez le rendu, puis ave captions retranscribe sur le rendu et utilisez ce SRT comme fichier sidecar (mots et timing exacts tels qu'entendus). Le moteur ASR est FluidAudio Parakeet ; s'il n'est pas construit, la commande utilise whisper.cpp en repli et le mentionne dans warnings. Vérifiez les noms mal entendus dans le SRT retranscrit avant publication.

Modes de défaillance

  • Le SRT retranscrit semble en minuscules, sans ponctuation, avec des zones de 5 s et des décalages de plusieurs secondes : c'est le repli vers whisper.cpp (FluidAudio introuvable ; dans un worktree, définissez AVE_FLUIDAUDIO). Relancez ave captions retranscribe ... --asr fluidaudio --srt-out <nouveau fichier>. Mesuré sur un épisode réel : whisper médiane 0,55 s en avance (p10 1,4 s), Parakeet à moins de 0,13 s.
  • Avertissement de police dans le JSON : la police préférée du style n'est pas installée ; le système utilise une police de repli (ne plante jamais). Regroupez une police OFL dans motion-kit/brand/fonts pour garantir un rendu identique sur toutes les machines.
  • No speech falls inside this edit's dialogue : le montage ne contient que des bruits de fond ou la transcription est manquante ; exécutez d'abord ave transcribe.
  • La taille de la vidéo gravée diffère du canvas du document (par exemple un proxy) : l'ASS est régénéré automatiquement à la taille réelle de la vidéo.
  • N'écrasez jamais un montage existant : chaque exécution crée le vN suivant. Les fichiers de sous-titres dans captions/ sont dérivés et sont remplacés.

Point de contrôle

Arrêtez-vous et montrez à l'humain le choix du style et une image gravée avant de graver un fichier final complet ou de publier des vidéos courtes.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills associés