使用Python从视频文件创建缩略图

时间:2009-11-20 19:02:27

标签: python video thumbnails

我上传到运行python的webapp后,我需要为视频文件创建缩略图。

我将如何解决这个问题...我需要一个基本上可以为我执行此操作的库,或者可以自动从视频文件(多种格式)中读取图像帧的库。

7 个答案:

答案 0 :(得分:11)

您可以使用ffvideo

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

答案 1 :(得分:8)

PyMediaPIL的简单组合可以解决AVI,ASF或MPEG文件的问题。 PyMedia允许你提取帧(使用decoder()例程),而PIL有一个简单的thumbnail()例程。

答案 2 :(得分:6)

我无法在OSX Sierra上安装ffvideo所以我决定使用ffmpeg。

OSX:

brew install ffmpeg

Linux的:

apt-get install ffmpeg

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

答案 3 :(得分:3)

您可以使用Youtube API进行存储和转码,并免费获取Feed缩略图。老实说,这是处理在线视频的最简单方式,我不仅仅是第三方服务,我是该API的非常满意的用户以及我能够删除的内部视频路径。

答案 4 :(得分:2)

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()

&#34;阈值&#34;是一个整数。当你得到一个视频帧时,它可以是非常黑,白等等,以获得一些好的缩略图,你可以指定帧中所有像素的平均值。

答案 5 :(得分:1)

查看PythonMagick,这是ImageMagick的Python接口。那应该有你需要的东西。 (免责声明:我以前没有使用过Python接口,但我知道ImageMagick是好的魔法。)

答案 6 :(得分:0)

您可以使用在GitHub上找到的Python脚本pyvideothumbnailer,该脚本使用MoviePyMediaInfo和PIL分支Pillow。它应该为您完成全部工作。