Как преобразовать файл в mp3 перед сохранением django?

Я нашел некоторую информацию о расширении и изменении функции save() в модели, но несколько других людей упомянули, что это плохая практика, и вместо этого следует изменить форму администратора. Любая помощь была бы отличной, я искал и пытался решить эту проблему в течение нескольких часов. Спасибо.

Я хотел бы, чтобы этот код был выполнен до того, как файл будет сохранен, а аудиофайл будет сохранен в поле файла модели.

from moviepy.editor import *

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

person Max Ballard    schedule 08.08.2018    source источник
comment
Добавьте пример кода к вашему вопросу.   -  person Jeroen Heier    schedule 08.08.2018


Ответы (1)


Хорошо, значит, я решил это сам. Я не знаю, правильный ли это способ или безопасный способ сделать это, но это работает. Любые советы/предложения или лучшие решения были бы замечательными. Спасибо!

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)
person Max Ballard    schedule 08.08.2018