如何比较两个视频并获取不同帧的时间戳?

如何比较两个视频并获取不同帧的时间戳?

我有同一张物理 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对我来说没问题,但您可以向任何方向更改它(值越小,灵敏度越高,因此会生成更多帧)。

相关内容