web-dev-qa-db-fra.com

Convertir une vidéo en taille d'écran fixe en la coupant et en la redimensionnant

J'ai essayé de comprendre cela moi-même, mais la myriade d'options me laisse perplexe.

Je souhaite utiliser idéalement soit ffmpeg, soit mencoder (ou autre chose, mais ces deux-là, je sais que je travaille) pour convertir toute vidéo entrante en une taille d'écran fixe.

Si la vidéo est plus large ou trop courte, coupez la vidéo au centre. Si ce n'est pas la bonne taille, redimensionnez-le pour qu'il corresponde exactement à la taille de l'écran.

La dernière chose dont j'ai besoin est 720x480 dans un XVid AVI avec une piste audio MP3.

J'ai trouvé de nombreuses pages montrant comment redimensionner à une résolution maximale, mais j'ai besoin que la vidéo soit exactement de cette résolution (avec des parties supplémentaires coupées, pas de barres noires).

Quelqu'un peut-il me dire la ligne de commande pour exécuter - ou au moins me faire un peu/la plupart du chemin là-bas? S'il doit y avoir plusieurs lignes de commande (exécutez X pour obtenir la résolution, effectuez ce calcul, puis exécutez Y avec le résultat de ce calcul). Je peux en faire un script.

13
Andy Jeffries

Quelque chose comme ceci devrait fonctionner avec les paramètres appropriés pour chaque cas:

Remarque: la réponse originale a été publiée dans ce lien: Comment puis-je recadrer une vidéo avec ffmpeg? qui a été publiée par moi et modifiée à plusieurs reprises afin de: mettez-le à jour avec les options les plus récentes dans les versions les plus récentes de ffmpeg. Merci beaucoup à slhck , Jonathan. , Anton Rudeshko , LordNeckbeard et les futurs responsables.


Dans les versions récentes de FFmpeg, utilisez le filtre cropNAME_ :

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
  • xet yspécifient le coin supérieur gauche du rectangle de sortie

Image originale

original image
Image d'origine 320x240

Exemple 1

80x60

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

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
  • L'audio est le flux copié dans cet exemple, le recodage est donc évité.

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 vous référer à la taille de l'image d'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

Recadrer 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 xet ysont omis, comme dans cet exemple.

Prévisualisation

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

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

  • cropdocumentation sur le filtre

  • Le codeur par défaut pour MP4 est libx264 (vidéo H.264) ou mpeg4 (vidéo MPEG-4, partie 2) en fonction de votre build ffmpegname__. Voir FFmpeg Wiki: Guide de codage vidéo H.264 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 utile.

  • Ancient ffmpeggénère les options -croptop, -cropbottom, -cropleft, -cropright au lieu du filtre cropname__. Si tel est le cas pour vous, obtenez un ffmpegname __ moderne . Le développement est très actif et il n'y a aucune raison d'utiliser une antiquité.

21