如何获取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 标记中不包含 TLETLEN 字段,仅包含 TSSE 字段。所以它告诉使用EncoderSettings = Lavf57.83.100,但没有告诉我们音频的长度或持续时间。

以上是关于如何获取mp3文件的持续时间的主要内容,如果未能解决你的问题,请参考以下文章

上传到 Firebase 存储时如何使用 Cloud Functions for FIrebase 获取 mp3 文件的持续时间

如何从多个音频文件中获取总音频持续时间

如何在 Perl 中获取 MP3 文件的长度?

如何获取音频文件的持续时间?

MP3/wav 音频文件的持续时间

php 获取 mp3 文件持续时间远程文件