jeudi 15 juillet 2010

afficher la durée d'une video en ligne de commande

Pour un script perso, j'avais besoin de connaître la durée d'un fichier video en ligne de commande (.avi), je voyais pas trop comment le faire simplement;

Donc j'ai testé un simple "file fichier.avi" mais biensurs ca ne le donne pas, ca donne encodage, et résolution entre autre.

Le plus logique est d'installer un truc qui sert pour la video. J'installe mplayer et ca marche pas (enfin j'ai pas trop cherché...), finalement j'ai installé ffmpeg qui dispose de moins de dépendances que mplayer et affiche la durée.

Ce qui donne (si ca peut aider certain):

ffmpeg -i video.avi 2>&1 | grep -Eo "[0-9]{2}:[0-9]{2}:..\..."

00:51:09.40


Sinon en heure(s) / minutes

ffmpeg -i video.avi 2>&1 | grep -Eo "[0-9]{2}:[0-9]{2}:..\..." | sed 's/:..\...//'

00:51

Pareil mais avec deux vids dans le dossier, et sans avoir a renseigner le nom.


export var=`ls | grep .avi | sed "2d"`
ffmpeg -i $var 2>&1 | grep -Eo "[0-9]{2}:[0-9]{2}:..\..." | sed 's/:..\...//'
export var2=`ls | grep .avi | sed "1d"`
ffmpeg -i $var2 2>&1 | grep -Eo "[0-9]{2}:[0-9]{2}:..\..." | sed 's/:..\...//'


Si quelqu'un a mieux (logiciel plus light en dépendances, etc) qu'il n'hésite pas...
Un problème? Venez en parler sur le forum, tout a une solution :D

6 commentaires:

Anonyme a dit…

$ mplayer -vo null -ao null -frames 0 -identify FILE | grep LENGTH
Ca renvoi ID_LENGTH=xxx (nombre de secondes)

Exemple:

$ mplayer -vo null -ao null -frames 0 -identify White\ Stripes.avi | grep LENGTH
ID_LENGTH=213.35

BoboTiG a dit…

Je ne suis pas sûr que niveau dépendances ce soit mieux, mais tu peux tenter avec avidemux-cli :
avidemux2_cli --nogui --load fichier.avi --info &>/dev/null | grep -Eo "Duration: [0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]{3})$" | sed -e s/Duration:\ //

bricowifi a dit…

ah merci pour les soluces, je regarderais ce qui est le plus valable en terme de dependances

BoboTiG a dit…

Tiens tu peux essayer celui-ci : http://bobotig.fr/contenu/projets/vlen/.

* a dit…

pas mal :)

merci

poulpoul a dit…

Bonjour, une autre avec les secondes:

ffmpeg -i video.avi 2>&1 | grep "Duration:" | awk 'FS=":" {print $1 $2}' | sed 's/Duration://;s/....$//'

++
Poulpoul

 
LinuxStore