Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在保存django之前将文件转换为mp3?_Django_Django Models_Django Forms_Django File Upload - Fatal编程技术网

如何在保存django之前将文件转换为mp3?

如何在保存django之前将文件转换为mp3?,django,django-models,django-forms,django-file-upload,Django,Django Models,Django Forms,Django File Upload,我在模型上找到了一些关于扩展和更改save()函数的信息,但是其他一些人提到这样做是不好的做法,应该修改管理表单。任何帮助都将是巨大的,我一直在四处寻找,并试图解决这几个小时了。多谢各位 我希望在保存文件之前执行此代码,并将音频文件保存到模型文件字段 from moviepy.editor import * audio = VideoFileClip("test-file.mp4").audio audio.write_audiofile("audio.mp3") 好吧,我自己解决了。我不知

我在模型上找到了一些关于扩展和更改save()函数的信息,但是其他一些人提到这样做是不好的做法,应该修改管理表单。任何帮助都将是巨大的,我一直在四处寻找,并试图解决这几个小时了。多谢各位

我希望在保存文件之前执行此代码,并将音频文件保存到模型文件字段

from moviepy.editor import *

audio = VideoFileClip("test-file.mp4").audio
audio.write_audiofile("audio.mp3")

好吧,我自己解决了。我不知道这是正确的方法还是安全的方法,但它是有效的。任何提示/建议或更好的解决方案都会很好。谢谢大家!

from django.db import models
from django.core.exceptions import ValidationError
from moviepy.editor import *

def update_filename(instance, filename):
    return filename[0:-4] + ".mp3"

def process_file(file):
    file_audio = VideoFileClip(file.temporary_file_path()).audio
    new_file_path = file.temporary_file_path()[:-4] + ".mp3"
    file_audio.write_audiofile(new_file_path)
    file.file.name = new_file_path

class Sermon(models.Model):
    date = models.DateField()
    audio = models.FileField(upload_to=update_filename)

    def clean(self):
        super().clean()
        extension = self.audio.name[len(self.audio.name) - 4:]
        file = self.audio.file
        file.__class__
        if extension != ".mp3" and extension != ".mp4":
            raise ValidationError("Warning Warning Warning")
        elif extension == ".mp4":
            process_file(file)

在问题中添加一个代码示例。