Раньше я вычислял продолжительность 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 возвращает неправильное значение.