Comment puis-je recadrer une vidéo avec ffmpeg?


101

J'ai un fichier MP4 d'un enregistrement d'écran que je dois rogner.Comment puis-je accomplir cela sans utiliser des outils coûteux comme Adobe Premier ou Final Cut?Je préfère ffmpeg parce que je l'ai déjà utilisé.

159

Utilisez le crop filter :

ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4

Où les options sont les suivantes:

  • out_w est la largeur du rectangle de sortie
  • out_h est la hauteur du rectangle de sortie
  • x et y spécifier le coin supérieur gauche du rectangle de sortie

Image originale

original image
Image d'origine 320x240

Exemple 1

80x60

Pour recadrer une section 80 × 60 en partant de la position (200, 100):

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
  • L'audio est stream copied dans cet exemple, ce qui évite le réencodage.

Exemple 2

bottom right quarter

Pour recadrer le quart inférieur droit:

ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4

C'est pareil que:

ffmpeg -i in.mp4 -filter:v "crop=320/2:240/2:320/2:240/2" -c:a copy out.mp4

Quel est le même que:

ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
  • Vous pouvez faire référence à la taille d'image en entrée avec in_w et in_h comme indiqué dans ce premier exemple.La largeur et la hauteur de sortie peuvent également être utilisées avec out_w et out_h .

Exemple 3

20 pixels from the top, and 20 from the bottom

Rognez 20 pixels du haut et 20 du bas:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • Le filtre centre automatiquement le recadrage si les x et y sont omises, comme dans cet exemple.

Prévisualisation

Vous pouvez prendre un recadrage (heh heh) et le prévisualiser en direct avec ffplay :

ffplay -i input -vf "crop=in_w:in_h-40"

De cette façon, vous pouvez expérimenter et ajuster votre recadrage sans avoir à encoder, voir, répéter.

Remarques

  • crop filter documentation

  • Le codeur par défaut pour MP4 est libx264 (vidéo H.264) ou mpeg4 (vidéo MPEG-4 Partie 2) selon votre version ffmpeg .Voir FFmpeg Wiki: H.264 Video Encoding Guide pour plus d'informations.

  • Au lieu de recadrer et de ré-encoder, envisagez de recadrer lors de la lecture.Ceci est possible avec n'importe quel joueur qui vaut la peine d'être utilisé.

  • Ancien ffmpeg construit utilisé -croptop , -cropbottom , -cropleft , -cropright au lieu du filtre crop .Si tel est le cas pour vous, alors get a modern ffmpeg .Le développement est très actif et il n'y a aucune raison d'utiliser une antiquité.

+1

Cela fonctionne avec 'avconv' maintenant. 16 sept.. 152015-09-16 13:52:11

  0

J'ai un 1923x1080 et veux 1920x1080.C'est la recommandation que j'ai essayée: '/Users/kukodajanos/Workspace/ffmpeg -i /Users/kukodajanos/Desktop/video_640x480-2.mp4 -filter: v" crop = 1920: 1080: 0: 0 "-c: une copie/Users/kukodajanos/Desktop/video_640x480-4.mp4', mais le film d'origine est renvoyé. 24 janv.. 172017-01-24 16:18:47

  0

@Joce JFYI avconv fait partie de libav - un fork de ffmpeg 12 mai. 172017-05-12 10:37:38

+1

Il vaut la peine de mentionner cette technique (avec le filtre 'crop') pour recoder la vidéo, voir https://stackoverflow.com/questions/33378548/ffmpeg-crop-crop-a-video-without-losing-the-quality le codage compte pour vous 14 oct.. 172017-10-14 09:58:45

  0

édité pour changer le '-filter: v' obsolète au plus récent et plus simple à taper' -vf'.À votre santé! 15 déc.. 172017-12-15 00:35:15

  0

Je reçois une échelle automatique en quelque sorte.Je suppose que cela vient de l'aspect:/Par exemple, quand je fais "rogner = 80: 60: 200: 100", ma vidéo finale est au format 97x60.J'ai essayé d'ajouter setsar = 1: 1 à côté du recadrage, mais il semble ensuite le redimensionner avant le recadrage. La taille finale est donc 80x60, mais le contenu n'est pas le bon. 28 déc.. 172017-12-28 23:53:08