代码之家  ›  专栏  ›  技术社区  ›  Maximilian Ballard

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

  •  0
  • Maximilian Ballard  · 技术社区  · 6 年前

    我发现了一些关于扩展和更改模型上save()函数的信息,但是其他一些人提到这样做是不好的做法,应该改为修改管理表单。任何帮助都会很好,我已经四处寻找并试图解决这个问题几个小时了。谢谢您。

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

    from moviepy.editor import *
    
    audio = VideoFileClip("test-file.mp4").audio
    audio.write_audiofile("audio.mp3")
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Maximilian Ballard    6 年前

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

    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)