Communitygithub.com

Éditeur vidéo

À utiliser lorsque l'utilisateur souhaite éditer, créer, rogner, compresser, fusionner, redimensionner, modifier la vitesse, stabiliser, ajouter des transitions, transcrire, ajouter des sous-titres, créer des cartes-titres, des tiers inférieurs, des cartes de fin, réaliser des bandes-annonces, extraire des vignettes, créer des GIFs, ajouter des filigranes, manipuler l'audio ou traiter des fichiers vidéo de quelque manière que ce soit.

Qu'est-ce que Éditeur vidéo ?

Cette compétence d'agent IA spécialisée dans le montage vidéo combine trois moteurs puissants : ffmpeg pour le montage et la manipulation de séquences existantes (rogner, compresser, fusionner, redimensionner, modifier la vitesse, stabiliser, ajouter des filigranes, manipuler l'audio, créer des GIFs et des vignettes) ; Remotion pour la création de nouveau contenu vidéo animé (cartes-titres, tiers inférieurs, cartes de fin, bandes-annonces et superpositions animées) ; et Whisper pour la transcription et la génération de sous-titres. Elle est conçue pour être utilisée avec Claude Code, Cursor ou d'autres agents de codage IA sur macOS, en particulier sur Apple Silicon où elle exploite l'accélération matérielle via h264_videotoolbox/hevc_videotoolbox. La compétence guide l'utilisateur à travers un flux de travail structuré : elle vérifie d'abord les outils disponibles (ffmpeg, Node.js, Whisper), puis classifie la demande de l'utilisateur en montage ffmpeg, création Remotion, transcription, ou pipeline combiné. Pour chaque étape, elle construit les commandes appropriées, explique les options en langage clair, et gère les conflits de fichiers de sortie sans jamais écraser la source. Elle intègre également des thèmes provenant de fichiers JSON locaux et propose des préréglages de plateforme (YouTube, Instagram, TikTok, etc.) pour des rendus optimisés. L'ensemble des commandes, exemples et flux de travail détaillés est fourni dans la documentation SKILL.md.

Compatible avec~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/ElSalvatore-sys/video-editor-plugin/tree/main/skills/video-editor

Demander à votre IA préférée

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

Documentation

Que fait Éditeur vidéo ?

Aperçu

Flux de travail vidéo assisté par IA, propulsé par trois moteurs :

  • ffmpeg -- éditer les séquences existantes (rogner, compresser, fusionner, redimensionner, vitesse, stabiliser, filigrane, audio, GIF, vignette, transitions, sous-titres)
  • Remotion -- créer du nouveau contenu vidéo (cartes-titres, tiers inférieurs, cartes de fin, bandes-annonces, superpositions animées)
  • Whisper -- transcription et génération de sous-titres

Capacités supplémentaires :

  • Accélération matérielle sur Apple Silicon via h264_videotoolbox / hevc_videotoolbox
  • Intégration de thèmes avec les actifs de conception depuis ~/design-assets/color-palettes/
  • Préréglages de plateforme pour YouTube, Instagram, TikTok, Twitter, et plus
  • Cache d'espace de travail pour Remotion afin d'éviter les npm install répétés

Quand l'utiliser

Déclencher sur N'IMPORTE LEQUEL de ces intents utilisateur :

