Jak uzyskać rzeczywisty, rzeczywisty czas trwania po stronie pliku MP3 (VBR lub CBR)

Kiedyś obliczałem czas trwania plików MP3 po stronie serwera za pomocą ffmpeg - który wydawał się działać dobrze. Dzisiaj odkryłem, że niektóre obliczenia były błędne. Jakoś z jakiegoś powodu ffmpeg błędnie obliczy czas trwania i wydaje się, że dzieje się to tylko w przypadku plików mp3 o zmiennej przepływności.

Podczas testowania tego lokalnie zauważyłem, że ffmpeg wydrukował dwie dodatkowe linie na zielono.

Użyte polecenie:

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

ffmpeg mówi:

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

Po miłej, ciepłej sesji Google odkryłem kilka postów na ten temat, ale nie znaleziono żadnego rozwiązania.

Następnie próbowałem zwiększyć maksymalny czas trwania:

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

Następnie ffmpeg zwrócił tylko drugą linię:

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

Ale w obu przypadkach obliczony czas trwania był po prostu błędny. Porównując go do VLC zauważyłem, że czas trwania jest prawidłowy.

Po kolejnych badaniach natknąłem się na mp3info - które zainstalowałem i użyłem.

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

mp3info zwrócił następniePOPRAWNY czas trwania, ale tylko jako liczba całkowita, której nie mogę użyć, ponieważ potrzebuję tutaj dokładniejszej liczby. Powód tego wyjaśniono poniżej w komentarzu użytkownikablahdiblah - mp3info po prostu pobiera informacje ID3 z pliku i nie wykonuje żadnych obliczeń.

Próbowałem również użyć mplayera, aby odzyskać czas trwania, ale tak samo jak ffmpeg, mplayer zwraca niewłaściwą wartość.

questionAnswers(4)

yourAnswerToTheQuestion