69 votes

Comment utiliser ffmpeg pour obtenir la résolution de la vidéo ?

Je essaie d'obtenir la résolution de la vidéo avec la commande suivante:

ffmpeg -i filename.mp4

Je reçois une longue sortie, mais j'ai besoin seulement de la largeur et de la hauteur pour mon script bash. Comment devrais-je filtrer ces paramètres? Peut-être y a-t-il une meilleure façon de le faire.

97voto

llogan Points 50040

Utiliser ffprobe

$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4
  1280x720

Exemples d'autres choix de formatage de sortie

Voir la documentation de l'option -of pour plus de choix et d'options. Voir également Astuces FFprobe pour d'autres exemples incluant la durée et le frame rate.

Par défaut

Sans l'enveloppe [STREAM]:

$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of default=nw=1 input.mp4
  width=1280
  height=720

Sans clé:

$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of default=nw=1:nk=1 input.mp4
  1280
  720

CSV

$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 input.mp4
  1280,720

JSON

$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of json input.mp4
{
    "programs": [

    ],
    "streams": [
        {
            "width": 1280,
            "height": 720
        }
    ]
}

XML

$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of xml input.mp4

9voto

Zee Points 193

Les commandes suivantes reposent uniquement sur ffmpeg (et grep et cut) pour vous obtenir la hauteur ou la largeur requise :

Hauteur :

$ ffmpeg -i video.mp4 2>&1 | grep Video: | grep -Po '\d{3,5}x\d{3,5}' | cut -d'x' -f1

1280

Largeur :

$ ffmpeg -i video.mp4 2>&1 | grep Video: | grep -Po '\d{3,5}x\d{3,5}' | cut -d'x' -f2

720

La différence entre les deux est juste le paramètre -f pour cut.

Si vous préférez la chaîne de résolution complète, vous n'avez pas besoin de cut :

$ ffmpeg -i video.mp4 2>&1 | grep Video: | grep -Po '\d{3,5}x\d{3,5}'

1280x720

Voici ce que nous faisons avec ces commandes :

  1. Exécution de ffmpeg -i pour obtenir les informations du fichier.
  2. Extraction de la ligne qui contient uniquement les informations Video:.
  3. Extraction simplement d'une chaîne qui ressemble à digitsxdigits qui sont entre 3 et 5 caractères.
  4. Pour les deux premiers, découpage du texte avant ou après le x.

3voto

La sortie de ffprobe ressemble à ceci :

streams_stream_0_width=1280
streams_stream_0_height=720

Techniquement, vous pouvez utiliser eval pour assigner ces valeurs à des variables bash, mais cela n'est pas nécessaire et peut être dangereux ; voir ici pour plus d'informations :

https://stackoverflow.com/questions/17529220/why-should-eval-be-avoided-in-bash-and-what-should-i-use-instead

À la place, puisque vous utilisez bash, profitez de ses tableaux intégrés et de la manipulation des chaînes :

filepath="filename.mp4"
width_prefix='streams_stream_0_width='
height_prefix='streams_stream_0_height='
declare -a dimensions
while read -r line
do
    dimensions+=( "${line}" )
done <<<( ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=width,height "${filepath}" )
width_with_prefix=${dimensions[0]}
height_with_prefix=${dimensions[1]}
width=${width_with_prefix#${width_prefix}}
height=${height_with_prefix#${height_prefix}}
printf "%s\t%sx%s\n" "${filepath}" "${width}" "${height}"

1voto

Andreas F Points 333

Utilisez grep pour sélectionner uniquement les lignes que vous recherchez. Redirigez la sortie de STDERR vers STDOUT, car ffmpeg y affichera toutes les informations.

ffmpeg -i filename.mp4 2>&1 | grep 

Édition : Un exemple complet utilisant perl :

$ ffmpeg -i MVI_7372.AVI 2>&1 | grep Video | perl -wle 'while(<>){ $_ =~ /.*?(\d+x\d+).*/; print $1 }'
640x480

1voto

J'ai enfin trouvé la réponse :

J'ai utilisé ce paquet appelé Media info

Et ensuite j'ai commandé :

mediainfo mediainfo --Inform="Video;%Width%" midhand.mp4

Pour voir la liste des paramètres :

mediainfo --Info-Parameters

Meilleur outil pour extraire les métadonnées vidéo !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X