web-dev-qa-db-fra.com

Comment extraire les horodatages associés aux cadres ffmpeg

ffmpeg -i myvid.mp4  -r  25  -t  100  image-%d.jpeg 

Est-ce que la commande que j'utilise pour extraire des images et qu'elle fonctionne exactement comme prévu Cependant, j'aimerais aussi regarder les horodatages des images. Quelle que soit la précision. 100 millisecondes me suffisent. Ffmpeg peut-il faire cela?

Fournir des détails supplémentaires,

Lorsque j'exécute la commande ci-dessus, j'obtiens environ 100 JPEG. Je suppose qu'il y a une correspondance de 1 à 1 (ou beaucoup à 1) entre ces JPEG et les images de la vidéo. Je voudrais connaître l'horodatage de l'image qui a été sortie en tant qu'image JPEG 'i'.

De plus, j'ai essayé ffprobe mais je trouve qu'il rapporte même la durée de la vidéo de manière inexacte :(

12
Srini

Ce que vous pouvez faire est de "simuler" le processus d'écriture d'image en filtrant avec le filtre fps, puis en utilisant ffprobe pour afficher les horodatages des images générées. Cela signifie qu’à 25 ips, la 50ème image (comme votre 50ème image) aura un PTS de 2,00 secondes.

Vous le faites comme ça:

ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0

Est-ce que la sortie:

0
0.04
0.08
0.12
0.16
...

Ce sont les horodatages pour chaque image de sortie. Vous pouvez réellement combiner la liste des cadres et les horodatages:

 ls -1 image - *. jpeg> images.txt 
 ffprobe -f lavfi -i "movie = input.mp4, fps = fps = 25 [out0]" -show_frames -show_entries frame = pkt_pts_time -of csv = p = 0> frames.txt 
 coller des images.txt frames.txt> combine.txt 

Va créer un fichier avec:

image-0001.jpeg 0
image-0002.jpeg 0.04
image-0003.jpeg 0.08
image-0004.jpeg 0.12

Notez que cela peut entraîner des lignes superflues s'il y a trop de cadres ou trop de lignes de sortie d'informations. Cela semble un peu inexact là.

13
slhck