如何获取mp3文件的持续时间
Posted
技术标签:
【中文标题】如何获取mp3文件的持续时间【英文标题】:How to get the duration of an mp3 file 【发布时间】:2019-01-22 02:12:10 【问题描述】:我尝试了很多方法,但没有得到一个 mp3 文件的确切长度值。
使用moviepy:
audiofile = AudioFileClip(url)
print("duration moviepy: " + str(audiofile.duration))
我得到结果:
duration moviepy: 183.59
使用诱变剂:
from mutagen.mp3 import MP3
audio = MP3(url)
print("duration mutagen: " + str(audio.info.length))
我收到了另一个持续时间值:
duration mutagen: 140.93416666666667
使用 windows 媒体播放器打开文件时的实际时长值:2m49s
我不知道我的音频文件会发生什么,我从音乐网站测试了一些文件,但仍然得到正确的值。 This is my audio file
【问题讨论】:
你分享的音频文件是 3:04 当你下载文件时它会显示 2:49,我不明白发生了什么 这很奇怪。现在我在想你的文件中的频率标题有问题。也许它丢失了,不同的音频库/源正在提出不同的默认频率来填补空白。 链接的音频文件有大约 1,800 个错误,其中音频帧后面是垃圾,大约占整个文件的一半。因此,根据所有音频帧的持续时间求和计算的时间应该是根据文件长度(以字节为单位)估计的时间的两倍。 【参考方案1】:试试pyxsox
我尝试使用 pysox 来the audio file which includes this question post
注意:pysox 需要 SOX cli。
使用方法是这样的。
import sox
mp3_path = "YOUR STRANGE MP3 FILEPATH"
length = sox.file_info.duration(mp3_path)
print("duration sec: " + str(length))
print("duration min: " + str(int(length/60)) + ':' + str(int(length%60)))
结果是
duration sec: 205.347982
duration min: 3:25
以及有关该 mp3 文件持续时间的其他信息。
ID3 information => 2.49
mutagen => 2:20
pysox => 3:25
actural length => 3:26
诱变剂似乎只是读取 ID3 信息。
【讨论】:
奇数。该文件在 ID3 标记中不包含TLE
或 TLEN
字段,仅包含 TSSE
字段。所以它告诉使用EncoderSettings = Lavf57.83.100
,但没有告诉我们音频的长度或持续时间。以上是关于如何获取mp3文件的持续时间的主要内容,如果未能解决你的问题,请参考以下文章
上传到 Firebase 存储时如何使用 Cloud Functions for FIrebase 获取 mp3 文件的持续时间