2入力した映像を比較してオリジナルにどれだけ忠実であるか SSIM の値を計算する。主な用途はエンコード前後を比較してどれだけ劣化したのか、特定のフレームを抽出してエンコードを見直したりする。比較する動画は同じ解像度である必要があるので、異なる解像度の画質評価には libvmaf, vmafmotion フィルタを使う。libx264 エンコードでリアルタイムで計測する場合はオプションの -tune ssim -ssim 1 を使う。

Windows の ffmpeg で生放送する方法 : エンコードのログ出力の方法
映像フィルタを当てる前後のデータを見える化する
メタデータをコンソールに表示する metadata, ametadata
メタデータを映像化する drawgraph, adrawgraph
新しい映像の品質評価 vmafmotion

最終結果だけを表示
ffmpeg -i input1 -i input2 -filter_complex ssim -an -f null -

ログファイルを出力する
ffmpeg -i input1 -i input2 -filter_complex ssim=stats.txt -an -f null -

metadata フィルタでフレーム単位でコンソールに表示する方法。ここでは unsharp フィルタの Y の ssim を表示している。
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]ssim,metadata=print:key=lavfi.ssim.Y
lavfi.ssim.X 形式で X に代入できるのは、Y, U, V, R, G, B, All, dB。

framesync の設定にも対応している
2ファイル入力するフィルタの挙動設定 framesync

ログファイルの見方

  • n
    フレーム番号
  • Y, U, V, R, G, B
    コンポーネント別の SSIM。1 に近いほど忠実
  • All
    全体の平均 SSIM。1 で同一
  • dB
    全体の平均 SSIM(dB)。大きいほど高画質

似た指標に PSNR もあるが主観的な画質の比較なら SSIM のほうがよい。

ssimpsnr を同時に出力する場合
ffmpeg -i original -i compared -lavfi "ssim;[0:v][1:v]psnr" -an -f null -

http://www.jiima.or.jp/pdf/5_JIIMA_guideline.pdf より

PSNR SSIM 主観評価
40~∞[dB] 0.98以上 元の画像と圧縮画像の区別がつかない
30~40[dB] 0.90~0.98 拡大すれば劣化がわかるレベル
30以下[dB] 0.90以下 明らかに劣化がわかる

x264におけるSSIMの目安
http://www.wikihouse.com/htumenc/index.php?SSIM より

SSIM値 qp設定値(例)
0.98 以上 20 オリジナルと区別がつかない。
0.95 30 見るに耐えない。(*または辛うじて、そこそこ見られる*)
0.9 40 非常に醜い。
0.8 51 これ以上は圧縮できない
0.7 以下 素材に大量のノイズを加え、さらにそのノイズを量子化工程で消し去るほどqpを高くしない限り、達成困難。

公式ドキュメント
FFmpeg Filters Documentation : ssim
FFmpeg Filters Documentation : psnr

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)