Video Editor Full — Skill de post-production vidéo full-stack
Skill de post-production vidéo tout-en-un intégrant 6 outils majeurs. De l’enregistrement brut au produit final, le tout piloté par IA.
Matrice des compétences
| Module | Outil | Utilisation | Dépendance |
|---|---|---|---|
| Transcription | Whisper (base/small/medium) | Voice → SRT | Python + openai-whisper |
| Suppression silences | auto-editor | Jump cut automatique des silences | Python + auto-editor |
| Montage précis | ffmpeg filter_complex | Loupe PIP, titres de chapitres, accélération, surlignage drawbox | ffmpeg 7.0+ |
| Sous-titres | ffmpeg subtitles filter | Incrustation SRT (support chinois YaHei) | ffmpeg + police |
| Animations | Remotion | Intro/outro, visualisation de données, graphiques animés | Node.js 18+ + Remotion |
| Vidéo de marque | HyperFrames | HTML/CSS→Vidéo, avatar numérique IA | Node.js + clé API HeyGen |
Aperçu du flux de travail
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Vidéo brute │────▶│ Analyse & │────▶│ Planification │
│ │ │ Transcription│ │ du contenu │
└─────────────┘ └──────────────┘ └─────────────────┘
│
┌──────────────────────────────┼──────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ auto-editor │ │ ffmpeg montage │ │ Remotion │
│ Suppression │ │ PIP+chapitre+ │ │ Intro/outro │
│ silences │ │ accélération │ │ │
└──────┬───────┘ └────────┬────────┘ └──────┬───────┘
│ │ │
└─────────────────────────────┼───────────────────┘
▼
┌─────────────────┐
│ Incrustation │
│ sous-titres │
│ + export final │
└─────────────────┘
Prérequis
# Obligatoire
pip install openai-whisper auto-editor
# ffmpeg doit être dans le PATH (recommandé 7.0+)
ffmpeg -version
# Optionnel : Remotion (animations intro/outro)
npx create-video@latest --blank
# Optionnel : HyperFrames (vidéo de marque)
# Nécessite une clé API HeyGen, voir templates/hyperframes-config.example.json
Détail des modules
Module 1 : Analyse & Transcription
Étape 1 : Métadonnées vidéo
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
À surveiller : résolution, framerate, durée, codec, débit.
Étape 2 : Extraction d’images clés (toutes les 5 secondes)
mkdir -p frames
ffmpeg -i input.mp4 -vf "fps=1/5" -q:v 2 frames/frame_%03d.jpg
Analyse visuelle pour identifier les zones UI importantes, les limites de chapitres, les cibles pour la loupe.
Étape 3 : Transcription Whisper
import whisper
model = whisper.load_model("base") # Pour le chinois, base suffit ; medium est plus précis mais plus lent
result = model.transcribe("audio.wav", language="zh")
Après génération du SRT, vérification manuelle obligatoire :
- Noms propres (produits, termes techniques)
- Alignement temporel (surtout en fin de vidéo, sujet à dérive)
- Erreurs homophoniques
Module 2 : Suppression des silences avec auto-editor
# Utilisation de base : supprime tous les silences
auto-editor input.mp4 --margin 0.2s --output no_silence.mp4
# Mode conservateur : ne supprime que les silences de plus d’1 seconde
auto-editor input.mp4 --min-clip-length 1s --margin 0.3s --output no_silence.mp4
# Export de la timeline (sans rendu direct, pour montage ffmpeg ultérieur)
auto-editor input.mp4 --export timeline:api
Attention : auto-editor modifie la timeline vidéo. Les sous-titres doivent être générés ou réalignés après cette étape.
Ordre recommandé : Vidéo brute → auto-editor → Transcription/réalignement des sous-titres → Montage ffmpeg
Module 3 : Montage précis ffmpeg (cœur du skill)
3.1 Loupe PIP (picture-in-picture)
# Point clé : forcer le ratio d’aspect avec force_original_aspect_ratio pour éviter l’étirement
PIP_W, PIP_H = 300, 188 # Taille de la fenêtre PIP
# Extrait filter_complex :
# crop → scale (conserve le ratio) → pad (ajoute des bords noirs) → drawbox (cadre jaune)
f"[pip{i}]crop={cw}:{ch}:{cx}:{cy},"
f"scale={PIP_W}:{PIP_H}:force_original_aspect_ratio=decrease,"
f"pad={PIP_W}:{PIP_H}:(ow-iw)/2:(oh-ih)/2:color=0x1a1a2e,"
f"drawbox=x=0:y=0:w={PIP_W}:h={PIP_H}:color=yellow:t=2"
f"[pip{i}s]"
3.2 Titres de chapitres (drawtext avec fondu)
# Affichage du titre au point de transition du chapitre, avec fondu entrée/sortie
f"drawtext=text='{title}':"
f"fontfile='C\:/Windows/Fonts/msyh.ttc':"
f"fontsize=28:fontcolor=white:borderw=3:[email protected]:"
f"x=(w-text_w)/2:y=30:"
f"alpha='if(lt(t,{start}),0,if(lt(t,{start}+0.4),(t-{start})/0.4,"
f"if(lt(t,{end}-0.4),1,if(lt(t,{end}),({end}-t)/0.4,0))))':"
f"enable='between(t,{fade_in},{fade_out})'"
3.3 Accélération
# Accélération vidéo
f"[vout]setpts=PTS/{SPEED}[vfinal]"
# Accélération audio (atempo : 0.5-2.0, au-delà il faut chaîner)
f"[0:a]atempo={SPEED}[afinal]"
3.4 Synchronisation des sous-titres
Après accélération, les timestamps des sous-titres doivent être ajustés :
new_start = original_start / SPEED
new_end = original_end / SPEED
3.5 Template de construction complet
Voir scripts/build_template.py
Module 4 : Animations Remotion
Idéal pour générer des intros, outros, transitions animées et visualisations de données.
# Initialisation d’un projet Remotion
npx create-video@latest my-intro --blank
# Écriture de l’animation dans src/Composition.tsx
# Rendu en MP4
npx remotion render src/index.ts MyComp out/intro.mp4
Les clips générés sont ensuite concaténés à la vidéo principale avec ffmpeg :
# Liste de concaténation
echo "file 'intro.mp4'" > list.txt
echo "file 'main.mp4'" >> list.txt
echo "file 'outro.mp4'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy final.mp4
Installation du skill Remotion Agent :
# Skill officiel (recommandé)
git clone https://github.com/remotion-dev/skills.git ~/.claude/skills/remotion
Module 5 : Vidéo de marque HyperFrames
Convertit du HTML/CSS/JS en images vidéo, parfait pour les marques et la transformation de sites web en vidéo.
# Installation
npm install @anthropic-ai/hyperframes
# Utilisation de base : HTML → MP4
npx hyperframes render --input composition.html --output brand.mp4
Une clé API HeyGen est nécessaire pour utiliser la fonctionnalité d’avatar numérique.
Le modèle de configuration se trouve dans templates/hyperframes-config.example.json.
Module 6 : Export final
Incrustation des sous-titres (dernière étape)
ffmpeg -y -i video_no_sub.mp4 \
-vf "subtitles='srt_path':force_style='FontSize=13,FontName=Microsoft YaHei,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,Outline=2,Shadow=1,MarginV=22,Bold=1'" \
-c:v libx264 -preset slow -crf 17 \
-c:a copy -pix_fmt yuv420p -movflags +faststart \
output.mp4
Export multiplateforme
| Plateforme | Résolution | Ratio | Limite de durée |
|---|---|---|---|
| YouTube | 1920x1080 | 16:9 | Aucune |
| WeChat Video | 1080x1920 | 9:16 | 60s (recommandé) |
| Xiaohongshu | 1080x1350 | 4:5 | 5min |
| Twitter/X | 1280x720 | 16:9 | 2:20 |
| 1920x1080 | 16:9 | 10min |
# Exemple de recadrage vertical (16:9 → 9:16)
ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" -crf 18 vertical.mp4
Règles de qualité
- CRF 17 + preset slow — qualité standard pour les tutoriels
- yuv420p — compatible avec tous les lecteurs
- faststart — démarrage rapide pour la lecture en ligne
- lanczos — algorithme de redimensionnement privilégié
- Pas plus de 2 encodages — éviter la perte de génération
- Sous-titres incrustés en dernier — garantir l’alignement temporel
Pièges courants
- Sur Windows, le chemin dans le filtre
subtitlesde ffmpeg doit utiliser/et les:doivent être échappés en\: - Whisper doit utiliser des chemins Windows (ne pas utiliser
/tmp/) atempo: gamme 0.5-2.0 ; au-delà, chaîner :atempo=2.0,atempo=1.5= 3x- Si les proportions de la zone PIP cible et de la fenêtre ne correspondent pas, l’image est étirée ; utiliser
force_original_aspect_ratio - auto-editor modifie la timeline ; les sous-titres précédents deviennent invalides
- Si
filter_complexest trop long pour la ligne de commande, utiliser-filter_complex_scriptpour écrire dans un fichier
Structure des fichiers
video-editor-skill-pack/
├── SKILL.md # Ce fichier
├── scripts/
│ ├── build_template.py # Template de construction montage ffmpeg
│ ├── transcribe.py # Script de transcription Whisper
│ ├── adjust_srt_speed.py # Ajustement temporel des sous-titres après accélération
│ └── analyze_frames.py # Extraction et analyse d’images clés
├── templates/
│ ├── hyperframes-config.example.json
│ └── remotion-intro/ # Template d’intro Remotion (à compléter)
└── examples/
└── tutorial-video-workflow.md # Exemple de flux complet pour un tutoriel