volumedetect フィルタを使うと、音声の平均の音量と最大の音量を調べられます。

基本コマンド

ffmpeg -i input.mp3 -af volumedetect -f null /dev/null

-f null /dev/null は、ファイルを書き出さないという指定です。結果は、FFmpeg のログと同じ場所(標準エラー出力)に表示されます。

出力の読み方

実行すると、ログの最後のほうに次のような行が表示されます。

[Parsed_volumedetect_0 @ 0x...] n_samples: 2646000
[Parsed_volumedetect_0 @ 0x...] mean_volume: -18.3 dB
[Parsed_volumedetect_0 @ 0x...] max_volume: -0.5 dB
[Parsed_volumedetect_0 @ 0x...] histogram_0db: 26
[Parsed_volumedetect_0 @ 0x...] histogram_1db: 98
[Parsed_volumedetect_0 @ 0x...] histogram_2db: 496
[Parsed_volumedetect_0 @ 0x...] histogram_3db: 1830
[Parsed_volumedetect_0 @ 0x...] histogram_4db: 4410
フィールド 説明
n_samples 調べたサンプルの数(全チャンネルの合計)
mean_volume 音声全体の平均の音量(dBFS)
max_volume 音声全体でいちばん大きいピークの音量(dBFS)
histogram_Xdb 音量が -X dB から -(X+1) dB の間(1 dB の幅)にあるサンプルの数。いちばん大きい音量から順に、合計が全体の 1/1000 に届くまで表示されます

dBFSとは

dBFS(decibels relative to full scale)は、デジタル音声の音量の単位です。デジタルで表せる最大の値を 0 として、そこからどれだけ小さいかを表します。

  • 0 dBFS:デジタルの最大値(これを超えると音が割れる、クリッピングの限界)
  • -6 dBFS:最大値の約半分の振幅
  • 値が大きいほど(0 に近いほど)大きな音

動画ファイルの音声を確認

ffmpeg -i input.mp4 -af volumedetect -f null /dev/null

動画ファイルでも同じように使えます。音声トラックが複数ある場合は、-map 0:a:1 のように調べるトラックを指定できます(0:a:1 は2本目の音声)。

ラウドネス正規化の前処理として使う

max_volume を見ると、音量をどこまで上げられるかがわかります。たとえば max_volume が -0.5 dBFS なら、0 dBFS まで +0.5 dB 上げられます。

1. volumedetectで現在の音量を確認

ffmpeg -i input.mp3 -af volumedetect -f null /dev/null

2. volumeフィルタで音量を調整

ffmpeg -i input.mp3 -af "volume=+0.5dB" output.mp3

人が感じる音の大きさ(ラウドネス)を正確にそろえるには、ITU-R BS.1770 の測り方に基づく loudnorm フィルタを使います。詳しくは「ラウドネス正規化」の記事で説明しています。

よくある使い方

音量が小さすぎるか確認

mean_volume が -30 dBFS 以下なら、録音のレベルが低いかもしれません。

ffmpeg -i input.mp3 -af volumedetect -f null /dev/null 2>&1 | grep -E "mean_volume|max_volume"

2>&1 | grep を付けると、平均と最大の2行だけを表示できます。

クリッピング(歪み)の確認

max_volume が 0.0 dB なら、音が割れている(クリッピングしている)可能性があります。histogram_0db は上限から 1 dB 以内にあるサンプルの数です。音割れしていない大きな音も数えるので、この数だけでは音割れの程度は分かりません。

関連記事