2009-11-20 13 views
17

Ich muss Thumbnails für eine Videodatei erstellen, nachdem ich sie in eine Webapp mit Python hochgeladen habe.Erstellen von Thumbnails aus Videodateien mit Python

Wie würde ich darüber gehen ... Ich brauche eine Bibliothek, die grundsätzlich entweder für mich tun kann, oder die Bildrahmen aus Videodateien (verschiedener Formate) automatisch lesen kann.

+1

See [diese Antwort] [1], wie es mit GStreamer und Python zu tun. [1]: http://stackoverflow.com/a/16478342/1049318 –

Antwort

8

Eine einfache Kombination von PyMedia und PIL würde den Trick für AVI, ASF oder MPEG-Dateien tun. Mit PyMedia können Sie die Frames extrahieren (mit der Routine decoder()), während PIL eine einfache thumbnail() Routine hat.

+0

sehr geschätzt. – Alterlife

+0

PyMedia funktioniert nicht auf Python 3.x haben Sie eine andere mögliche Lösung? – EduardoMaia

+0

@EduardoMaia In diesen Tagen würde ich wahrscheinlich mit dem Aufruf eines externen Pakets wie ffmpeg oder libav unter https://libav.org/ beginnen. –

1

Schauen Sie sich PythonMagick, eine Python-Schnittstelle zu ImageMagick. Das sollte haben, was du brauchst. (Haftungsausschluss: Ich habe die Python-Schnittstelle zuvor nicht verwendet, aber ich weiß ImageMagick ist gut mojo.)

3

Sie können die Youtube-API zum Speichern und Umcodieren verwenden und die Feed-Thumbnails kostenlos abrufen. Ehrlich gesagt, das ist der einfachste Weg, um Online-Videos zu bearbeiten, und ich schreibe nicht nur einen Drittanbieter-Dienst, ich bin ein sehr glücklicher Nutzer dieser API und die internen Videopfade, die ich dank ihr löschen konnte.

10

Sie ffvideo

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

ffvideo funktioniert nicht auf Python 3.x haben Sie eine andere mögliche Lösung? – EduardoMaia

0
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_widht, thumb_height), 0, 0, cv2.INTER_LINEAR) 
#to save we have two options 
#1) save on a file 
cv2.imwrite(save_on_filename) 
#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() 

"Schwelle" verwenden können, ist eine ganze Zahl. Wenn Sie einen Videoframe erhalten, kann er sehr schwarz, weiß usw. sein, um ein gutes Thumbnail zu erhalten, können Sie den Mittelwert aller Pixel im Frame festlegen.

2

Ich konnte ffvideo auf OSX Sierra nicht installieren, also entschied ich mich, mit ffmpeg zu arbeiten.

OSX:

brew install ffmpeg 

Linux:

apt-get install ffmpeg 

Python 3-Code:

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]) 
Verwandte Themen