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.

1voto

cdlvcdlv Points 1241

Je sais que la question concerne bash mais, au cas où quelqu'un arrive ici cherchant une solution pour un batch Windows, comme moi avant de le découvrir.

for /f "delims=" %%a in ('ffprobe -hide_banner -show_streams filename.mp4 2^>nul ^| findstr "^width= ^height="') do set "myvideo_%%a"

Aucun message dans la console, et vous finissez avec les jolies variables d'environnement myvideo_width et myvideo_height. Vous pouvez le vérifier avec:

C:\>set myvideo_
myvideo_height=720
myvideo_width=1280

Si la résolution de votre vidéo est bien de 1280x720, bien sûr.

1voto

Hyper Points 11

Edit: solution FFPROBE pour le lot windows. Utilisez cela au lieu de la méthode FFMPEG-only, car cela parsait une entrée destinée aux humains et ça a planté.

 ::Obtient la résolution
 for /f "tokens=*" %%g in ('"ffprobe.exe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "input.mp4""') do (set videoRes=%%g)

 echo videoRes=%videoRes%

 ::OPTIONNEL : Obtient les résolutions x et y individuelles si vous le souhaitez
 for /f "tokens=1 delims=x" %%x in ("%videoRes%") do set "xRes=%%x"
 for /f "tokens=2 delims=x" %%y in ("%videoRes%") do set "yRes=%%y"

 echo xRes=%xRes%
 echo yRes=%yRes%

solution FFMPEG-only pour le lot windows. Ne pas utiliser car c'est fragile. Cela fonctionne probablement seulement si vous avez une seule piste vidéo dans le fichier, vous devrez le modifier s'il y en a plus.

@echo off >nul 2>&1
setlocal enableDelayedExpansion >nul 2>&1

for /f "tokens=*" %%g in ('"ffmpeg -i input.mp4 2>&1 | findstr Vidéo:"') do (set videoInfo=%%g)
for /f "tokens=4 delims=," %%g in ("!videoInfo!") do set "videoInfo=%%g"
for /f "tokens=1 delims=x " %%x in ("!videoInfo!") do set "xRes=%%x"
for /f "tokens=2 delims=x " %%y in ("!videoInfo!") do set "yRes=%%y"

echo xRes=!xRes!
echo yRes=!yRes!

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