2つ入力した映像を比較し PNSR(Peak Signal to Noise Ratio:2つの映像、または画像の同位置のピクセルの輝度を比較する指標)。MSE(mean squared error)は PSNR を計算するのに使われる。比較する動画は同じ解像度とfps、ピクセルフォーマットである必要がある。
ファイルの入力順が逆だったのを訂正した。2021年8月11日
1入力がオリジナルの動画、2入力がSSIMを計算する動画ではなく、1入力がSSIMを計算する動画で、2入力がオリジナルの動画でlibvmaf
フィルタと同じ順番。
視覚評価に重きを置いたxpsnr
も公開された。2024年9月9日
- 文字を描写する drawtext
- 視覚評価に重きを置いたxpsnr
- 新しい映像の品質評価 libvmaf
- 2つの映像の画質評価をする SSIM
- 新しい映像の動きの評価 vmafmotion
- 比較する動画の解像度に合わせる scale2ref
- メタデータを映像化する drawgraph, adrawgraph
- 映像フィルタを当てる前後のデータを見える化する
- メタデータをコンソールに表示する metadata, ametadata
- Windows の ffmpeg で生放送する方法 : エンコードのログ出力の方法
海外カンファレンスで得た知見を最大化する 〜 NAB Show 2018 編 〜 : developers.cyberagent.co.jp
基本コマンド
最終結果だけを表示。1入力がPSNRを計算する動画で、2入力がオリジナルの動画。
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=f=psnr.txt -an -f null -
コンテナフォーマットが異なる、例えばMP4とMKVなどを比較する。
ffmpeg -i input1.mp4 -i input2.mkv -filter_complex "[0:v]settb=1/AVTB,setpts=PTS-STARTPTS[0v];[1:v]settb=1/AVTB,setpts=PTS-STARTPTS[1v];[0v][1v]scale2ref,psnr" -an -f null -
metadata
フィルタでフレーム単位でコンソールに表示する方法。ここではunsharp
フィルタの psnr_avg を表示している。
ffplay -i input -vf split[a][b];[a]unsharp[A];[A][b]psnr,metadata=print:key=lavfi.psnr.psnr_avg
映像に焼き付けて再生する。
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}'
framesync の設定にも対応している。
2ファイル入力するフィルタの挙動設定 framesync
動画の短い時間の方で終了するにはeof_action=1:shortest=1:repeatlast=0を追加する。
ffmpeg -i input1.mp4 -i input2.mkv -filter_complex "[0:v]settb=1/AVTB,setpts=PTS-STARTPTS[0v];[1:v]settb=1/AVTB,setpts=PTS-STARTPTS[1v];[0v][1v]scale2ref,psnr=eof_action=1:shortest=1:repeatlast=0" -an -f null -
ffmpeg 5.1以降はts_sync_mode対応したのでsettb=1/AVTB,setpts=PTS-STARTPTS
が不要になった。
ffmpeg -i 調べたい動画 -i 元の動画 -filter_complex "scale2ref=flags=bicubic,psnr=eof_action=1:shortest=1:repeatlast=0:ts_sync_mode=1" -an -f null -
公式ドキュメント:FFmpeg Filters Documentation : psnr
オプション
- stats_file, f[string]
ログファイルの出力名。小数点以下は2桁まで書き込む。–で標準出力する - 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チャンネルの最大許容値の平均、個別のチャンネルの最大許容値
扱えるメタデータ。
lavfi.psnr.mse.Y lavfi.psnr.mse.U lavfi.psnr.mse.V lavfi.psnr.mse.R lavfi.psnr.mse.G lavfi.psnr.mse.B lavfi.psnr.mse.A lavfi.psnr.psnr.Y lavfi.psnr.psnr.U lavfi.psnr.psnr.V lavfi.psnr.psnr.R lavfi.psnr.psnr.G lavfi.psnr.psnr.B lavfi.psnr.psnr.A lavfi.psnr.mse_avg lavfi.psnr.psnr_avg