我有同一张物理 DVD 的两个副本。两个光盘映像之间存在差异 - 其中一个视频文件有小的二进制差异。我怀疑其中一个光盘有物理损坏,导致其中一个翻录有轻微的差异/损坏。我想知道这两个视频文件之间是否存在视觉差异,如果有,视觉差异的时间戳是多少。然后我会比较这些帧,看看两个视频中是否有任何看起来损坏的帧,以确定哪个视频副本已损坏,哪个(可能)未损坏。
似乎可以使用 ffmpeg 的 framehash 来查找不同的帧,但我不确定如何查看特定的帧 - framehash 输出没有时间戳,只有 dts 和 pts 值。
答案1
这是我用来比较两个视频的方法,基于来自不同网页的信息。如果有人知道更好/更快/更优化的方法,请告诉我。:)
步骤1:我正在制作附加视频——我想要比较的两个视频的“摘要”:
ffmpeg -hide_banner -i in1.mp4 -i in2.mp4 -filter_complex "[1:v]format=yuva444p,lut=c3=128,negate[video2withAlpha],[0:v][video2withAlpha]overlay[out]" -map [out] -c:v libx264 -crf 18 -c:a copy out.mp4
in1.mp4
如果和中的帧in2.mp4
相同,则此命令将在 中生成“几乎完美”的灰色帧out.mp4
。如果输入帧不同,则输出帧将有“一些”失真。
第2步:现在是时候找到这些扭曲的帧了out.mp4
:
ffmpeg -hide_banner -i out.mp4 -filter_complex "select='gt(scene,0.001)',drawtext=fontfile='arial.ttf':text='%{pts\:hms}':x=(w-tw)/2:y=h-(2*lh):fontcolor=white:fontsize=30" -vsync 0 "frames/frame-%05d.jpg"
扭曲的帧将被导出到单独的 jpg 文件,保存在子文件夹中并在其底部标记时间戳(您可以更改时间戳的位置、字体、大小和颜色)。
这是棘手的部分:gt(scene,0.001)
-0.001
定义“灵敏度”以检测失真的帧。在大多数情况下,值0.001
对我来说没问题,但您可以向任何方向更改它(值越小,灵敏度越高,因此会生成更多帧)。