3 votes

Pourquoi ffprobe signale-t-il un nombre incorrect de trames ?

J'ai un petit fichier vidéo que ffprobe décrit comme:-

Input #0, avi, from 'sample.avi': 
Metadata: 
encoder : Lavf55.12.100 
Duration: 00:00:35.00, start: 0.000000, bitrate: 546 kb/s 
Stream #0:0: Video: msmpeg4v3 (MP43 / 0x3334504D), yuv420p, 320x240, 
             506 kb/s, 200 fps, 200 tbr, 200 tbn, 200 tbc 

Comme la vidéo dure 35 secondes et que la fréquence d'images est de 200 fps, je m'attends à ce qu'il y ait (35 x 200) = 7000 images dans la vidéo.

Si j'utilise ffmpeg pour extraire les images de la vidéo, j'obtiens en fait 6999 images (ce qui est assez proche, je suppose). La commande que j'utilise pour cela est :-

c:\> ffmpeg -i sample.avi  -f image2 -c:v png Img%%04d.png

Note : le '%%' est nécessaire lorsque la commande est exécutée à partir de la CLI WinXP.

Cependant, en utilisant la commande:-

c:\> ffprobe -select_streams v -show_frames sample.avi > frames.lis 

et en comptant le nombre d'éléments [FRAME] dans frames.lis, on obtient un nombre de frames de 1023 et non de 7000.

Une explication ?

Voici un lien vers un fichier très similaire qui se comporte de la même manière (~7MB) :

http://www.filedropper.com/sample_65

Cliquez avec le bouton gauche de la souris sur l'image "Télécharger ce fichier" de la page.

J'utilise la version statique Win32 de ffmpeg 'ffprobe' du 17APR2014 sous WinXP-SP3.

S'il y a une autre façon de faire, j'essaie principalement de construire un tableau de "numéro d'image" par rapport à "temps" pour une série de fichiers vidéo pour une utilisation dans une autre application.

Merci.

1voto

dstob Points 305

Y a-t-il une raison pour que 1023 ne soit pas correct ? Les fps auxquels vous faites référence sont des informations d'en-tête et peuvent donc facilement être incorrects.

Dans la sortie des png's, y a-t-il beaucoup d'images dupliquées ? Ffmpeg vous rend peut-être service en produisant des images copiées pour correspondre au nombre d'images par seconde et à la durée indiqués.

L'utilisation de ffprobe est la solution que je recommande. Il est difficile d'être certain à 100% à moins de décoder les images et de les compter. L'utilisation de -count_frames ou -show_frames devrait donc vous donner le nombre que vous recherchez.

Note : Il n'y a aucune garantie que la durée indiquée soit exacte.

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