Вы можете использовать мутаген для получения аудиоинформации, например длительности.
Чтобы сохранить ее, вы можете подключить сигнал 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")