如何使用 FFmpeg 混合/差异滤镜模式识别两个视频之间的帧差异

如何使用 FFmpeg 混合/差异滤镜模式识别两个视频之间的帧差异

我正在尝试验证使用无损编解码器压缩的视频在数学上是否与原始视频相同。在如何在 ffmpeg 中比较/显示两个视频之间的差异?,使用以下描述答案FFmpeg 混合滤镜创建一个输出视频,让您可以直观地看到两个输入视频之间的差异。我想知道是否有办法让 FFmpeg 在定位两个视频中不相同的帧时输出一些基于文本的输出。这样做比打开生成的混合视频并查找整个视频中的任何差异更快。

我确实尝试使用该答案中描述的 MD5 哈希方法,但是,对于像素格式不同的视频(例如),MD5 哈希不匹配(正如海报提到的那样,它们可能不匹配),而混合视频表明它们是相同的。

答案1

基于此评论吉安,我能够得到我想要的大部分东西:

ffmpeg -hide_banner -i video1.avi -i video2.avi -filter_complex "blend=all_mode=difference,blackframe=amount=0:threshold=1,metadata=select:key=lavfi.blackframe.pblack:value=99.9999:function=less,metadata=print:file=-" -an -v 0 -f null -

黑框

  • 数量=0- 检测所有帧 - 即使没有黑色像素的帧。
  • 阈值=1- 将黑色像素定义为亮度低于 1(即 0)。

当视频完全匹配时,没有输出。当存在一些差异时,输出如下所示:

frame:0    pts:66667   pts_time:0.066667
lavfi.blackframe.pblack=26
frame:1    pts:166667  pts_time:0.166667
lavfi.blackframe.pblack=94
...

我最初尝试过...lavfi.blackframe.pblack:value=100:function=less...,但我看到的是暗色值为 100。不确定这是否是由于某处的舍入误差造成的。

相关内容