Django - 仅在文件更改时编码视频和音频文件

Django - Encode video and audio files only when the file is changed

我正在使用 django-storages 在 Amazon S3 上存储媒体文件。 我已经使用 boto3 开发了一个接口,以使用 Elastic Transcoder 对视频或音频文件进行编码。 此外,对于视频文件,我将添加仍然使用 Elastic Transcoder 的水印徽标。

流程如下:

  1. 客户端应用上传文件认为是我开发的 REST API -- 完成
  2. Django 将文件存储在 Amazon S3 上 -- 完成
  3. 如果是视频或音频,Django 将启动 Amazon Elastic Transcoder 作业来对文件进行编码。输出文件将添加到同一 S3 存储桶上的不同路径。
  4. 使用 Amazon SNS,Django 将在编码文件准备就绪时收到通知

要启动编码程序,我想使用post_save。这样我就可以检查文件是否已上传,然后启动 Amazon Elastic Transcoder。 示例:

@receiver(post_save, sender=MyModel)
def encode_file(sender, instance, created, **kwargs):
    if instance.content_type in ['video'] and instance.file:
        encode_file(instance.file) # Launch Amazon Elastic Transcoder

有没有更好的方法来仅针对视频或音频文件启动编码过程,并且仅在文件发生更改时启动?

您可以在models.py查看文件更新:

class MyModel(models.Model):
    ...

    def save(self, *args, **kwargs):
        if not self.id:
            pass # for create
        else:
            # update
            this = MyModel.objects.get(id=self.id)
            if this.file != self.file:
                encode_file(instance.file) # Launch Amazon Elastic Transcoder
        return super(MyModel, self).save(*args, **kwargs)

之前super().save()文件在数据库和内存中是不同的,所以你可以检查更新