Como obter a duração real e real de um servidor de arquivos MP3 (VBR ou CBR)

Eu costumava calcular a duração dos arquivos MP3 do lado do servidor usando ffmpeg - o que parecia funcionar bem. Hoje eu descobri que alguns dos cálculos estavam errados. De alguma forma, por alguma razão, o ffmpeg irá calcular incorretamente a duração e parece acontecer apenas com arquivos mp3 de taxa de bits variável.

Ao testar isso localmente, notei que o ffmpeg imprimiu duas linhas extras em verde.

Comando utilizado:

<code>ffmpeg -i song_9747c077aef8.mp3
</code>

ffmpeg diz:

<code>[mp3 @ 0x102052600] max_analyze_duration 5000000 reached at 5015510
[mp3 @ 0x102052600] Estimating duration from bitrate, this may be inaccurate
</code>

Depois de uma boa e gostosa sessão no google, descobri algumas postagens sobre isso, mas nenhuma solução foi encontrada.

Então tentei aumentar a duração máxima:

<code>ffmpeg -analyzeduration 999999999 -i song_9747c077aef8.mp3
</code>

Depois disso, o ffmpeg retornou apenas a segunda linha:

<code>[mp3 @ 0x102052600] Estimating duration from bitrate, this may be inaccurate
</code>

Mas em ambos os casos, a duração calculada foi simplesmente errada. Comparando-o ao VLC, notei que a duração está correta.

Depois de mais pesquisas eu tropecei em mp3info - que eu instalei e usei.

<code>mp3info -p "%S" song_9747c077aef8.mp3
</code>

mp3info então retornou oCORRIGIR duração, mas apenas como um número inteiro, o que eu não posso usar como eu preciso de um número mais preciso aqui. A razão para isso foi explicada em um comentário abaixo, por usuárioblahdiblah - O mp3info está simplesmente puxando informações ID3 do arquivo e não realizando nenhum cálculo.

Eu também tentei usar o mplayer para recuperar a duração, mas assim como o ffmpeg, o mplayer está retornando o valor errado.

questionAnswers(4)

yourAnswerToTheQuestion