Communitygithub.com

jun7799/video-autocut

Enregistrement / montage vidéo entièrement automatisé pour tutoriels (sans剪映, sortie directe via ffmpeg) : transcription par faster-whisper avec timestamps mot par mot → correction IA des sous-titres → suppression automatique des silences, bégaiements, répétitions et erreurs → correction visuelle des passages erronés → rendu final en une seule passe.

Qu'est-ce que video-autocut ?

Cette compétence (skill) automatisée pour agents IA (compatible avec Claude Code, Cursor, Codex) permet de transformer une vidéo d'enregistrement d'écran ou de tutoriel en une vidéo prête à publier, sans passer par un éditeur vidéo classique. Elle repose sur un pipeline complet : transcription avec timestamps mot par mot via faster-whisper, correction IA des sous-titres (fautes d'homophonie, termes techniques mal reconnus), suppression automatique des silences, bégaiements, répétitions et erreurs de formulation, et ajout de bandeaux correctifs (jaunes en haut) pour les informations erronées. Le rendu final est produit directement par ffmpeg, avec sous-titres incrustés et corrections visuelles. L'utilisateur peut itérer rapidement (1 à 2 minutes) en modifiant les paramètres (taille de police, sections à supprimer, texte de correction) et en relançant le script. La skill est particulièrement utile pour les créateurs de contenu technique, les formateurs, et tout utilisateur souhaitant automatiser le montage de vidéos de démonstration ou de tutoriels.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jun7799/video-autocut/tree/HEAD

Demander à votre IA préférée

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

Documentation

Montage vidéo entièrement automatisé pour tutoriels (sans剪映)

Problème résolu

Après avoir enregistré une vidéo de tutoriel, l'utilisateur peut automatiser toute la chaîne : « transcription → correction → suppression des silences → élimination des bégaiements/répétitions → correction des erreurs → rendu final ». Pas besoin d'ouvrir剪映, le résultat est une vidéo prête à publier (sous-titres incrustés + bandeau correctif jaune en haut). Modifiez n'importe quel paramètre (taille de police, sections supprimées, texte) et relancez le script ; le coût d'itération est d'une minute.

Limite avec jianying-subtitle-fixer : celui-ci modifie le brouillon剪映 (l'utilisateur doit exporter manuellement) ; ici, ffmpeg produit directement le fichier final. Si l'utilisateur ne mentionne pas剪映, utilisez ce skill.

Dépendances environnementales (déjà prêtes)

  • Python : C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe (faster-whisper 1.2.1 + torch installés ; cache du modèle dans ~/.cache/huggingface, modèle small)
  • ffmpeg : D:\logiciel\ffmpeg\bin\ffmpeg.exe (détection automatique par le script)

Flux de travail standard (à suivre par l'IA)

Step 0  ffprobe pour obtenir la durée/résolution de la vidéo (pour adapter la taille de police ultérieurement)
Step 1  Transcription : transcribe.py -> raw.json (timestamps phrase + mot)
Step 2  Analyse IA (valeur ajoutée principale de ce skill, voir ci-dessous) -> écrit cut_plan.json
Step 3  Éléments de suppression de contenu -> AskUserQuestion pour validation utilisateur (une seule fois, pas en mode pomme)
Step 4  Rendu : render.py --plan cut_plan.json -> vidéo finale
Step 5  Vérification qualité par extraction d'images (une image par instant de correction, Read + contrôle visuel pour s'assurer que le texte est complet et ne dépasse pas)
Step 6  Livraison : rapport de ce qui a été coupé, corrigé, et emplacement du fichier

Étape 1 Commande de transcription

& "C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe" "<skill>/scripts/transcribe.py" --video "<chemin vidéo>" --outdir "<répertoire de travail>" --prompt "Tutoriel technique chinois sur XXX, YYY et autres sujets"

--prompt utilise le sujet de la vidéo + les termes fréquents (extraits du glossaire ~/.claude/skills/jianying-subtitle-fixer/config/terms.json), ce qui améliore significativement la précision des termes propres. Répertoire de travail recommandé : D:\Système de production de contenu\Montage\workspace\<date-job>\.

Étape 2 Analyse IA (étape non remplaçable par l'humain, méthodologie dans references/cut-heuristics.md)

Après avoir lu l'intégralité du raw.json, produisez quatre éléments :

  1. Correction des sous-titres fixed : corrigez une par une les erreurs d'homophonie / de termes mal reconnus. Conservez la forme orale originale, ne corrigez que les erreurs, ne reformulez pas (les sous-titres sont liés à la voix ; une réécriture provoquerait un décalage audio/vidéo). Les schémas d'erreurs de whisper sont décrits dans references.
  2. Suppression de contenu content_cuts : sections entières à supprimer (timestamp + raison), types et critères dans references. Les répétitions au niveau des mots (ex : "j'ai publié un... j'ai publié un") doivent être localisées précisément avec les timestamps des mots.
  3. deleted_ids : les IDs des sous-titres couverts par content_cuts (ces sous-titres ne seront pas inclus).
  4. Corrections corrections : paragraphes contenant des erreurs factuelles, bandeau jaune en haut de l'image. Écrivez dans cut_plan.json.

Étape 3 Validation utilisateur (principe)

  • Éléments clairement à supprimer (bégaiement, redite, phrase abandonnée) : intégrez-les directement au plan, mentionnez-les dans le rapport
  • Paragraphes avec erreurs de contenu : demandez à l'utilisateur « Supprimer / Conserver + bandeau correctif », pour les opinions privilégiez conserver + correction
  • Texte du bandeau correctif, conclusions de vérification factuelle (si nécessite une vérification en ligne, faites d'abord une WebSearch) à soumettre à l'utilisateur
  • Utilisez AskUserQuestion pour poser toutes les décisions en une seule fois

Étape 4 Commande de rendu

& "C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe" "<skill>/scripts/render.py" --plan "<répertoire de travail>/cut_plan.json"

Format cut_plan.json (l'en-tête de render.py contient une documentation complète) :

{
  "video": "C:/vidéo originale.mp4",
  "out": "C:/vidéo finale.mp4",
  "raw": "raw.json",
  "content_cuts": [[213.45, 230.98, "Expérience mal formulée"]],
  "deleted_ids": [48, 49, 50],
  "fixed": {"1": "Texte après correction"},
  "corrections": [[12.95, 20.14, "Correction : le nom correct est XX"]],
  "silence": {"min_dur": 1.0, "keep": 0.25},
  "style": {"sub_size": 64, "cor_size": 48}
}

Tous les timestamps utilisent la temporalité de la vidéo originale (le script remappe automatiquement sur la temporalité après montage). silence/style sont facultatifs. Le style des sous-titres par défaut est adapté aux grands écrans mobiles (base 2560 de largeur 64/48, mise à l'échelle automatique selon la résolution). Si l'utilisateur dit « police trop petite », ajustez les valeurs style et relancez.

Étape 5 Vérification qualité par extraction d'images

Lisez les timestamps réels des corrections dans final.ass (lignes Cor), extrayez des images selon la nouvelle temporalité :

& "D:\logiciel\ffmpeg\bin\ffmpeg.exe" -y -i "<vidéo finale>" -vf "select='eq(n\,<numéro d'image>)',scale=1100:-1" -vsync vfr "<répertoire qc>/qc_%d.jpg"

Numéro d'image = seconde × 20 ips. Lisez chaque image + contrôle visuel : texte complet, pas de débordement, pas de conflit avec les sous-titres du bas.

Pièges documentés (ne pas reproduire)

  1. Échec silencieux de aselect : sur certains flux AAC, aselect ne coupe aucune image et ne signale pas d'erreur → la suppression audio doit utiliser asplit+atrim+concat (render.py l'a déjà intégré, ne pas revenir à aselect)
  2. concat ne peut pas être placé après un select mono-flux comme assembleur (erreur de nombre de pads) ; select+setpts produit déjà une sortie continue
  3. La vérification de la vidéo finale doit faire ffprobe séparément pour les flux vidéo et audio : la durée du format peut être étirée par le flux le plus long, masquant le fait qu'« aucune coupe n'a été faite » (expérience vécue : rendu « réussi » mais audio entièrement conservé)
  4. Chemin du filtre subtitles : utilisez un chemin relatif si l'ass est dans le même répertoire de travail que le rendu, pour éviter les problèmes d'échappement des chemins chinois
  5. La suppression du silence doit utiliser une zone de protection des mots (strip_guard intégré dans render.py) : les timestamps des mots de whisper et ceux de silencedetect peuvent différer ; les mots doux (ex : termes anglais en début de phrase) peuvent tomber dans une « zone de silence », et une coupure directe sur le silence pourrait trancher le mot
  6. Le script de transcription gère l'encodage GBK de stderr de ffmpeg (problème récurrent sous Windows, ignorez simplement les erreurs de ce thread)

Coût d'itération

Modifier la taille de police / le texte de correction / ajouter ou supprimer des sections de coupe → modifiez les champs correspondants dans cut_plan.json et relancez render.py, une fois prend 1 à 2 minutes. La vidéo finale est écrasée, la vidéo originale n'est jamais modifiée.

Skills associés