Imageio pacchetto python dovrebbe fare quello che vuoi. Ecco un frammento Python usando questo pacchetto:
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()
È inoltre possibile scorrere direttamente sopra le immagini del file (see the documentation):
for i, im in enumerate(vid):
print('Mean of frame %i is %1.1f' % (i, im.mean()))
Per installare ImageIO è possibile utilizzare pip:
pip install imageio
Un'altra soluzione sarebbe quella di utilizzare moviepy (che utilizza un codice simile per leggere il video), ma penso che imageio sia più leggero e faccia il lavoro.
risposta al primo commento
Al fine di verificare se il frame rate nominale è la stessa su tutto il file, è possibile contare il numero di frame nella iteratore:
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
per visualizzare il timestamp di ciascun frame:
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')
Beh, ho provato OpenCV mentre lo sviluppo di un prototipo della mia applicazione su PC. Ma dato che distribuirò l'app su raspberry pi, sto valutando alternative più leggere, considerando anche lo sforzo e le dipendenze per compilare opencv su raspi. – gaggio
Vedere anche [questa panoramica] (https://github.com/danielballan/scikit-image/blob/video-guide/doc/source/user_guide/video.txt) che stiamo preparando per la guida dell'utente. –
@StefanvanderWalt: La panoramica è davvero molto utile, grazie. Potrebbe essere migliorato aggiungendo 'imageio', che risolve anche il problema dell'accesso a un numero di fotogramma specifico menzionato anche nella revisione. – gaggio