CatégorieMots-clés
Édition de baserogner, couper, clip, raccourcir, diviser
Compressioncompresser, réduire la taille, diminuer, plus petit, optimiser
Fusionfusionner, combiner, concaténer, joindre, assembler
Redimensionnementredimensionner, mettre à l'échelle, recadrer, remplir, rapport d'aspect, portrait, paysage, carré
Vitesseaccélérer, ralentir, ralenti, timelapse, avance rapide, inverser
Stabilisationstabiliser, tremblant, lisser, corriger les secousses
Transitionsfondu, fondu enchaîné, dissolution, transition, wipe
Sous-titressous-titre, SRT, transcrire, parole-texte, légende
Cartes-titrescarte-titre, intro, ouverture, texte animé
Tiers inférieurstiers inférieur, étiquette-nom, chyron, barre de nom
Cartes de fincarte de fin, outro, écran de fin, fermeture
Bandes-annoncesbande-annonce, teaser, promo, compil de meilleurs moments, montage
Vignettesvignette, poster, extraire image, capture d'écran
GIFsGIF, image animée, boucle, meme
Filigranesfiligrane, superposition de logo, branding
Audioaudio, volume, normaliser, intensité sonore, muet, fondu entrée, fondu sortie, mixer, extraire audio
Infosinfos, détails, durée, résolution, codec, débit binaire, métadonnées
Pipelinepipeline, lot, flux de travail, multi-étape
PlateformeYouTube, Instagram, TikTok, Twitter, Reels, Shorts

Référence des commandes

Commandes d'édition (ffmpeg)

CommandeDescriptionExemple
/trimCouper un segment d'une vidéo"rogner video.mp4 de 0:30 à 1:45"
/compressRéduire la taille du fichier avec contrôle de qualité"compresser pour faire moins de 10 Mo"
/mergeCombiner plusieurs clips en un seul"fusionner clip1.mp4 et clip2.mp4 avec fondu"
/resizeChanger les dimensions, le rapport d'aspect, recadrer ou remplir"redimensionner en carré 1080x1080"
/speedAccélérer, ralentir ou inverser"vitesse 2x" ou "ralenti 0.5x"
/stabilizeSupprimer les tremblements de caméra (vidstab en deux passes)"stabiliser shaky.mp4"
/watermarkSuperposer une image ou du texte sur la vidéo"ajouter logo.png en bas à droite"
/audioVolume, normaliser, mixer, fondu, extraire, muet"normaliser l'audio à -14 LUFS"
/thumbnailExtraire une image"vignette à 0:15"
/gifCréer un GIF animé à partir d'un segment vidéo"GIF de 0:05 à 0:10 à 320px"
/extractExtraire les pistes audio ou de sous-titres"extraire l'audio en mp3"
/infoAfficher les métadonnées vidéo et les détails des flux"info video.mp4"

Commandes de création (Remotion)

CommandeDescriptionExemple
/title-cardCarte-titre animée avec support des thèmes"carte-titre : Coming Soon, thème wad, animation zoom"
/lower-thirdSuperposition animée de nom/titre"tiers inférieur : John Doe, PDG, style moderne"
/end-cardOutro animé avec CTA et réseaux sociaux"carte de fin : Abonnez-vous!, @handle, thème ea"
/teaserMontage multi-clips avec transitions et titres"bande-annonce depuis le dossier clips/, 30 secondes"

Commandes de transcription (Whisper)

CommandeDescriptionExemple
/transcribeGénérer un fichier SRT/VTT à partir de la parole"transcrire interview.mp4"
/add-captionsTranscrire + graver les sous-titres sur la vidéo"ajouter des sous-titres à talk.mp4"

Orchestration

CommandeDescriptionExemple
/pipelineChaîne de traitement multi-étapes"rogner, ajouter une carte-titre, compresser pour Instagram"

Flux de travail

Étape 1 : Vérifier les outils disponibles

which ffmpeg ffprobe && echo "ffmpeg : ok"
node --version && echo "node : ok"
which whisper && echo "whisper : ok" || echo "whisper : non installé (les sous-titres nécessitent un fichier .srt manuel)"
ffmpeg -encoders 2>/dev/null | grep videotoolbox && echo "accélération matérielle : ok" || echo "accélération matérielle : non disponible"
ffmpeg -filters 2>/dev/null | grep vidstab && echo "vidstab : ok" || echo "vidstab : non disponible (brew install ffmpeg avec --with-libvidstab)"

Si ffmpeg est manquant : "Installer avec brew install ffmpeg" Si Node.js est manquant : "Installer depuis https://nodejs.org ou brew install node" Si vidstab est manquant : "Réinstaller ffmpeg avec vidstab : brew install ffmpeg --with-libvidstab"

