Как сделать снимок или создать миниатюру из видео в python django restframework?

#python #django #django-rest-framework

Вопрос:

На самом деле, я пытаюсь сделать снимок, чтобы сделать миниатюру из загруженного видео в python Django. А затем я должен сохранить этот эскиз в отдельном поле модели для последующего использования.

 class Post(models.Model):
    user= models.ForeignKey(Profile, on_delete=models.CASCADE)
    video = models.FileField(upload_to='post_videos/%Y/%m', null=True)
    thumbnail = models.ImageField(upload_to='post_images/%Y/%m', null=True)
 

Я просто хочу загрузить видео, захватить миниатюру в любое время, а затем сохранить ее в поле миниатюр. Пожалуйста, дайте мне знать, если кто-нибудь сможет мне помочь. Я попытался использовать FFmpeg и moviepy, но не смог решить проблему. жду помощи. Спасибо

Ответ №1:

Вы можете сделать это с помощью ffmpeg. С какой проблемой вы столкнулись?

 import subprocess
video_input_path = post_object.video.path
# or whatever the path of the uploaded video file is
img_output_path = 'path/to/image'
subprocess.call(['ffmpeg', '-i', video_input_path, '-ss', '00:00:00.000', '-vframes', '1', img_output_path])
 

А затем вы можете назначить его полю миниатюр

Комментарии:

1. def save(self, *args, **kwargs): super(Post, self).save(*args, **kwargs) if self.post_image: picture = Image.open(self.post_image.path) picture.save(self.post_image.path, optimize=True, quality=10) я хочу использовать метод сохранения для миниатюр. Я не знаю, как это сделать для миниатюр, сгенерированных видео.

2. Используйте django-imagekit , это сэкономит вам много времени.

3. @kinshukdua сохраняет ли django-imagkit соотношение изображения при использовании процессоров=[Изменение размера(100, 50)] ?

4. это не работает. этот набор изображений предназначен для создания миниатюры с картинки. но мы должны захватить кадр из загруженного видео, а затем сохранить его в каталоге. для захвата изображений мы должны открыть видео, а затем захватить кадр в течение заданной продолжительности видео. Дайте мне знать, если кто-нибудь может помочь с этим. Спасибо