Creando miniaturas de archivos de video con Python

Necesito crear miniaturas para un archivo de video una vez que lo haya cargado en una aplicación web que ejecuta python.

¿Cómo haría esto? Necesito una biblioteca que básicamente pueda hacer esto por mí o que pueda leer los marcos de imágenes de archivos de video (en varios formatos) automáticamente.

Una simple combinación de PyMedia y PIL haría el truco para archivos AVI, ASF o MPEG. PyMedia le permite extraer los cuadros (utilizando la rutina del decodificador ()), mientras que PIL tiene una rutina simple de miniaturas ().

Puedes usar ffvideo

from ffvideo import VideoStream pil_image = VideoStream('0.flv').get_frame_at_sec(5).image() pil_image.save('frame5sec.jpeg') 

No pude instalar ffvideo en OSX Sierra, así que decidí trabajar con ffmpeg.

OSX:

 brew install ffmpeg 

Linux:

 apt-get install ffmpeg 

Código de Python 3:

 import subprocess video_input_path = '/your/video.mp4' img_output_path = '/your/image.jpg' subprocess.call(['ffmpeg', '-i', video_input_path, '-ss', '00:00:00.000', '-vframes', '1', img_output_path]) 

Puede usar la API de Youtube para el almacenamiento y la transencoding y obtener las miniaturas de noticias de forma gratuita. Honestamente, esa es la forma más fácil de manejar el video en línea y no solo estoy ofreciendo un servicio de terceros, soy un usuario muy feliz de esa API y de las rutas de video internas que pude eliminar gracias a ella.

 import cv2 vcap = cv2.VideoCapture(filename) res, im_ar = vcap.read() while im_ar.mean() < threshold and res: res, im_ar = vcap.read() im_ar = cv2.resize(im_ar, (thumb_width, thumb_height), 0, 0, cv2.INTER_LINEAR) #to save we have two options #1) save on a file cv2.imwrite(save_on_filename, im_ar) #2)save on a buffer for direct transmission res, thumb_buf = cv2.imencode('.png', im_ar) # '.jpeg' etc are permitted #get the bytes content bt = thumb_buf.tostring() 

"umbral" es un número entero. Cuando obtiene un cuadro de video, puede ser muy negro, blanco, etc. Para obtener una buena imagen en miniatura, puede especificar el valor medio de todos los píxeles en el cuadro.

Mire en PythonMagick , una interfaz de Python para ImageMagick. Eso debería tener lo que necesitas. (Descargo de responsabilidad: no he usado la interfaz de Python antes, pero sé que ImageMagick es un buen mojo).