#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. это не работает. этот набор изображений предназначен для создания миниатюры с картинки. но мы должны захватить кадр из загруженного видео, а затем сохранить его в каталоге. для захвата изображений мы должны открыть видео, а затем захватить кадр в течение заданной продолжительности видео. Дайте мне знать, если кто-нибудь может помочь с этим. Спасибо