2つ入力した映像を比較し PNSR(Peak Signal to Noise Ratio:2つの映像、または画像の同位置のピクセルの輝度を比較する指標)。MSE(mean squared error)は PSNR を計算するのに使われる。

海外カンファレンスで得た知見を最大化する 〜 NAB Show 2018 編 〜 : developers.cyberagent.co.jp

基本コマンド

最終結果だけを表示。1入力がオリジナルの動画で、2入力が PSNR を計算する動画
ffmpeg -i input1 -i input2 -filter_complex psnr -an -f null -

1入力と2入力の解像度が異なるときはscale2refフィルタで解像度指定しなくても揃えられる。
ffmpeg -i input1 -i input2 -filter_complex scale2ref,psnr -an -f null -

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

コンテナフォーマットが異なる、例えばMP4とMKVなどを比較する。
ffmpeg -i input1.mp4 -i input2.mkv -filter_complex "[0:v]settb=1/AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=1/AVTB,setpts=PTS-STARTPTS[ref];[main][ref]psnr" -an -f null -

metadataフィルタでフレーム単位でコンソールに表示する方法。ここではunsharpフィルタの psnr_avg を表示している。
ffplay -i input -vf split[a][b];[b]unsharp[B];[a][B]psnr,metadata=print:key=lavfi.psnr.psnr_avg

テキストに出力する方法。
ffmpeg -i input1 -i input2 -filter_complex psnr,metadata=mode=print:file=foo.txt -an -f null -

映像に焼き付けて再生する。
ffplay -f lavfi -i movie=input1.mp4[a];movie=input2.mp4[b];[a][b]psnr,drawtext=fontfile="C\\://Windows/Fonts/arial.ttf":fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"PSNR="%{metadata\:lavfi.psnr.psnr_avg}'

lavfi.psnr.X形式でXに代入できるのは、mse_avg, psnr_avg である。

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

オプション

  • stats_file, f[string]
    ログファイルの出力名
  • stats_version[int]
    ログファイルのバージョン指定
    既定値:1、ログファイル1行目の項目を表示しない
    範囲:1, 2
  • stats_add_max[boolean]
    最大値をログファイルに出力するかの指定。出力する場合はstats_version=2を指定する
    既定値:0

ログファイルの見方

  • psnr_log_version
    stats_versionのバージョン
  • n
    フレーム番号
  • mse_avg
    すべてのチャンネルの不偏分散平均
  • mse_y, mse_u, mse_v, mse_r, mse_g, mse_b, mse_a
    個別のチャンネルの不偏分散平均
  • psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a
    個別のチャンネルの psnr
  • max_avg, max_y, max_u, max_v
    YUVチャンネルの最大許容値の平均、個別のチャンネルの最大許容値

コメントを残す

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

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