145 votes

Comment obtenir la durée d'une vidéo en secondes ?

Comment puis-je obtenir la durée de la vidéo en secondes ?

Ce que j'ai essayé :

ffmpeg -i file.flv 2>&1 | grep "Duration"
  Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s

mediainfo file.flv | grep Duration
Duration : 39mn 43s

Ce qui est proche, mais ce n'est pas si précis, 2383 est 39,71 minutes.

ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383

243voto

llogan Points 50040

Il suffit d'utiliser ffprobe directement. Pas besoin de sed , grep etc. Il existe plusieurs "durées" que vous pouvez acquérir (en fonction de vos entrées).

Format (conteneur) durée

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

Résultat :

30.024000

Ajout de la -sexagesimal utilisera le format d'unité de temps HOURS:MM:SS.MICROSECONDS :

0:00:30.024000

Durée du flux vidéo

Si vous souhaitez connaître la durée d'un flux vidéo ou audio particulier :

ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

Résultat :

30.000000

Les commandes ci-dessus sont issues de FFmpeg Wiki : Conseils pour FFprobe .

Avec ffmpeg

Vous pouvez utiliser ffmpeg pour obtenir la durée en décodant l'entrée :

ffmpeg -i input.mp4 -f null -
…
frame= 1587 fps=0.0 q=0.0 Lsize=N/A time=00:01:03.48 bitrate=N/A

Dans cet exemple time=00:01:03.48 est la durée.

Cela peut prendre beaucoup de temps en fonction de votre fichier d'entrée.

76voto

b_jonas Points 153

Pour obtenir les minutes, il faut diviser 2383 secondes par 60.

39.7167

puis multipliez la partie fractionnaire .7167 par 60 pour obtenir les secondes restantes.

43.002

Donc c'est 39 minutes, 43 secondes. L'application semble vous donner une valeur précise.

42voto

evilsoup Points 12077

Si vous avez ffmpeg vous devez également avoir ffprobe :

ffprobe -i input.file -show_format | grep duration
ffprobe -i input.file -show_format -v quiet | sed -n 's/duration=//p'

Cela donnera également des fractions de secondes, si cela pose un problème, vous pouvez poursuivre le traitement avec sed.

10voto

Josef Kufner Points 209
mediainfo --Output='General;%Duration%' file.flv

Ceci produit la durée en millisecondes comme une seule valeur entière. Pas besoin de grep/cut/sed/...

3voto

micke Points 3215

Solution avec mplayer qui donne directement les secondes :

mplayer -identify -frames 0 -vo null -nosound file.flv 2>&1 | awk -F= '/LENGTH/{print $2}'

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