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 que près, 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
Réponses:
Pour obtenir des minutes, vous devez diviser 2383 secondes par 60.
puis multipliez la partie décimale .7167 par 60 pour obtenir les secondes restantes.
Donc, c'est 39 minutes, 43 secondes. L'application semble vous donner une valeur exacte.
la source
Il suffit d'utiliser
ffprobe
directement. Pas besoin desed
,grep
etc. Il existe plusieurs "durées" que vous pouvez acquérir (en fonction de votre saisie).Durée du format (conteneur)
L'ajout de l'
-sexagesimal
option utilisera le format d'unité de temps HOURS: MM: SS.MICROSECONDS:Durée du flux vidéo
Les commandes ci-dessus proviennent de FFmpeg Wiki: FFprobe Tips .
Avec
ffmpeg
Vous devrez peut-être complètement décoder l'entrée si vous trouvez que la durée du conteneur ou du flux est manquante ou inexacte (probablement en raison d'un fichier endommagé ou tronqué).
Dans cet exemple
time=00:01:03.48
est la durée:La durée de cette opération dépendra bien sûr de la complexité du décodage, de la durée de votre saisie et des capacités de votre ordinateur.
la source
ffmpeg
section "Avec ".Si vous en avez
ffmpeg
, vous devriez aussi avoirffprobe
:Cela donnera également des fractions de secondes. Si cela pose un problème, vous pouvez traiter plus avant avec sed.
la source
printf
, comme| xargs printf %.0f
- cela retournera une valeur entière.Pour mon ffmpeg-0.6.5-1.el6.rf.x86_64, pour obtenir uniquement la seconde, le format de la commande ffprobe est:
la source
Solution avec mplayer qui donne des secondes directement:
la source
Cela génère la durée en millisecondes sous forme de valeur entière unique. Pas besoin de grep / cut / sed / ...
la source
brew install mediainfo
Je suis tombé sur le problème d'obtenir des métadonnées étranges et incorrectes à partir de fichiers vidéo avec lesquels je travaillais et je ne pouvais pas trouver de motif ni aucun type de traitement utilisant du code et des outils comme ffmpeg, mp4box, ffprobe, mediainfo, mplayer, pour obtenir la durée réelle de la vidéo.
Identifier la durée réelle de la vidéo était une exigence pour un projet sur lequel je travaillais et la seule façon de l'obtenir était de recoder le fichier vidéo à l'aide de ffmpeg et d'obliger les fichiers encodés à ignorer les métadonnées du fichier d'origine, comme par exemple:
(Cela risque de tourner plus vite que prévu. Le temps moyen était de 2 secondes, en raison du type de contenu et de l'environnement que j'utilisais.)
... et ensuite obtenir la durée en utilisant un outil de votre choix. J'aime mediainfo, d'ailleurs: - "mediainfo FILE --Inform =" Vidéo;% Durée% "vous donne la durée en millisecondes.
la source
Si vous avez seulement besoin d'interroger les métadonnées:
[...]
[...]
Pour que vous puissiez l'analyser:
Mais si vous voulez obtenir la durée effective du conteneur, vous devez le décoder:
Il faudra un peu de temps CPU pour le décoder, jusqu'à ce que:
[...]
Ensuite, vous pouvez l'analyser:
la source
Si vous voulez une durée exacte, oubliez FFmpeg. Il ne donne qu'une estimation basée sur la taille du fichier et le débit moyen. J'ai trouvé, dans certains cas, la durée estimée par 2x!
Sous Linux, si le fichier est créé et modifié uniquement pendant ledit enregistrement vidéo, une autre solution consisterait à utiliser la création et la dernière heure de modification pour calculer la durée, comme dans:
la source