Étape 2 : Classifier la demande

Intent utilisateurMoteurChemin
Éditer des séquences existantesffmpegÉtape 3a
Créer du nouveau contenu vidéoRemotionÉtape 3b
Manipulation audiofiltres audio ffmpegÉtape 3a
Information/inspectionffprobeÉtape 3a
Pipeline combinéorchestrer les deuxÉtape 3c
Publication sur plateformepréréglages redimensionnement + compressionÉtape 3a
TranscriptionWhisper + ffmpegÉtape 3a

Étape 3a : Chemin ffmpeg

  1. Demander le(s) fichier(s) d'entrée s'ils ne sont pas fournis
  2. Inspecter avec ffprobe :
    ffprobe -v quiet -print_format json -show_format -show_streams "<fichier>"
    
  3. Détection de l'accélération matérielle (macOS Apple Silicon) :
    # Vérifier le support VideoToolbox
    ffmpeg -encoders 2>/dev/null | grep h264_videotoolbox
    # Si disponible, préférer : -c:v h264_videotoolbox -b:v 5M
    # Repli : -c:v libx264 -crf 23 -preset medium
    
  4. Gestion des collisions de sortie :
    # Avant d'écrire la sortie, vérifier si le fichier existe
    # Si "trimmed_video.mp4" existe, utiliser "trimmed_video_2.mp4", "trimmed_video_3.mp4", etc.
    SORTIE="trimmed_video.mp4"
    COMPTEUR=2
    while [ -f "$SORTIE" ]; do
      SORTIE="trimmed_video_${COMPTEUR}.mp4"
      COMPTEUR=$((COMPTEUR + 1))
    done
    
  5. Construire la commande ffmpeg
  6. Expliquer chaque option en langage clair
  7. Indiquer le nom du fichier de sortie (ne jamais écraser la source)
  8. Demander : "Dois-je exécuter cette commande ?"
  9. Exécuter, puis vérifier :
    # Vérifier le code de sortie
    if [ $? -eq 0 ]; then
      echo "Succès"
      ffprobe -v quiet -print_format json -show_format "$SORTIE" | grep -E '"duration"|"size"'
    else
      echo "Erreur - vérifiez la sortie ffmpeg ci-dessus"
    fi
    
  10. Rapporter le chemin de sortie + taille du fichier + durée

Conventions de nommage des sorties :

CommandeModèle de sortie
Rognerrogne_<nomfichier>
Compressercompresse_<nomfichier>
Fusionnerfusionne_sortie.<ext>
Redimensionnerredimensionne_<nomfichier>
Vitessevitesse_<facteur>x_<nomfichier>
Stabiliserstabilise_<nomfichier>
Filigranefiligrane_<nomfichier>
Sous-titressous-titres_<nomfichier>
Extraction audio<nom>.mp3
Audio modifiéaudio_<nomfichier>
Extraction sous-titres<nom>.srt
Vignettevignette_<nom>_<timecode>.jpg
GIF<nom>.gif

