以前は、ffmpeg を使用してサーバー側で MP3 ファイルの長さを計算していましたが、これは正常に機能しているように見えました。今日、計算の一部が間違っていることがわかりました。何らかの理由で、ffmpeg はデュレーションを誤って計算し、可変ビット レートの mp3 ファイルでのみ発生するようです。
これをローカルでテストすると、ffmpeg が 2 つの余分な行を緑色で出力することに気付きました。
使用したコマンド:
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
素敵で温かいグーグルセッションの後、これに関するいくつかの投稿を発見しましたが、解決策は見つかりませんでした.
次に、最大期間を延長しようとしました。
ffmpeg -analyzeduration 999999999 -i song_9747c077aef8.mp3
この後、ffmpeg は 2 行目のみを返しました。
[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 は間違った値を返しています。