>> Technologie Électronique >  >> Appareils photo >> Caméras vidéo

Recadrage vidéo FFmpeg : Guide complet des commandes avec exemples

Le filtre crop de FFmpeg est le couteau suisse du recadrage vidéo programmatique. Rapide, sans perte (avec le bon codec), et scriptable. Maîtrisez la syntaxe et évitez les pièges courants.

Syntaxe de base

ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4 
  • w = largeur de sortie
  • h = hauteur de sortie
  • x = décalage horizontal depuis le coin haut-gauche (0 = bord gauche)
  • y = décalage vertical depuis le coin haut-gauche (0 = bord haut)

Toutes les valeurs en pixels. L'évaluation d'expressions permet les maths (voir ci-dessous).

Méthode 1 : Coordonnées pixels explicites

Recadre une fenêtre 1280x720 partant de (100, 50) depuis une source 1920x1080 :

ffmpeg -i input.mp4 -vf "crop=1280:720:100:50" -c:a copy output.mp4 
  • -c:a copy = Copie flux audio (pas de ré-encodage, rapide, sans perte qualité).
  • La vidéo sera ré-encodée (le recadrage change les pixels). Utilisez -c:v libx264 -crf 18 -preset slow pour haute qualité.

Méthode 2 : Recadrage relatif / centré (Expressions)

Utilisez iw (largeur entrée) et ih (hauteur entrée) pour des commandes agnostiques à la résolution.

Recadrage centré (Le plus courant)

# Recadre centre 75% largeur x 75% hauteur ffmpeg -i input.mp4 -vf "crop=iw*0.75:ih*0.75:(iw-ow)/2:(ih-oh)/2" -c:a copy output.mp4 
  • ow / oh = largeur/hauteur sortie (calculées depuis les deux premiers args).
  • (iw-ow)/2 centre horizontalement. (ih-oh)/2 centre verticalement.

Conversion ratio (16:9 → 9:16 Vertical)

# Recadre centre vertical 9:16 depuis 16:9 (ex: 1920x1080 -> 607x1080) ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih:(iw-ow)/2:0" -c:a copy vertical.mp4 

Supprimer bandes noires (Auto-détection)

# Détecte bandes noires 1 sec, puis recadre ffmpeg -i input.mp4 -vf "cropdetect=24:16:0" -f null - 2>&1 | grep crop | tail -1 # Sortie exemple: [Parsed_cropdetect_0 @ 0x...] crop=1920:800:0:140 # Utilisez valeurs détectées: ffmpeg -i input.mp4 -vf "crop=1920:800:0:140" -c:a copy output.mp4 

Méthode 3 : Basé sur pourcentage (Réseaux sociaux rapide)

# Recadre centre 80% largeur, 90% hauteur ffmpeg -i input.mp4 -vf "crop=iw*0.8:ih*0.9:(iw-ow)/2:(ih-oh)/2" output.mp4 

Avancé : Recadrage variable dans le temps (Animé / Images-clés)

Utilisez le filtre sendcmd ou crop avec expressions t (timestamp).

# Zoom depuis plein cadre vers centre 50% sur 5 secondes ffmpeg -i input.mp4 -vf " crop= w='iw*max(0.5,1-0.1*t)': h='ih*max(0.5,1-0.1*t)': x='(iw-ow)/2': y='(ih-oh)/2' " -c:a copy zoom_crop.mp4 

t = secondes. À t=0: 100%. À t=5: 50%. Assouplissement linéaire.

Pièges critiques

ProblèmeCauseSolution
Dimensions sortie non divisibles par 2H.264/HEVC requièrent largeur/hauteur pairesUtilisez crop='if(gt(iw,ih),-2,ih*9/16)':... ou assurez maths paires. FFmpeg auto-ajuste avec +0 mais avertit.
Recadrage dépasse l'entréex+w > iw ou y+h > ihValidez avec ffprobe -v error -select_streams v:0 -show_entries stream=width,height input.mp4
Ratio étiré à la lectureLecteur ignore SAR/DARAjoutez -vf "crop=...,setsar=1" ou -aspect 16:9 en sortie.
Perte qualitéDéfauts ré-encodage (CRF 23)-c:v libx264 -crf 18 -preset slow explicite (ou -c:v copy si SEULEMENT recadrage I-frames ? Non, crop ré-encode toujours).
Dérive audioRé-encodage vidéo change légèrement durée-c:a copy toujours. Si sync critique, -async 1.

Workflow Pro : Recadrage par lot d'un dossier

# Bash / Zsh / PowerShell for f in *.mp4; do ffmpeg -i "$f" -vf "crop=ih*9/16:ih:(iw-ow)/2:0" -c:v libx264 -crf 20 -preset medium -c:a copy "cropped_${f}" done 

Lancez toujours ffprobe d'abord. Scriptez les maths. Utilisez -c:a copy. Archivez les originaux.

Caméras vidéo