我曾经使用ffmpeg来计算服务器端MP3文件的持续时间-似乎工作正常。今天,我发现某些计算是错误的。由于某种原因,ffmpeg会错误地计算持续时间,并且似乎仅在可变比特率的mp3文件中发生。

在本地测试时,我注意到ffmpeg用绿色打印了另外两行。

使用的命令:

ffmpeg -i song_9747c077aef8.mp3

ffmpeg说:
[mp3 @ 0x102052600] max_analyze_duration 5000000 reached at 5015510
[mp3 @ 0x102052600] Estimating duration from bitrate, this may be inaccurate

在一个愉快,热情的Google session 之后,我发现了一些与此相关的帖子,但未找到解决方案。

然后,我尝试增加最大持续时间:
ffmpeg -analyzeduration 999999999 -i song_9747c077aef8.mp3

之后,ffmpeg仅返回第二行:
[mp3 @ 0x102052600] Estimating duration from bitrate, this may be inaccurate

但无论哪种情况,计算出的持续时间都是完全错误的。与VLC相比,我注意到持续时间是正确的。

经过更多研究后,我偶然发现了mp3info-我安装并使用了它。
mp3info -p "%S" song_9747c077aef8.mp3

mp3info然后返回正确的持续时间,但仅作为整数,我不能使用它,因为我在这里需要一个更准确的数字。用户blahdiblah在下面的评论中对此原因进行了解释-mp3info只是从文件中提取ID3信息,而不实际执行任何计算。

我还尝试使用mplayer来检索持续时间,但是就像ffmpeg一样,mplayer返回的值也不正确。

最佳答案

我终于找到了使用sox来解决此问题的正确方法-返回正确的信息。

sox file.mp3 -n stat
Samples read:          19321344
Length (seconds):    219.062857
Scaled by:         2147483647.0
Maximum amplitude:     1.000000
Minimum amplitude:    -1.000000
Midline amplitude:    -0.000000
Mean    norm:          0.141787
Mean    amplitude:     0.000060
RMS     amplitude:     0.191376
Maximum delta:         0.947598
Minimum delta:         0.000000
Mean    delta:         0.086211
RMS     delta:         0.115971
Rough   frequency:         4253
Volume adjustment:        1.000

长度(秒):219.062857

关于ffmpeg - 如何获取服务器端MP3文件(VBR或CBR)的真实,实际持续时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10437750/

10-12 23:38