Python 如何获取Django中文件字段的音频持续时间?
考虑使用此模型:Python 如何获取Django中文件字段的音频持续时间?,python,django,audio,Python,Django,Audio,考虑使用此模型: 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 = mo
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}\""
如何获取以秒为单位的音频持续时间并将其保存在数据库中?您可以使用它来获取音频信息,如持续时间
要保存它,您可以将信号连接到django型号,并更新持续时间\u秒
字段。最好仅在实际文件更新时执行此操作,以减少磁盘i/o并提高性能
信号接收器代码如下所示:
# 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")