この記事でわかること
- SSIM・PSNRフィルタで映像品質を測定するコマンド
- SSIM値・PSNR値の読み方と品質基準の目安
- 2つの動画ファイルを比較する方法(参照動画 vs エンコード済み)
- 複数のエンコード設定を比較する実践的な使い方
- 結果をCSVファイルに保存する方法
動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 10 件を検証スクリプトで実行し、全て成功しました(2026-09-06) 対象 OS: Windows / macOS / Linux
実測:3つの指標は同じ順位をつけない
以下はすべて下記の環境で実際に測った値です。PSNR・SSIM と VMAF が逆の判定を出すケースがあり、それがこの3指標を使い分ける理由そのものです。
| 項目 | 内容 |
|---|---|
| CPU / GPU | Intel Core i9-14900KF / NVIDIA RTX 4090 |
| FFmpeg | 8.1(gyan.dev full build) |
| 素材 | Big Buck Bunny 1920x1080 / 30fps / 10.0秒 / H.264 24.6Mbps / 29.3MB |
| 素材の権利 | © Blender Foundation, CC BY 3.0 |
| 測定日 | 2026-08-28 |
CRF を変えたときの各指標
| 設定 | サイズ | PSNR (dB) | SSIM | VMAF |
|---|---|---|---|---|
| CRF 18 | 15.51 MB | 43.48 | 0.9868 | 96.01 |
| CRF 23 | 7.12 MB | 40.50 | 0.9749 | 93.29 |
| CRF 28 | 3.38 MB | 37.40 | 0.9506 | 87.83 |
| CRF 32 | 1.96 MB | 34.91 | 0.9163 | 79.70 |
| CRF 36 | 1.19 MB | 32.60 | 0.8656 | 66.97 |
純粋に圧縮を強めていく場合、3指標はきれいに同じ方向へ動きます。ここまでならどれを使っても結論は変わりません。
劣化の「種類」を変えると順位が入れ替わる
同じ CRF 23 に、性質の違う劣化を加えて測ったものです。
| 加工 | サイズ | PSNR (dB) | SSIM | VMAF |
|---|---|---|---|---|
| 加工なし(基準) | 7.12 MB | 40.50 | 0.9749 | 93.29 |
わずかにぼかす(gblur=sigma=0.8) |
4.40 MB | 35.32 | 0.9370 | 73.57 |
粒状ノイズを加える(noise=alls=12) |
55.89 MB | 34.09 | 0.8537 | 88.41 |
720p へ縮小(scale=1280:-2) |
3.40 MB | 34.67 | 0.9286 | 82.23 |
注目すべきはぼかしとノイズの行です。
- PSNR と SSIM は「ノイズの方が劣化が大きい」と判定します(PSNR 34.09 < 35.32、SSIM 0.8537 < 0.9370)。
- VMAF は正反対の判定です(88.41 > 73.57)。ノイズの方が大幅に良い、としています。
人間の目は、細部が失われる「ぼけ」を強く嫌う一方、細部が残っている「粒状ノイズ」にはかなり寛容です。VMAF はこの知覚特性を学習しているため逆転が起きます。PSNR や SSIM だけを見てエンコード設定を選ぶと、ぼけた映像を「良い」と誤判定しかねません。
もう一点、実務で効く事実があります。ノイズを加えた版はファイルサイズが 55.89MB と、元の 29.3MB より大きくなりました。粒状ノイズはランダムなので圧縮が効かず、ビットレートを浪費します。撮影時のノイズが多い素材が異様に大きくなるのはこれが理由です。逆にぼかした版は 4.40MB と小さくなります——細部を捨てているので当然ですが、品質は最も悪いという結果です。「小さくなった=うまく圧縮できた」ではないことが数字で確認できます。
どれを使うべきか
| 目的 | 推奨 |
|---|---|
| 同じコーデック・同じ加工で CRF だけ比較 | PSNR か SSIM で十分(速い) |
| コーデックやフィルタをまたいで比較 | VMAF(PSNR/SSIM は誤った順位を出す) |
| ぼけ・ノイズなど劣化の質が異なるものの比較 | VMAF 一択 |
| 数式が単純で説明責任が要る場面 | PSNR(定義が明快) |
SSIM と PSNR の概要
| 指標 | 意味 | 単位 | 高いほど良い |
|---|---|---|---|
| PSNR | ピーク信号対雑音比 | dB | ○ |
| SSIM | 構造的類似度 | 0〜1 | ○ |
PSNR(Peak Signal-to-Noise Ratio): ピクセル値の差を数値化。シンプルで計算が速いが、人間の視覚特性は反映されない。
SSIM(Structural Similarity Index): 輝度・コントラスト・構造の3要素で比較。人間の主観的な画質評価に近い。
SSIM を測定するコマンド
オリジナル動画とエンコード後の動画を比較します:
ffmpeg -i original.mp4 -i encoded.mp4 -lavfi ssim -f null /dev/null
出力の読み方
[Parsed_ssim_4 @ ...] SSIM Y:0.976575 U:0.972029 V:0.972912 All:0.974869 (15.99)
| フィールド | 説明 |
|---|---|
Y |
輝度(Luma)チャンネルのSSIM |
U / V |
色差チャンネルのSSIM |
All |
総合SSIM値 |
(18.51) |
SSIM値をdBに変換した値 |
SSIM品質の目安
| SSIM値 | 品質評価 |
|---|---|
| 0.999以上 | ほぼ完璧(無劣化に近い) |
| 0.99〜0.999 | 非常に高品質 |
| 0.95〜0.99 | 高品質(通常許容範囲) |
| 0.90〜0.95 | 中程度(圧縮が感じられる) |
| 0.90未満 | 低品質(明確な劣化あり) |
PSNR を測定するコマンド
ffmpeg -i original.mp4 -i encoded.mp4 -lavfi psnr -f null /dev/null
出力の読み方
[Parsed_psnr_4 @ ...] PSNR y:39.646141 u:43.146276 v:43.196002 average:40.500074 min:35.281647 max:48.126266
PSNR品質の目安(dB)
| PSNR値 | 品質評価 |
|---|---|
| 40dB以上 | 非常に高品質 |
| 35〜40dB | 高品質(通常許容範囲) |
| 30〜35dB | 中程度 |
| 30dB未満 | 低品質 |
SSIM と PSNR を同時に測定
ffmpeg -i original.mp4 -i encoded.mp4 -lavfi "[0:v][1:v]ssim;[0:v][1:v]psnr" -f null /dev/null
結果をCSVファイルに保存
フレームごとの数値をCSVに出力してグラフ化できます:
ffmpeg -i original.mp4 -i encoded.mp4 -lavfi "ssim=stats_file=ssim_stats.csv" -f null /dev/null
CRF値の比較実験
CRF18・CRF23・CRF28の3段階を同一ソースから作成して比較する例:
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -an crf18.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -an crf23.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -an crf28.mp4
ffmpeg -i input.mp4 -i crf18.mp4 -lavfi ssim -f null /dev/null
ffmpeg -i input.mp4 -i crf23.mp4 -lavfi ssim -f null /dev/null
ffmpeg -i input.mp4 -i crf28.mp4 -lavfi ssim -f null /dev/null
関連記事
動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 10 件を検証スクリプトで実行し、全て成功しました(2026-09-06) 一次ソース: ffmpeg.org/ffmpeg-filters.html#ssim / ffmpeg.org/ffmpeg-filters.html#psnr / trac.ffmpeg.org/wiki/QualityGuide