Подтвердить что ты не робот

Создание эскизов из видеофайлов с помощью Python

Мне нужно создать эскизы для видеофайла, как только я загрузился в webapp, работающий на python.

Как бы я это делал... Мне нужна библиотека, которая в принципе может сделать это для меня, или что вы можете автоматически считывать кадры изображений из видеофайлов (нескольких форматов).

4b9b3361

Ответ 1

Простая комбинация PyMedia и PIL сделает трюк для файлов AVI, ASF или MPEG. PyMedia позволяет извлекать кадры (используя процедуру decoder()), в то время как PIL имеет обычную миниатюру().

Ответ 2

Вы можете использовать ffvideo

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

Ответ 3

Вы можете использовать Youtube API для хранения и транскодирования и бесплатно получить миниатюры каналов. Честно говоря, это самый простой способ обработки онлайн-видео, и я не просто шиллинг стороннего сервиса, я очень счастливый пользователь этого API и внутренние пути видео, которые я смог удалить благодаря этому.

Ответ 4

Посмотрите PythonMagick, интерфейс Python для ImageMagick. Это должно иметь то, что вам нужно. (Отказ от ответственности: я раньше не использовал интерфейс Python, но я знаю, что ImageMagick - хороший mojo.)

Ответ 5

Я не смог установить ffvideo на OSX Sierra, поэтому решил работать с 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])

Ответ 6

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

"порог" - целое число. Когда вы получаете видеокадр, он может быть очень черным, белым и т.д., Чтобы получить хороший эскиз, вы можете указать среднее значение всего пикселя в кадре.