我曾经使用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/