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 以内にあるサンプルの数です。音割れしていない大きな音も数えるので、この数だけでは音割れの程度は分かりません。