この記事でわかること
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 offset | DCオフセット(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_perchannel と measure_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を確認してから適用することが推奨されます。
音声品質チェックの手順まとめ
astatsでRMS・Peak・DC offset・クリッピングを確認する- クリッピングがある場合 →
volumeフィルタで音量を下げる - DC offsetが大きい場合 →
highpassフィルタで除去する - RMSレベルが不均一な場合 →
loudnormフィルタで正規化する
関連リソース
長時間のエンコードや大量のバッチ処理を手元のPCで回すのが重い場合は、時間課金で使えるレンタルサーバーやVPSを検討する一案もあります。
関連記事
動作確認: ffmpeg 6.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffmpeg-filters.html#astats