5

Tengo un curso de capacitación en video suministrado como archivos AVI. La mayoría de las pantallas se muestran como diapositivas con un puntero de mouse moviéndose sobre ellas.Cómo extraer diapositivas de un video usando python

Me gustaría capturar una captura de pantalla de la diapositiva automáticamente cuando la pantalla cambia (ignorando cuando la imagen cambia una pequeña cantidad debido al puntero del ratón se mueve alrededor.)

quiero hacer esto para que pueda Pegar las imágenes en una palabra o documento html al que puedo agregar notas mientras aprendo, como en el momento en que tomo capturas de pantalla, pero es muy lento y tedioso y el curso es muy largo (alrededor de 24 horas de tiempo total de reproducción).

Conozco bien a Python pero no estoy seguro de cómo voy a extraer imágenes fijas de un archivo de video y luego cómo comparar una con otra para ver cuánto difieren para decidir qué conservar y qué descartar.

¿Alguien puede sugerir cómo hacerlo?

Respuesta

10

Una herramienta como ffmpeg es adecuada para extraer imágenes de un video. Del manual:

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

Esto va a extraer un fotograma de vídeo por segundo desde el vídeo y es la salida en archivos denominados foo-001.jpeg, foo-002.jpeg, etc se reajustarán Imágenes para adaptarse a los nuevos valores WxH.

Comparandolos para las diferencias puede entonces hacerse por PIL y/o OpenCV.

EDIT: me he dado cuenta de que probablemente sería más eficiente que sólo se agarra el (marco intra) key frames, porque aquellos se producen cuando un cambio drástico en la escena sucede. Un google rápido más tarde tenemos esto:

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

gracias. el segundo ejemplo que no pude llegar a trabajar, incluso con la última versión de ffmpeg. El primer ejemplo funciona para lo que necesito. – zio

5

Lo que básicamente quieres es la detección de escenas. framedifferenceanalyzer es una prueba de concepto educativa en Python que hace exactamente eso, y debe proporcionar un buen punto de partida para aprender sobre el problema en sí.

En cuanto a implementarlo usted mismo, ffmpeg es la herramienta ideal para convertir un video en una secuencia de fotogramas. Probablemente no intente hacer esa parte en Python puro.

Para calcular la diferencia entre fotogramas, puede utilizar ImageMagick (su herramienta compare en particular). Hay varios enlaces de Python para ImageMagick, por ejemplo PythonMagick o magickwand, por nombrar solo dos.

También podría usar OpenCV para realizar el análisis de la imagen. OpenCV es una biblioteca de alto rendimiento, algoritmos de visión por computadora de alta calidad y probablemente una de las herramientas más poderosas para hacer cosas como esta. Sin embargo, asume que usted tiene cierto conocimiento sobre el procesamiento de la visión/imagen de la computadora y que ya tiene una buena idea de lo que está buscando.

+0

gracias. la herramienta de comparación funciona muy bien para mí junto con imagemagick en python. – zio

Cuestiones relacionadas