Imageio Python-Paket sollte tun, was Sie wollen. Hier ist ein Python-Schnipsel mit diesem Paket:
import pylab
import imageio
filename = '/tmp/file.mp4'
vid = imageio.get_reader(filename, 'ffmpeg')
nums = [10, 287]
for num in nums:
image = vid.get_data(num)
fig = pylab.figure()
fig.suptitle('image #{}'.format(num), fontsize=20)
pylab.imshow(image)
pylab.show()
können Sie auch direkt iterieren über die Bilder in der Datei (see the documentation):
for i, im in enumerate(vid):
print('Mean of frame %i is %1.1f' % (i, im.mean()))
installieren ImageIO können Sie Verwenden Sie pip:
pip install imageio
Eine andere Lösung wäre, moviepy zu verwenden (die einen ähnlichen Code verwenden, um Video zu lesen), aber ich denke, imageio ist leichter und macht den Job.
Antwort auf ersten Kommentar
Um, wenn die Nennframerate zu überprüfen die gleiche über die gesamte Datei ist, die Anzahl der Rahmen in der Iterator zählen:
count = 0
try:
for _ in vid:
count += 1
except RuntimeError:
print('something went wront in iterating, maybee wrong fps number')
finally:
print('number of frames counted {}, number of frames in metada {}'.format(count, vid.get_meta_data()['nframes']))
In [10]: something went wront in iterating, maybee wrong fps number
number of frames counted 454, number of frames in metada 461
um den Zeitstempel jedes Rahmens anzuzeigen:
try:
for num, image in enumerate(vid.iter_data()):
if num % int(vid._meta['fps']):
continue
else:
fig = pylab.figure()
pylab.imshow(image)
timestamp = float(num)/ vid.get_meta_data()['fps']
print(timestamp)
fig.suptitle('image #{}, timestamp={}'.format(num, timestamp), fontsize=20)
pylab.show()
except RuntimeError:
print('something went wrong')
Nun habe ich versucht, OpenCV, während ein Prototyp meiner Anwendung auf dem PC zu entwickeln. Aber da ich die App auf raspberry pi liefern werde, bewerte ich leichtere Alternativen, auch unter Berücksichtigung des Aufwands und der Abhängigkeiten, um opencv auf raspi zu kompilieren. – gaggio
Siehe auch [diese Übersicht] (https://github.com/danielballan/scikit-image/blob/video-guide/doc/source/user_guide/video.txt), die wir für das Benutzerhandbuch vorbereiten. –
@StefanvanderWalt: Die Übersicht ist eigentlich sehr hilfreich, danke. Es könnte verbessert werden, Image hinzuzufügen, was auch das Problem des Zugriffs auf eine bestimmte Frame-Nummer löst, die auch in Ihrem Review erwähnt wird. – gaggio