Как получить реальную длительность MP3-файла (VBR или CBR) на стороне сервера

Раньше я вычислял продолжительность MP3-файлов на стороне сервера с помощью ffmpeg, и это, похоже, работало нормально. Сегодня я обнаружил, что некоторые расчеты были неправильными. Каким-то образом, по какой-то причине, 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 я обнаружил несколько сообщений по этому вопросу, но решение не было найдено.

Затем я попытался увеличить максимальную продолжительность:

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 возвращает неправильное значение.

22
задан SquareCat 18 March 2014 в 14:21
поделиться