この記事でわかること
signalstatsフィルタで取得できる統計情報の種類- フレームごとの映像信号を数値で出力する方法
- CSV形式でデータを書き出してグラフ化する方法
- 放送品質チェックへの活用
drawtextとの組み合わせで統計をオーバーレイ表示する方法
テスト済みバージョン: FFmpeg 6.1
対象 OS: Windows / macOS / Linux
signalstatsとは
signalstats はFFmpegに内蔵された映像分析フィルタです。各フレームの輝度(Y)・色差(Cb/Cr)の統計値をフレームメタデータとして出力します。
主な用途:
- 放送コンテンツのQC(品質チェック)
- クリッピング(輝度が0または255を超えている部分)の検出
- 映像全体のノイズレベル分析
- フレームごとの明度変化の追跡
取得できる統計情報
| 統計名 | 説明 |
|---|---|
YMIN | 輝度の最小値(0〜255) |
YMAX | 輝度の最大値(0〜255) |
YAVG | 輝度の平均値 |
YRMS | 輝度のRMS(二乗平均平方根) |
UMIN/UMAX/UAVG | Cb(青色差)成分 |
VMIN/VMAX/VAVG | Cr(赤色差)成分 |
SATMIN/SATMAX/SATAVG | 彩度 |
HUEMED/HUEAVG | 色相の中央値・平均値 |
TOUT | クリップしたピクセル(輝度が最大または最小)の割合 |
VREP | 垂直ライン反復(VHS等のアーティファクト検出) |
BRNG | 放送範囲外(0〜255の合法範囲外)のピクセル割合 |
基本的な使い方
統計情報を標準エラーに出力する:
ffmpeg -i input.mp4 -vf signalstats -f null /dev/null
出力例(標準エラー):
[Parsed_signalstats_0 @ ...] n:0 YMIN:16 YMAX:235 YAVG:118.2 YRMS:119.5 ...
フレームメタデータとして取得する
signalstats の出力をメタデータとして保存し、ffprobe で読み出す方法:
ffmpeg -i input.mp4 -vf signalstats=stat=tout+vrep+brng,metadata=mode=print:file=stats.txt -f null /dev/null
stats.txt にフレームごとの統計情報が書き出されます。
CSV形式で出力してグラフ化
ffprobe -f lavfi -i "movie=input.mp4,signalstats" \
-show_frames -select_streams v \
-print_format csv \
-show_entries frame_tags=lavfi.signalstats.YAVG,lavfi.signalstats.YMIN,lavfi.signalstats.YMAX \
> signalstats_output.csv
出力されたCSVをExcelやPythonでグラフ化できます。
輝度平均をリアルタイムにオーバーレイ表示
signalstats と drawtext を組み合わせると、各フレームに統計値をオーバーレイして動画に書き込めます:
ffmpeg -i input.mp4 \
-vf "signalstats,drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='YAVG\: %{metadata\:lavfi.signalstats.YAVG}':x=10:y=10:fontsize=20:fontcolor=white" \
output_stats.mp4
特定の統計のみ有効化する(stat オプション)
ffmpeg -i input.mp4 \
-vf "signalstats=stat=tout+vrep+brng" \
-f null /dev/null
stat 値 | 有効になる統計 |
|---|---|
tout | TOUT(クリップピクセル割合) |
vrep | VREP(垂直ライン反復) |
brng | BRNG(放送範囲外ピクセル) |
複数指定する場合は + で連結します。
放送品質チェックの実用例
放送コンテンツでよく使われる「輝度が16未満または235超のフレーム」を検出:
ffprobe -f lavfi \
-i "movie=input.mp4,signalstats" \
-show_frames -select_streams v \
-print_format flat \
-show_entries frame_tags=lavfi.signalstats.YMIN,lavfi.signalstats.YMAX \
2>/dev/null | grep -E "(YMIN|YMAX)"
YAVG推移をテキストファイルに保存する
フレームごとの輝度平均をシンプルなテキストで記録:
ffmpeg -i input.mp4 \
-vf "signalstats,metadata=mode=print:key=lavfi.signalstats.YAVG:file=yavg.txt" \
-f null /dev/null
よくある使い方まとめ
| 目的 | コマンド |
|---|---|
| 全統計を標準エラー出力 | -vf signalstats -f null /dev/null |
| TOUT/BRNG のみ | -vf signalstats=stat=tout+brng -f null /dev/null |
| フレームにオーバーレイ | signalstats,drawtext=text='%{metadata\:...}' |
| CSVで保存 | ffprobe -f lavfi -i "movie=input.mp4,signalstats" ... |
関連記事
一次ソース: ffmpeg.org/ffmpeg-filters.html#signalstats / trac.ffmpeg.org/wiki/FfprobeShowStreamsWithEnhancedOutput