Dat*_*eed 2 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 = models.PositiveIntegerField("Track duration ins seconds", blank=True, null=True)
def __str__(self):
return f"Music track \"{self.title}\""
Run Code Online (Sandbox Code Playgroud)
如何获取以秒为单位的音频持续时间并将其保存在数据库中?
您可以使用诱变剂来获取音频信息,例如持续时间。
要保存它,您可以将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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |