27

以前は、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 は間違った値を返しています。

4

7 に答える 7

24

正しい情報を返す sox を使用して、この問題の適切な解決策を最終的に見つけました。

sox file.mp3 -n stat
Samples read:          19321344
Length (seconds):    219.062857
Scaled by:         2147483647.0
Maximum amplitude:     1.000000
Minimum amplitude:    -1.000000
Midline amplitude:    -0.000000
Mean    norm:          0.141787
Mean    amplitude:     0.000060
RMS     amplitude:     0.191376
Maximum delta:         0.947598
Minimum delta:         0.000000
Mean    delta:         0.086211
RMS     delta:         0.115971
Rough   frequency:         4253
Volume adjustment:        1.000

長さ (秒): 219.062857

于 2012-05-13T12:20:44.123 に答える
5

Ilogan (LordNeckbeard) からソリューションを拡張します。統計のみを取得するには、フラグ -v quiet -stats を追加できます

ffmpeg -v quiet -stats -i input.mp3 -f null - 
于 2018-12-06T09:30:31.280 に答える