Я использовал для вычисления продолжительности файлов MP3 файлов на стороне сервера, используя ffmpeg, который, казалось, работал нормально. Сегодня я обнаружил, что некоторые вычисления были неправильными. Почему-то, по какой-то причине, ffmpeg будет просчитывать продолжительность и, кажется, происходит только с файлами с переменной скоростью передачи в битрейтах.
При локальном тестировании я заметил, что 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 затем вернула длительность CORRECT, но только как целое число, которое я не могу использовать, поскольку мне нужно более точное число здесь. Причина этого была объяснена в комментарии ниже, пользователем blahdiblah - mp3info просто вытаскивает ID3-информацию из файла и фактически не выполняет никаких вычислений.
Я также попытался использовать mplayer для извлечения продолжительности, но так же, как ffmpeg, mplayer возвращает неправильное значение.