gpt4 book ai didi

python - 如何获取 Django 中 FileField 的音频持续时间?

转载 作者:行者123 更新时间:2023-12-02 22:48:21 25 4
gpt4 key购买 nike

考虑使用此模型:

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}\""

如何获取音频持续时间(以秒为单位)并将其保存在数据库中?

最佳答案

您可以使用mutagen用于获取音频信息,例如持续时间。

要保存它,您可以连接 pre_save向您的 django 模型发出信号并更新 duration_seconds 字段。最好仅在更新实际文件时执行此操作,以减少磁盘 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")

关于python - 如何获取 Django 中 FileField 的音频持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59131403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com