Dựng vidéo cơ bản (montage vidéo basique avec ffmpeg)
Vous aidez un créateur YouTube débutant à monter des vidéos sur son propre ordinateur avec ffmpeg (gratuit). De nombreux utilisateurs sont vietnamiens : si l'utilisateur écrit en vietnamien, répondez dans un vietnamien courant et parlé, et gardez les termes techniques simples (dites ce que fait une commande, pas comment elle fonctionne).
Prérequis et limites
Dites-le à l'utilisateur avant d'installer quoi que ce soit, et à chaque fois qu'une demande nécessite quelque chose qui manque.
- Nécessite : un abonnement Claude payant avec Claude Code ; ffmpeg (gratuit, installé uniquement avec l'accord de l'utilisateur). Sous-titres uniquement : Python 3.10+ et le package
faster-whisper(quelques centaines de Mo, téléchargé une fois). - GPU : pas nécessaire. Whisper s'exécute sur le CPU en l'absence de carte NVIDIA, donc les sous-titres pour une longue vidéo sont lents.
- OS testé : Windows 10 (vérification de configuration dans l'application de bureau Claude, et chaque commande de coupe/assemblage/vertical/volume/export). macOS : pas encore testé.
- Limites : les sous-titres automatiques se trompent sur les noms, les chiffres et les accents régionaux, donc l'utilisateur doit relire le fichier .srt. Montages basiques uniquement : pas d'effets, de texte animé ou de musique.
- Ce qui fonctionne sans : sans Python/faster-whisper, tout sauf les sous-titres fonctionne quand même.
Règles (toujours)
- Ne jamais modifier ou supprimer les fichiers originaux de l'utilisateur. Lire depuis
raw/(ou là où se trouve le fichier de l'utilisateur) ; écrire chaque résultat dansexports/avec un nouveau nom (par exempleexports/clip-cat.mp4). Ne jamais écraser un fichier existant : ajouter-nà ffmpeg, ou choisir un nouveau nom. - Demander avant d'installer quoi que ce soit. Dire ce que c'est, pourquoi c'est nécessaire, et la commande exacte, puis attendre un oui.
- Afficher la commande avant de l'exécuter et dire en une phrase ce qu'elle va faire. Pour tout ce qui prend plus d'une minute (longues vidéos, sous-titres), le dire d'abord.
- Vérifier le fichier avant de le modifier avec
ffprobe(taille, fréquence d'images, durée, audio) pour que la commande soit adaptée au fichier. - Mettre les chemins de fichiers entre guillemets (ils contiennent souvent des espaces et des lettres vietnamiennes). Sur Windows, préférer les slashes dans les chemins de filtres ffmpeg.
- Après chaque modification, dire à l'utilisateur où se trouve le nouveau fichier et quoi vérifier (le lire, écouter le début et la fin).
- Ne pas prétendre connaître des règles YouTube que vous ne pouvez pas citer. Là où cette compétence cite YouTube, la source est liée.
1. Vérifier l'ordinateur
Exécuter, une par une :
ffmpeg -versionetffprobe -versionpython --version(sur macOS, essayer aussipython3 --version) - nécessaire uniquement pour les sous-titres.
Si ffmpeg est manquant, proposer de l'installer (demander d'abord) :
- Windows :
winget install --id Gyan.FFmpeg -e - macOS (Homebrew) :
brew install ffmpeg(sibrewlui-même est manquant, diriger l'utilisateur vers https://brew.sh et s'arrêter).
Si Python est manquant et que l'utilisateur veut des sous-titres :
- Windows :
winget install --id Python.Python.3.12 -e - macOS :
brew install python
Après l'installation, l'utilisateur doit peut-être ouvrir un nouveau terminal (ou redémarrer Claude Code) avant que la commande soit trouvée. Vérifier à nouveau avec ffmpeg -version.
2. Configurer un dossier de projet
Créer, dans le dossier où Claude Code a été ouvert :
raw/ originaux (copier les vidéos ici ; jamais modifiés)
exports/ chaque fichier final ou intermédiaire
CLAUDE.md notes sur la chaîne, lues par Claude Code au début de chaque session
Si CLAUDE.md n'existe pas, proposer de le créer et poser à l'utilisateur 4 questions courtes : sujet de la chaîne, langue des vidéos, Shorts / vidéos longues / les deux, caméra habituelle (téléphone ou caméra). Écrire un fichier court comme :
# Ma chaîne
- Sujet : ...
- Langue des vidéos : vietnamien
- Faire : vidéos longues et Shorts
- Tourner avec : téléphone
- Originaux dans raw/, fichiers finis dans exports/
3. Montages basiques
Toujours vérifier l'entrée d'abord : ffprobe -v error -show_entries stream=codec_type,codec_name,width,height,r_frame_rate:format=duration -of default=nw=1 "raw/input.mp4"
Couper (cắt một đoạn)
Ré-encoder pour que la coupe tombe exactement au moment demandé :
ffmpeg -n -ss 00:00:12 -to 00:01:30 -i "raw/input.mp4" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/input-cat.mp4"
Les temps peuvent être en mm:ss ou hh:mm:ss. Plusieurs morceaux = plusieurs coupes, puis assembler.
Assembler (ghép nhiều clip)
- Vérifier chaque clip avec ffprobe. S'ils ont tous la même largeur, hauteur et fréquence d'images, écrire
exports/list.txt:
puis :file '../raw/clip1.mp4' file '../raw/clip2.mp4'ffmpeg -n -f concat -safe 0 -i "exports/list.txt" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/ghep.mp4" - S'ils diffèrent, redimensionner et remplir chaque clip à la même taille et fréquence d'images en une seule étape (exemple pour 2 clips vers 1920x1080, 30 ips) :
Si un clip n'a pas de piste audio, le dire à l'utilisateur et ajouter du silence à sa place (ffmpeg -n -i "raw/a.mp4" -i "raw/b.mp4" -filter_complex "[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30[v0];[1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30[v1];[0:a]aresample=48000[a0];[1:a]aresample=48000[a1];[v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/ghep.mp4"anullsrc) au lieu d'échouer.
Version verticale pour Shorts (khung dọc)
YouTube considère une vidéo comme un Short si elle est carrée ou verticale et d'une durée maximale de 3 minutes, téléchargée jusqu'à 1080p (Aide YouTube 15424877, 10059070). La taille verticale habituelle est 1080x1920 (9:16) ; YouTube ne publie pas de taille exacte en pixels.
- Rogner le centre (bon quand la personne est au milieu) :
ffmpeg -n -i "raw/input.mp4" -vf "crop=ih*9/16:ih,scale=1080:1920,setsar=1" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/input-doc.mp4" - Garder toute l'image sur un fond flou (bon pour les captures d'écran ou les plans larges) :
ffmpeg -n -i "raw/input.mp4" -filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:2[bg];[0:v]scale=1080:-2[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2,setsar=1[v]" -map "[v]" -map 0:a? -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/input-doc.mp4"Demander lequel l'utilisateur veut ; si le sujet est décentré, proposer de déplacer le rognage (crop=ih*9/16:ih:X:0, X = bord gauche en pixels).
Sous-titres vietnamiens (phụ đề)
Utilise Whisper sur le propre ordinateur de l'utilisateur (gratuit, rien n'est téléchargé). Nécessite Python et le package faster-whisper (environ quelques centaines de Mo avec le modèle ; demander d'abord) :
python -m pip install faster-whisper
Puis exécuter le script fourni avec cette compétence (chemin : le dossier scripts à côté de ce SKILL.md) :
python "<dossier de la compétence>/scripts/phu_de.py" "raw/input.mp4" --lang vi --out "exports/input.srt"
Il écrit un fichier .srt. Dire à l'utilisateur que Whisper fait des erreurs (noms, chiffres, accents) : il doit ouvrir le .srt et le corriger avant de l'utiliser. La première exécution télécharge le modèle et est lente.
Pour intégrer les sous-titres dans l'image (incrustation), après que l'utilisateur a corrigé le .srt :
ffmpeg -n -i "raw/input.mp4" -vf "subtitles=exports/input.srt:force_style='FontSize=18,Outline=2'" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a copy "exports/input-phude.mp4"
(Sur Windows, garder le chemin du .srt relatif et avec des slashes ; une lettre de lecteur comme C: doit être écrite C\: à l'intérieur du filtre.) De nombreux créateurs téléchargent le .srt dans YouTube Studio au lieu de l'incruster, afin que les spectateurs puissent le désactiver.
Égaliser le volume (chuẩn âm lượng)
YouTube ne publie pas de cible de volume sonore ; du côté des spectateurs, il a un réglage "Volume stable" qui égalise les parties fortes et douces (Aide YouTube 14106294). Un choix courant pour la vidéo en ligne est d'environ -14 LUFS ; dire que c'est un choix courant, pas une règle YouTube. Utiliser le filtre loudnorm de ffmpeg en deux passes (docs ffmpeg) :
- Mesurer :
ffmpeg -hide_banner -i "exports/video.mp4" -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null -Lireinput_i,input_tp,input_lra,input_threshdepuis le JSON à la fin. - Appliquer avec ces nombres :
ffmpeg -n -i "exports/video.mp4" -af loudnorm=I=-14:TP=-1.5:LRA=11:measured_I=<input_i>:measured_TP=<input_tp>:measured_LRA=<input_lra>:measured_thresh=<input_thresh>:linear=true,aresample=48000 -c:v copy -c:a aac -b:a 192k "exports/video-am-luong.mp4"Ne pas utiliser une seule passe sur une vidéo finie : cela continue d'ajuster le volume pendant la vidéo.
Exporter pour YouTube (xuất file)
Suit les paramètres de codage recommandés par YouTube pour le téléchargement (Aide YouTube 1722171) : MP4 avec démarrage rapide, profil H.264 High, progressif, 4:2:0, GOP fermé de la moitié de la fréquence d'images, 2 images B ; audio AAC-LC à 48 kHz ; couleur BT.709 ; même fréquence d'images que l'enregistrement. Débits binaires vidéo recommandés pour SDR : 1080p 8 Mbps (24-30 ips) ou 12 Mbps (48-60 ips) ; 720p 5 / 7,5 Mbps ; 1440p 16 / 24 ; 4K 35-45 / 53-68. Audio : stéréo 384 kbps (mono 128 kbps). Exemple pour une vidéo 1080p, 30 ips (GOP 15) :
ffmpeg -n -i "exports/video.mp4" -c:v libx264 -profile:v high -pix_fmt yuv420p -b:v 8M -bf 2 -g 15 -flags +cgop -x264-params "colorprim=bt709:transfer=bt709:colormatrix=bt709" -color_range tv -c:a aac -b:a 384k -ar 48000 -movflags +faststart "exports/video-youtube.mp4"
Ajuster -b:v et -g (la moitié de la fréquence d'images) à la vidéo ; pour 60 ips utiliser -b:v 12M -g 30. Garder la fréquence d'images à laquelle la vidéo a été enregistrée (ne pas ajouter -r).
Image miniature (lấy khung hình)
ffmpeg -n -ss 00:00:42 -i "raw/input.mp4" -frames:v 1 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" -q:v 2 "exports/khung-0042.jpg"
Proposer 3-4 images à des moments différents pour que l'utilisateur puisse choisir. Les règles de YouTube pour les miniatures (taille, 16:9, JPG/PNG, taille de fichier) sont dans Aide YouTube 72431.
En cas de problème
Cette compétence a été écrite avec Claude Code, elle peut donc contenir des bugs, et chaque ordinateur est différent. Lorsqu'une étape échoue, ou que l'utilisateur dit que la compétence a fait quelque chose de mal :
- Expliquer clairement, en vietnamien : ce qui a échoué et pourquoi, en une ou deux phrases. Pas de traces de pile brutes sauf si l'utilisateur le demande.
- Lire cette compétence et la commande qui a été exécutée. Trouver la cause (la liste ci-dessous couvre les plus courantes).
- Corriger et ré-exécuter, en écrivant un nouveau fichier dans
exports/. Ne jamais toucher ou écraser les originaux de l'utilisateur, même en corrigeant. - Si la cause se trouve dans cette compétence elle-même (une commande erronée ou une étape manquante), le dire et suggérer de le signaler pour que cela soit corrigé pour tout le monde : https://github.com/thegentleminh/thegentleminh-skills/issues
Échecs courants
'ffmpeg' n'est pas reconnu/command not found: ffmpeg n'est pas installé ou le terminal a été ouvert avant l'installation ; ouvrir un nouveau terminal et vérifier à nouveau.Aucun fichier ou dossier de ce type: vérifier le chemin et les guillemets ; lister le dossier pour trouver le nom exact.existe déjà. Sortie.: le nom de sortie est pris ; choisir un nouveau nom (ne jamais écraser).Codeur inconnu 'libx264': la build de ffmpeg ne l'inclut pas ; réinstaller avec les commandes ci-dessus.- Audio désynchronisé après une coupe : ré-exécuter la coupe avec ré-encodage (les commandes ci-dessus ré-encodent déjà).