この記事でわかること

  • astats フィルタで音声の統計情報を測定する方法
  • RMS・Peak・DC offset・ダイナミックレンジの見方
  • チャンネル別の統計情報の取得
  • volumedetect との使い分け
  • 統計情報を活用した音声品質チェックの方法

テスト済みバージョン: FFmpeg 6.1で確認済み
対象 OS: Windows / macOS / Linux


astats フィルタとは

astats は音声ストリームのさまざまな統計情報をコンソールに出力するフィルタです。RMS(実効値)、Peakレベル、DC offset、ダイナミックレンジ、クリッピングなどを一度に測定できます。


基本的な使い方

音声統計を表示する(動画ファイル)

ffmpeg -i input.mp4 -af "astats" -f null /dev/null

出力はコンソールの stderr に表示されます。

音声ファイルの統計

ffmpeg -i input.mp3 -af "astats" -f null /dev/null

出力の読み方

実行すると以下のような情報が出力されます:

[Parsed_astats_0 @ ...] Channel: 1
[Parsed_astats_0 @ ...]   DC offset: 0.000002
[Parsed_astats_0 @ ...]   Min level: -0.999969
[Parsed_astats_0 @ ...]   Max level: 0.999939
[Parsed_astats_0 @ ...]   Peak level dB: -0.000263
[Parsed_astats_0 @ ...]   RMS level dB: -17.834118
[Parsed_astats_0 @ ...]   RMS peak dB: -12.456
[Parsed_astats_0 @ ...]   RMS trough dB: -40.123
[Parsed_astats_0 @ ...]   Crest factor: 32.789
[Parsed_astats_0 @ ...]   Flat factor: 0.000000
[Parsed_astats_0 @ ...]   Peak count: 0
[Parsed_astats_0 @ ...]   Noise floor dB: -90.234
[Parsed_astats_0 @ ...]   Dynamic range: 72.400
...
[Parsed_astats_0 @ ...] Overall
項目説明
DC offsetDCオフセット(0に近いほど良い)
Peak level dB最大瞬間ピークレベル(dBFS)
RMS level dB全体の平均RMSレベル(dBFS)
RMS peak dB最大RMSレベル
RMS trough dB最小RMSレベル
Crest factorクレストファクター(ピーク/RMS比)
Flat factor連続した同値サンプルの割合(クリッピング検出に利用)
Peak countクリッピングサンプル数
Dynamic rangeダイナミックレンジ(dB)

測定項目のフィルタリング

measure_perchannelmeasure_overall で出力する項目を選択できます。

RMS とピークレベルのみ表示

ffmpeg -i input.mp4 -af "astats=measure_perchannel=RMS_level+Peak_level" -f null /dev/null

全体統計のみ(チャンネル別は省略)

ffmpeg -i input.mp4 -af "astats=measure_perchannel=0" -f null /dev/null

メタデータとして取得する

metadata=1 オプションでフレームごとの統計をメタデータとして生成し、ametadata フィルタで出力することもできます:

ffmpeg -i input.mp4 -af "astats=metadata=1,ametadata=print:file=-" -f null /dev/null 2>&1 | head -50

短い区間ごとの統計(reset パラメータ)

reset パラメータを使うと、指定サンプル数ごとに統計をリセット・出力します:

ffmpeg -i input.mp4 -af "astats=reset=44100" -f null /dev/null

44100サンプル(44.1kHz では約1秒)ごとに統計をリセットします。時系列での音量変化を確認したい場合に有効です。


volumedetect との比較

フィルタ主な用途出力情報
astats詳細な音声品質診断RMS、Peak、DC offset、ダイナミックレンジなど多数
volumedetect簡易的な音量確認mean_volume、max_volume、ヒストグラム

volumedetect はシンプルで素早く音量を確認したい場合に、astats は詳細な品質チェックに適しています:

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

クリッピングの検出

Peak count が 0 より大きい、または Flat factor が高い場合はクリッピングが発生している可能性があります:

ffmpeg -i input.mp4 -af "astats=measure_perchannel=Peak_count+Flat_factor" -f null /dev/null

クリッピングが検出された場合は、volume フィルタで音量を下げるか、ソースのゲインを確認してください。


DC オフセットの確認と修正

DC offsetが大きい場合は highpass フィルタで除去できます:

ffmpeg -i input.mp4 -af "highpass=f=10" output.mp4

まず astats でDC offsetを確認してから適用することが推奨されます。


音声品質チェックの手順まとめ

  1. astats でRMS・Peak・DC offset・クリッピングを確認する
  2. クリッピングがある場合 → volume フィルタで音量を下げる
  3. DC offsetが大きい場合 → highpass フィルタで除去する
  4. RMSレベルが不均一な場合 → loudnorm フィルタで正規化する

関連リソース

長時間のエンコードや大量のバッチ処理を手元のPCで回すのが重い場合は、時間課金で使えるレンタルサーバーやVPSを検討する一案もあります。

お名前.comの高性能VPS

関連記事


動作確認: ffmpeg 6.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffmpeg-filters.html#astats