Как получить продолжительность аудио для FileField в Django? - PullRequest
0 голосов
/ 02 декабря 2019

Рассмотрите возможность использования этой модели:

class MusicTrack(models.Model):
    """
    Represents a music track
    """

    title = models.CharField("Track title", max_length=300)
    audio_file = models.FileField("Audio file", upload_to='audio/%Y-%m-%d/')

    duration_seconds = models.PositiveIntegerField("Track duration ins seconds", blank=True, null=True)

    def __str__(self):
        return f"Music track \"{self.title}\""

Как узнать длительность звука в секундах и сохранить ее в базе данных?

1 Ответ

1 голос
/ 02 декабря 2019

Вы можете использовать мутаген для получения аудиоинформации, например длительности.

Чтобы сохранить ее, вы можете подключить сигнал pre_save к вашей модели django и обновить duration_seconds поле. Рекомендуется делать это только после обновления самого файла, чтобы уменьшить объем дискового ввода-вывода и улучшить производительность.

Код получателя сигнала будет примерно таким:

# considering model has audio_field = FileField()       
import mutagen

def some_pre_save_receiver(sender, instance, raw, using, update_fields, **kwargs):

    file_was_updated = False
    if hasattr(instance.audio_file, 'file') and isinstance(instance.audio_file.file, UploadedFile):
        file_was_updated = True

    if update_fields and "audio_file" in update_fields:
        file_was_updated = True          

    if file_was_updated:
        # read audio file metadata
        audio_info = mutagen.File(instance.audio_file).info
        # set audio duration in seconds, so we can access it in database
        instance.duration_seconds = int(audio_info.length)

        print(">> audio duration was was updated")

    else:
        print(">> file not changed - duration was NOT updated")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...