GNU/Linux >> Tutoriels Linux >  >> Linux

Convertir une vidéo en une taille d'écran fixe en recadrant et en redimensionnant ?

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

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

Si la vidéo est plus large ou trop courte, recadrez la vidéo au centre. Si ce n'est pas la bonne taille, redimensionnez-la vers le haut ou vers le bas pour qu'elle corresponde exactement à la taille d'écran fixe.

La dernière chose exacte dont j'ai besoin est 720 × 480 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 ait exactement cette résolution (avec des parties supplémentaires coupées, pas de barres noires).

Est-ce que quelqu'un peut me dire la ligne de commande à exécuter - ou au moins me donner une partie / la majeure partie du chemin? 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 la sortie de ce calcul), je peux le scripter.

Réponse acceptée :

Je ne suis pas un gourou de ffmpeg, mais cela devrait faire l'affaire.

Tout d'abord, vous pouvez obtenir la taille de la vidéo d'entrée comme ceci :

ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width in.mp4

Avec un ffmpeg relativement récent, vous pouvez redimensionner votre vidéo avec ces options :

ffmpeg -i in.mp4 -vf scale=720:480 out.mp4

Vous pouvez définir la largeur ou la hauteur sur -1 afin de laisser ffmpeg redimensionner la vidéo en gardant le rapport d'aspect. En fait, -2 est un meilleur choix puisque la valeur calculée devrait être égale. Vous pouvez donc taper :

ffmpeg -i in.mp4 -vf scale=720:-2 out.mp4

Une fois que vous obtenez la vidéo, elle peut être plus grande que le 720x480 attendu puisque vous laissez ffmpeg calculez la hauteur, vous devrez donc la recadrer. Cela peut être fait comme ceci :

ffmpeg -i in.mp4 -filter:v "crop=in_w:480" out.mp4

Enfin, vous pouvez écrire un script comme celui-ci (peut facilement être optimisé, mais je l'ai gardé simple pour la lisibilité) :

#!/bin/bash

FILE="//eadn-wc01-5196795.nxedge.io/tmp/test.mp4"
TMP="//eadn-wc01-5196795.nxedge.io/tmp/tmp.mp4"
OUT="//eadn-wc01-5196795.nxedge.io/tmp/out.mp4"

OUT_WIDTH=720
OUT_HEIGHT=480

# Get the size of input video:
eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width ${FILE})
IN_WIDTH=${streams_stream_0_width}
IN_HEIGHT=${streams_stream_0_height}

# Get the difference between actual and desired size
W_DIFF=$[ ${OUT_WIDTH} - ${IN_WIDTH} ]
H_DIFF=$[ ${OUT_HEIGHT} - ${IN_HEIGHT} ]

# Let's take the shorter side, so the video will be at least as big
# as the desired size:
CROP_SIDE="n"
if [ ${W_DIFF} -lt ${H_DIFF} ] ; then
  SCALE="-2:${OUT_HEIGHT}"
  CROP_SIDE="w"
else
  SCALE="${OUT_WIDTH}:-2"
  CROP_SIDE="h"
fi

# Then perform a first resizing
ffmpeg -i ${FILE} -vf scale=${SCALE} ${TMP}

# Now get the temporary video size
eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width ${TMP})
IN_WIDTH=${streams_stream_0_width}
IN_HEIGHT=${streams_stream_0_height}

# Calculate how much we should crop
if [ "z${CROP_SIDE}" = "zh" ] ; then
  DIFF=$[ ${IN_HEIGHT} - ${OUT_HEIGHT} ]
  CROP="in_w:in_h-${DIFF}"
elif [ "z${CROP_SIDE}" = "zw" ] ; then
  DIFF=$[ ${IN_WIDTH} - ${OUT_WIDTH} ]
  CROP="in_w-${DIFF}:in_h"
fi

# Then crop...
ffmpeg -i ${TMP} -filter:v "crop=${CROP}" ${OUT}

Linux
  1. Vdx - Un wrapper de ligne de commande intuitif pour FFmpeg

  2. Téléchargez une partie de la vidéo Youtube avec Youtube-dl et FFmpeg

  3. Enregistrement d'écran sous Linux avec OBS et Wayland

  4. LosslessCut - Un coupe-vidéo et audio multiplateforme simple

  5. Comment créer des vidéos par programmation ?

Comment installer FFmpeg sous Linux et utiliser les commandes

Comment zoomer et dézoomer des vidéos à l'aide de FFmpeg

Comment convertir une vidéo en GIF sous Linux [Méthodes Terminal et GUI]

Les commandes FFmpeg les plus utiles pour la conversion audio et vidéo

Réduire la taille du fichier des images sous Linux - méthodes CLI et GUI

Linux - Définir la taille du terminal et la position de l'écran par défaut ?