Étape 3b : Chemin Remotion

  1. Vérifier que Node.js est installé
  2. Cache d'espace de travail -- réutiliser un espace de travail existant :
    ESPACE_TRAVAIL="/tmp/remotion-workspace"
    if [ -d "$ESPACE_TRAVAIL/node_modules" ]; then
      echo "Réutilisation de l'espace de travail Remotion en cache"
    else
      echo "Création de l'espace de travail Remotion (première exécution)..."
      mkdir -p "$ESPACE_TRAVAIL"
      cp -r ~/project-templates/remotion-video/* "$ESPACE_TRAVAIL/"
      cd "$ESPACE_TRAVAIL" && npm install
    fi
    
  3. Chargement du thème depuis ~/design-assets/color-palettes/ :
    # Si l'utilisateur spécifie un thème (wad, bloghead, ea), charger les couleurs depuis le JSON
    # Les passer en tant que inputProps à la composition Remotion
    
  4. Écrire ou mettre à jour les fichiers source de la composition selon les besoins
  5. Compositions disponibles :
    • TitleCard -- titre animé avec plusieurs préréglages d'animation
    • LowerThird -- superposition nom/titre avec barre d'accent
    • EndCard -- outro avec CTA, réseaux sociaux, logo
    • Teaser -- montage multi-clips avec TransitionSeries
  6. Rendu :
    cd "$ESPACE_TRAVAIL"
    npx remotion render src/index.ts <IdComposition> /chemin/vers/sortie.mp4 \
      --props='{"text":"Titre","bg":"#09090B","fg":"#FFFFFF","accent":"#7C3AED"}'
    
  7. Copier la sortie dans le répertoire de travail de l'utilisateur
  8. Rapporter le chemin de sortie + durée

Étape 3c : Pipeline combiné

Pour les demandes multi-étapes (ex : "créer une bande-annonce avec carte-titre, clips et carte de fin") :

  1. Planifier -- décrire chaque étape à l'utilisateur avant d'exécuter
  2. Créer -- générer d'abord tout contenu Remotion (cartes-titres, cartes de fin)
  3. Traiter -- rogner/redimensionner les clips source avec ffmpeg
  4. Assembler -- fusionner toutes les pièces avec des transitions en utilisant ffmpeg
  5. Finaliser -- compresser pour la plateforme cible si spécifiée
  6. Confirmer entre les phases majeures (création vs. édition vs. assemblage)

Référence rapide ffmpeg

Rogner (sans perte)

ffmpeg -ss <début> -to <fin> -i entree.mp4 -c copy rogne_entree.mp4

Compresser -- web (CRF 23)

ffmpeg -i entree.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k compresse_entree.mp4

Compresser -- accélération matérielle (macOS)

ffmpeg -i entree.mp4 -c:v h264_videotoolbox -b:v 5M -c:a aac -b:a 128k compresse_entree.mp4

Fusionner avec transition fondu

# Deux clips avec 1s de fondu enchaîné à offset = durée_clip1 - 1
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0][1]xfade=transition=fade:duration=1:offset=<offset>,format=yuv420p[v];[0:a][1:a]acrossfade=d=1[a]" \
  -map "[v]" -map "[a]" fusionne_sortie.mp4

Redimensionner / Mettre à l'échelle

# Mettre à l'échelle à des dimensions spécifiques (conserver le rapport d'aspect avec -1)
ffmpeg -i entree.mp4 -vf "scale=1920:1080" redimensionne_entree.mp4
ffmpeg -i entree.mp4 -vf "scale=1080:-1" redimensionne_entree.mp4

# Recadrer au centre en carré
ffmpeg -i entree.mp4 -vf "crop=min(iw\,ih):min(iw\,ih)" recadre_entree.mp4

# Remplir pour atteindre le rapport d'aspect cible (letterbox/pillarbox)
ffmpeg -i entree.mp4 -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" rempli_entree.mp4

Changement de vitesse

# 2x vitesse (vidéo + audio)
ffmpeg -i entree.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" vitesse_2x_entree.mp4

# 0.5x ralenti
ffmpeg -i entree.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" vitesse_0.5x_entree.mp4

# 4x vitesse (enchaîner atempo pour >2x audio : atempo max est 2.0)
ffmpeg -i entree.mp4 -vf "setpts=0.25*PTS" -af "atempo=2.0,atempo=2.0" vitesse_4x_entree.mp4

# Inverser
ffmpeg -i entree.mp4 -vf "reverse" -af "areverse" inverse_entree.mp4

Superposition de filigrane

# En bas à droite avec remplissage
ffmpeg -i entree.mp4 -i logo.png \
  -filter_complex "overlay=W-w-20:H-h-20" filigrane_entree.mp4

# En haut à gauche
ffmpeg -i entree.mp4 -i logo.png \
  -filter_complex "overlay=20:20" filigrane_entree.mp4

# Au centre avec opacité
ffmpeg -i entree.mp4 -i logo.png \
  -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.3[wm];[0][wm]overlay=(W-w)/2:(H-h)/2" filigrane_entree.mp4

# Filigrane texte
ffmpeg -i entree.mp4 \
  -vf "drawtext=text='Ma Marque':fontsize=24:[email protected]:x=W-tw-20:y=H-th-20" filigrane_entree.mp4

Stabilisation vidéo (vidstab en deux passes)

# Passe 1 : Analyser le mouvement
ffmpeg -i tremblante.mp4 -vf vidstabdetect=shakiness=10:accuracy=15 -f null -

# Passe 2 : Appliquer la stabilisation
ffmpeg -i tremblante.mp4 -vf vidstabtransform=smoothing=30:input=transforms.trf stabilise_tremblante.mp4

Manipulation audio

# Ajuster le volume
ffmpeg -i entree.mp4 -af "volume=1.5" audio_entree.mp4

# Normaliser l'intensité sonore (standard diffusion -14 LUFS)
ffmpeg -i entree.mp4 -af "loudnorm=I=-14:TP=-1:LRA=11" audio_entree.mp4

# Mixer deux pistes audio
ffmpeg -i video.mp4 -i musique.mp3 \
  -filter_complex "[0:a]volume=1.0[a1];[1:a]volume=0.3[a2];[a1][a2]amix=inputs=2:duration=first[a]" \
  -map 0:v -map "[a]" audio_entree.mp4

# Fondu entrée/sortie audio (3s fondu entrée, 3s fondu sortie)
ffmpeg -i entree.mp4 -af "afade=t=in:ss=0:d=3,afade=t=out:st=<fin-3>:d=3" audio_entree.mp4

# Mettre l'audio en sourdine
ffmpeg -i entree.mp4 -an muet_entree.mp4

# Remplacer l'audio
ffmpeg -i entree.mp4 -i nouvelle_piste.mp3 -c:v copy -map 0:v:0 -map 1:a:0 remplace_audio_entree.mp4

Création de GIF (palette en deux passes pour la qualité)

# Passe 1 : Générer la palette
ffmpeg -ss <début> -t <durée> -i entree.mp4 \
  -vf "fps=15,scale=320:-1:flags=lanczos,palettegen" palette.png

# Passe 2 : Créer le GIF avec la palette
ffmpeg -ss <début> -t <durée> -i entree.mp4 -i palette.png \
  -filter_complex "[0:v]fps=15,scale=320:-1:flags=lanczos[v];[v][1:v]paletteuse" sortie.gif

# Nettoyage
rm palette.png

Extraction de vignette

# Image unique à un instant donné
ffmpeg -ss <instant> -i entree.mp4 -frames:v 1 -q:v 2 vignette_entree_<instant>.jpg

# Grille de vignettes (4x4)
ffmpeg -i entree.mp4 -vf "fps=1/<intervalle>,scale=320:-1,tile=4x4" grille_vignettes_entree.jpg

Graver des sous-titres .srt

ffmpeg -i entree.mp4 -vf "subtitles=sous-titres.srt:force_style='FontSize=24,PrimaryColour=&H00FFFFFF'" sous-titres_entree.mp4

Extraire l'audio

ffmpeg -i entree.mp4 -vn -c:a libmp3lame -q:a 2 sortie.mp3

Infos vidéo

ffprobe -v quiet -print_format json -show_format -show_streams entree.mp4

Référence rapide Remotion

Configuration de l'espace de travail en cache

ESPACE_TRAVAIL="/tmp/remotion-workspace"
if [ ! -d "$ESPACE_TRAVAIL/node_modules" ]; then
  cp -r ~/project-templates/remotion-video/* "$ESPACE_TRAVAIL/"
  cd "$ESPACE_TRAVAIL" && npm install
fi

Composition TitleCard

import { AbsoluteFill, spring, useCurrentFrame, useVideoConfig, Img } from 'remotion';

type Animation = 'fade' | 'slide-up' | 'slide-down' | 'zoom' | 'typewriter' | 'glitch' | 'blur-in';

export const TitleCard: React.FC<{
  text: string;
  subtitle?: string;
  bg?: string;
  fg?: string;
  accent?: string;
  animation?: Animation;
  logo?: string;
}> = ({ text, subtitle, bg = '#09090B', fg = '#FFFFFF', accent = '#7C3AED', animation = 'fade', logo }) => {
  const frame = useCurrentFrame();

  // ... [tronqué pour la traduction] ...

Référence rapide Whisper

Transcription

whisper "entree.mp4" --model base --output_dir ./transcriptions --language fr

Génération de sous-titres

whisper "entree.mp4" --model base --output_dir ./sous-titres --language fr --task transcribe

Gestion des erreurs

ffmpeg : codec non trouvé

Erreur : Aucun codec trouvé pour le format de sortie spécifié.
Causes possibles : format non pris en charge, ou pilote manquant.
Solution : 
- Vérifier le format avec `ffprobe -v quiet -print_format json -show_format <fichier>`
- Utiliser un format courant (mp4, mov, webm)

ffmpeg : fichier non trouvé

Erreur : Impossible d'ouvrir le fichier d'entrée.
Solution : Vérifier que le fichier existe et que le chemin est correct.

Remotion : échec de la compilation

Erreur : Échec de la compilation du fichier source.
Causes possibles : erreur de syntaxe TypeScript, import manquant, ou dépendance cassée.
Solutions :
- Vérifier le message d'erreur pour la ligne spécifique
- Si lié à un import, vérifier que le package est dans package.json
- Si lié à une dépendance, exécuter `npm install` à nouveau

Whisper : fichier audio trop long

Erreur : Le fichier audio dépasse la longueur maximale prise en charge (30 secondes pour le modèle tiny, 60 pour base).
Solution : 
- Utiliser un modèle plus grand (`small`, `medium`, `large`)
- Découper l'audio avec ffmpeg : `ffmpeg -i entree.mp4 -vn -c:a pcm_s16le extrait_audio.wav -ss 0 -t 30`

Meilleures pratiques

  1. Toujours vérifier les outils disponibles avant de commencer tout flux de travail.
  2. Ne jamais écraser les fichiers source ; utiliser les conventions de nommage de sortie.
  3. Informer l'utilisateur des options avant d'exécuter des commandes longues ou destructrices.
  4. Utiliser l'accélération matérielle si disponible pour des rendus plus rapides.
  5. Pour les pipeline multi-étapes, confirmer chaque phase avant de passer à la suivante.
  6. Pour la création Remotion, utiliser le cache d'espace de travail pour éviter les téléchargements npm répétés.
  7. Pour la transcription, spécifier la langue pour une meilleure précision.
  8. Toujours vérifier le résultat après une opération pour s'assurer du succès.

Exemples de flux de travail

Exemple 1 : Créer une vidéo promotionnelle courte

  1. L'utilisateur dit : "Crée une bande-annonce de 30 secondes avec une carte-titre, deux clips et une carte de fin"
  2. L'agent planifie le pipeline
  3. Phase 1 (Création Remotion) : Générer la carte-titre et la carte de fin
  4. Phase 2 (Édition ffmpeg) : Rogner les clips source comme spécifié
  5. Phase 3 (Assemblage) : Fusionner carte-titre + clips + carte de fin avec des fondus
  6. Phase 4 (Finalisation) : Compresser pour la plateforme cible (ex. TikTok 1080x1920)
  7. Résultat : Vidéo promotionnelle de 30 secondes avec transitions fluides

Exemple 2 : Ajouter des sous-titres à une interview

  1. L'utilisateur fournit un fichier : "Ajoute des sous-titres à interview.mp4"
  2. L'agent vérifie Whisper
  3. Transcrit la piste audio avec Whisper
  4. Graver les sous-titres sur la vidéo avec ffmpeg
  5. Après vérification, l'agent propose de télécharger la vidéo sous-titrée

Skills associés