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.