Communitygithub.com

iamaanahmad/ffmpeg-essentials

Recettes incontournables FFmpeg et ffprobe pour le rognage, l'assemblage, la conversion, le redimensionnement, la compression, les changements de vitesse, les fondus, l'extraction audio et la conversion en GIF. Idéal pour toute tâche de transformation média directe, ou lorsqu'une vidéo ne se lit pas, a des dimensions bizarres ou est désynchronisée.

Qu'est-ce que ffmpeg-essentials ?

Ce skill regroupe l'essentiel de FFmpeg et ffprobe, les outils multimédia en ligne de commande les plus puissants. Il fournit des recettes prêtes à l'emploi pour les opérations les plus courantes : rogner (trim), assembler (concat), redimensionner, compresser, changer la vitesse, ajouter des fondus, extraire l'audio, convertir en GIF et générer des images. Chaque commande est expliquée avec ses variantes (ré-encodage précis vs copie rapide des flux) et des conseils sur les paramètres (CRF, preset, résolution). Idéal pour les développeurs et intégrateurs qui veulent automatiser le traitement de fichiers vidéo. Compatible avec tous les shells Unix/Linux/macOS et PowerShell sur Windows. Le skill insiste sur les bonnes pratiques : toujours sonder (probe) avec ffprobe avant d'agir, ne jamais écraser l'entrée, écrire dans un dossier de sortie séparé 'out/', et ajouter les options -hide_banner et -loglevel en script. Un tableau de dépannage couvre les erreurs fréquentes (hauteur non divisible, dérive audio, première image noire) avec leur solution. Les recettes utilisent libx264 pour la vidéo et AAC pour l'audio, mais les principes s'appliquent à d'autres codecs.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/iamaanahmad/agents-video-editing-skills/tree/HEAD/skills/ffmpeg-essentials

Demander à votre IA préférée

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

Documentation

FFmpeg Essentiel

Toujours sonder d'abord, ne jamais écraser le fichier d'entrée, et ré-encoder lors du rognage sauf indication contraire.

Sondage (Probe)

# Résumé lisible
ffprobe -v error -show_entries stream=codec_type,codec_name,width,height,r_frame_rate,sample_rate -show_entries format=duration,size -of default=nw=1 input.mp4

# Format machine
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

Rogner (Trim)

# Début à 30 s, durée 15 s. Ré-encodage : précis et sûr.
ffmpeg -i input.mp4 -ss 00:00:30 -t 15 -c:v libx264 -crf 20 -c:a aac out/clip.mp4

# Rapide, sans ré-encodage. Ne tombe que sur les images-clés, donc le début peut être décalé de quelques secondes.
ffmpeg -ss 00:00:30 -i input.mp4 -t 15 -c copy out/clip.mp4

-ss avant -i cherche rapidement. Après -i il cherche précisément mais plus lentement. Pour un ré-encodage, l'un ou l'autre convient avec FFmpeg moderne.

Assembler (Join)

# Mêmes codec, résolution, fps : instantané, sans perte
printf "file 'a.mp4'\nfile 'b.mp4'\n" > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy out/joined.mp4

# Sources différentes : normalisation lors de l'assemblage
ffmpeg -i a.mp4 -i b.mp4 -filter_complex \
 "[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30,setsar=1[v0];\
  [1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30,setsar=1[v1];\
  [0:a][1:a]concat=n=2:v=1:a=1[v][a]" \
 -map "[v]" -map "[a]" -c:v libx264 -crf 20 -c:a aac out/joined.mp4

PowerShell : écrire list.txt avec Set-Content, et utiliser la continuation de ligne par backtick ou une seule longue ligne au lieu de \.

Redimensionner et recadrer (Resize and reframe)

# Ajuster dans 1920x1080 avec barres
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2"
# Remplir 1920x1080, rogner le surplus
-vf "scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080"
# Largeur 1280, hauteur automatique et paire
-vf "scale=1280:-2"

Compresser

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart out/small.mp4
UsageCRFPreset
Master / archive16-18slow
Production20-22medium
Web / aperçu23-26fast
Brouillon rapide28+veryfast

Un CRF plus bas signifie une qualité plus élevée et un fichier plus volumineux. Pour une taille cible, utiliser le double-passage -b:v au lieu du CRF.

Vitesse

# 2x plus rapide, vidéo et audio
ffmpeg -i in.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" out/fast.mp4
# 0.5x ralenti
ffmpeg -i in.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" out/slow.mp4
# Vidéo uniquement
ffmpeg -i in.mp4 -an -filter:v "setpts=0.25*PTS" out/timelapse.mp4

