Django - 仅在文件更改时编码视频和音频文件
Django - Encode video and audio files only when the file is changed
我正在使用 django-storages
在 Amazon S3 上存储媒体文件。
我已经使用 boto3 开发了一个接口,以使用 Elastic Transcoder 对视频或音频文件进行编码。
此外,对于视频文件,我将添加仍然使用 Elastic Transcoder 的水印徽标。
流程如下:
- 客户端应用上传文件认为是我开发的 REST API -- 完成
- Django 将文件存储在 Amazon S3 上 -- 完成
- 如果是视频或音频,Django 将启动 Amazon Elastic Transcoder 作业来对文件进行编码。输出文件将添加到同一 S3 存储桶上的不同路径。
- 使用 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()
文件在数据库和内存中是不同的,所以你可以检查更新
我正在使用 django-storages
在 Amazon S3 上存储媒体文件。
我已经使用 boto3 开发了一个接口,以使用 Elastic Transcoder 对视频或音频文件进行编码。
此外,对于视频文件,我将添加仍然使用 Elastic Transcoder 的水印徽标。
流程如下:
- 客户端应用上传文件认为是我开发的 REST API -- 完成
- Django 将文件存储在 Amazon S3 上 -- 完成
- 如果是视频或音频,Django 将启动 Amazon Elastic Transcoder 作业来对文件进行编码。输出文件将添加到同一 S3 存储桶上的不同路径。
- 使用 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()
文件在数据库和内存中是不同的,所以你可以检查更新