ffmpeg には多くの映像フィルタと音声フィルタがあるが、その効果を調べるのに主観的な判断だけではなく、客観的な判断ができるように数値を映像に表示したり、ヒストグラムを表示したりすることで映像で差違を見える化する。null
フィルタを別のフィルタに変更することでフィルタを当てた同士で比較できる。
ヒストグラムで YUV を比較
フィルタを当てる前後をヒストグラムで比較する
中心がオリジナルのグラフ。左がフィルタを当てたグラフ。右が差分で、黒い部分がフィルタを当てたグラフ、白い部分がオリジナルのグラフ
ffplay input -vf split[0][1];[0]pp,histogram,split[0a][0b];[1]null,histogram,split[1a][1b];[0b][1b]blend=c0_mode=difference[01];[0a][1a][01]hstack=3
さらに動画を右に配置する
解像度 640×360 の動画を右に配置し、上が 0 識別子のフィルタを当てた動画、下が 1 識別子の動画。640×360 の動画でない場合は scale=640x360
を最初の split
の前につなぐ
ffplay input -vf split[0][1];[0]pp,split[0a][0b];[0a]histogram=230:10,split[0c][0d];[1]null,split[1a][1b];[1a]histogram=230:10,split[1c][1d];[0c][1c]blend=c0_mode=difference[01];[0d][1d][01]hstack=3[l];[0b][1b]vstack[r];[l][r]hstack
さらに YUV の値を映像に表示する
ffplay input -vf split[0][1];[0]pp,split[0a][0b];[0a]histogram=230:10,split[0c][0d];[1]null,split[1a][1b];[1a]histogram=230:10,split[1c][1d];[0c][1c]blend=c0_mode=difference[01];[0d][1d][01]hstack=3[l];[0b]signalstats,drawtext=fontfile='C\://WINDOWS/Fonts/arial.ttf':textfile=signalstat_drawtext.txt:fontsize=20:borderw=1:bordercolor=white[0e];[1b]signalstats,drawtext=fontfile='C\://WINDOWS/Fonts/arial.ttf':textfile=signalstat_drawtext.txt:fontsize=20:borderw=1:bordercolor=white[1e];[0e][1e]vstack[r];[l][r]hstack
drawgraph で YUV のグラフを表示する
ffplay -f lavfi -i "movie=input,signalstats,drawgraph=m1=lavfi.signalstats.YAVG:fg1=0x808080:m2=lavfi.signalstats.UAVG:fg2=0x0000FF:m3=lavfi.signalstats.VAVG:fg3=0xFF0000:min=0:max=255:bg=white:slide=scroll:mode=bar,drawgrid=0:0:0:32,format=yuv420p"
datascope で YUV の値を表示する
input1 に元の動画を、input2 に比較する動画を入力する 結果はコンソールに表示される そのほかにも調べられる:FFmpeg Formats Documentation : hash 使用したフィルタffplay input -vf datascope=1280x720:0:0:0:0
SSIM, PNSR で比較する
結果はコンソールに表示される
ffmpeg -i input1 -i input2 -filter_complex ssim -an -f null -
ffmpeg -i input1 -i input2 -filter_complex psnr -an -f null -md5, sha256, CRC32 を調べる
ffmpeg -i input -f hash -hash md5 -
ffmpeg -i input -f hash hash sha256 -
ffmpeg -i input -f hash -hash CRC32 -