Le multiplicateur setpts = 1 / vitesse. atempo accepte 0.5 à 2.0 par filtre, donc enchaîner pour plus : atempo=2.0,atempo=2.0 pour 4x.

Fondus (Fades)

# 1 s d'entrée, 1 s de sortie sur un clip de 10 s
ffmpeg -i in.mp4 -vf "fade=t=in:st=0:d=1,fade=t=out:st=9:d=1" -af "afade=t=in:st=0:d=1,afade=t=out:st=9:d=1" out/faded.mp4

Audio

ffmpeg -i in.mp4 -vn -c:a libmp3lame -q:a 2 out/audio.mp3      # extraire mp3
ffmpeg -i in.mp4 -vn -c:a copy out/audio.m4a                   # extraire sans ré-encodage (source AAC)
ffmpeg -i video.mp4 -i voice.wav -map 0:v -map 1:a -c:v copy -c:a aac -shortest out/dubbed.mp4   # remplacer l'audio
ffmpeg -i in.mp4 -an -c:v copy out/silent.mp4                  # supprimer l'audio

GIF

ffmpeg -i in.mp4 -t 5 -vf "fps=15,scale=480:-1:flags=lanczos,split[a][b];[a]palettegen[p];[b][p]paletteuse" out/preview.gif

Images

ffmpeg -ss 5 -i in.mp4 -frames:v 1 -q:v 2 out/frame.jpg          # une image
ffmpeg -framerate 30 -i frames/%04d.png -c:v libx264 -pix_fmt yuv420p out/from-frames.mp4
ffmpeg -loop 1 -i still.png -t 5 -c:v libx264 -pix_fmt yuv420p -r 30 out/still.mp4

Dépannage (Troubleshooting)

SymptômeCorrectif
height not divisible by 2Ajouter scale=trunc(iw/2)*2:trunc(ih/2)*2
Se lit dans VLC, pas dans le navigateur ou le téléphone-c:v libx264 -pix_fmt yuv420p -movflags +faststart
Décalage audio après changement de vitesseUtiliser setpts et atempo ensemble dans filter_complex
Décalage audio sur clips à fréquence d'images variableAjouter -vsync cfr -r 30 (ou -fps_mode cfr)
Premières images noires après rognage -c copyRé-encoder au lieu de copie de flux
La sortie fait 0 octetLire l'erreur complète avec -v error ; vérifier le mappage des flux
Chemins avec espacesLes mettre entre guillemets : "mon clip.mp4"
L'invite d'écrasement bloque l'automatisationAjouter -y (écraser) ou -n (ne jamais écraser)

Habitudes de sécurité

  • Écrire dans out/, jamais dans le chemin d'entrée.
  • Ajouter -hide_banner -loglevel error dans les scripts, -stats pour voir la progression.
  • Vérifier le résultat avec ffprobe et le skill video-qa.

Individual skills in this repo

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

iamaanahmad/captions-subtitles

Create, edit, translate and burn in captions and subtitles - transcribe speech with Whisper, write SRT/VTT/ASS files, style them, and hard-burn word-highlight captions for Shorts, Reels and TikTok. Use for any captioning, subtitle, transcript or accessibility request.

iamaanahmad/motion-design-craft

Motion design rules for programmatic and edited video - durations, easing, springs, staggering, read time for on-screen text, beat grids, transitions and visual hierarchy, plus the defaults that make a video look AI-generated. Use when animating scenes, choosing timings, or reviewing a video that feels off.

iamaanahmad/moviepy-python-video

Compose and edit video in pure Python with moviepy 2.x - overlay text, lower thirds and captions on footage, cut and join clips, add audio, build short single-file build.py videos without Node. Use when the user wants Python-based video editing or deterministic text over AI-generated video.

iamaanahmad/remotion-programmatic-video

Build videos as React code with Remotion - compositions, sequences, springs, interpolation, audio sync, data-driven props, studio preview and rendering to MP4. Use for explainers, product demos, release notes, data charts, branded templates, or any video that should be reproducible from code.

iamaanahmad/screen-recording-demos

Record clean product and web app demos - scripted browser recording with Playwright, cursor and zoom polish, speed ramps, trimming dead time and syncing to narration. Use when the user wants a walkthrough, tutorial, UI demo or release video of a web app, or a repeatable recording.

iamaanahmad/voiceover-tts

Generate and time narration with text-to-speech (ElevenLabs, OpenAI TTS, Kokoro, Piper) or prepare a recorded voice - script prep, per-scene audio files, pacing, pronunciation, cleanup and loudness. Use when the user needs a voiceover, narration, dubbing, or voice cloning guidance.

Skills associés