5

Ho un corso di formazione video fornito come file AVI. La maggior parte degli schermi sono mostrati come diapositive con un puntatore del mouse che si muove su di loro.Come estrarre le diapositive da un video usando python

vorrei catturare uno screenshot della slitta automaticamente quando lo schermo cambia (ignorando quando l'immagine cambia una piccola quantità a causa del puntatore del mouse si muove intorno.)

voglio fare questo in modo che posso incollare le immagini in un documento word o html che posso aggiungere note come imparo dal momento in cui sto prendendo screenshot ma è molto lento e noioso e il corso è molto lungo (circa 24 ore di tempo totale di riproduzione).

Conosco bene il pitone ma non sono sicuro di come fare per estrarre le immagini da un file video e quindi come confrontarne uno ancora per vedere quanto differiscono per decidere quali tenere e quali scartare.

Qualcuno può suggerire come procedere?

risposta

10

Uno strumento come ffmpeg è adatto per l'estrazione di immagini da un video. Dal manuale:

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg 

Questo estrarrà un fotogramma video al secondo dal video e volontà loro output in file denominati foo-001.jpeg, foo-002.jpeg, ecc Le immagini verranno riadattati secondo montare i nuovi valori LxA.

Confrontandoli per differenze, è quindi possibile farlo con PIL e/o OpenCV.

EDIT: ho capito che probabilmente sarebbe più efficiente per afferrare solo la (struttura intra) key frames, perché quelli si verificano quando un drastico cambiamento nella scena accade. A breve google successivo abbiamo questo:

ffmpeg -i foo.avi -vsync 0 -vf select="eq(pict_type\,PICT_TYPE_I)" -s WxH -f image2 foo-%03d.jpeg 
+0

grazie. il secondo esempio non sono riuscito a lavorare, anche con l'ultima versione di ffmpeg. Il primo esempio funziona per ciò di cui ho bisogno. – zio

5

Ciò che in pratica è il rilevamento di scene. framedifferenceanalyzer è un proof of concept educativo in Python che fa esattamente questo, e dovrebbe fornire un buon punto di partenza per conoscere il problema stesso.

Per quanto riguarda l'implementazione da soli, ffmpeg è lo strumento ideale per convertire un video in una sequenza di frame: probabilmente non tenterei di eseguire questa parte in Python puro.

Per calcolare la differenza tra i frame è possibile utilizzare ImageMagick (lo strumento compare in particolare). Esistono diversi collegamenti Python per ImageMagick, ad esempio PythonMagick o magickwand per nominarne solo due.

È anche possibile utilizzare OpenCV per eseguire l'analisi dell'immagine. OpenCV è una libreria di algoritmi di visione artificiale ad alte prestazioni e alta qualità e probabilmente uno degli strumenti, se non il più potente, per fare cose del genere. Tuttavia, si presuppone che tu abbia una certa conoscenza della visione artificiale/elaborazione delle immagini e già hai una buona idea di ciò che stai cercando.

+0

grazie. lo strumento di confronto funziona alla grande per me insieme a imagemagick in python. – zio