使用 ffmpeg 获取仅更改的帧的快照

使用 ffmpeg 获取仅更改的帧的快照

我想使用 FFmpeg 从 MP4 文件中捕获“已更改”的帧。我有一个视频,基本上是幻灯片/屏幕截图的序列。我只想捕获已更改的帧。最好还能检查百分比变化,并且仅当变化超过 10% 时才捕获。

答案1

ffmpeg -i a.mp4 -filter_complex "select=gt(scene\,0.5)" "frames/%04d.jpg"

上面选择了引入场景变化的帧。

答案2

得票最高的答案多次输出每个唯一帧,但无法输出第一帧。

ffmpeg -i a.mp4 -filter_complex "select=bitor(gt(scene\,0.5)\,eq(n\,0))" -vsync drop "frames/%04d.jpg"

这将输出每个唯一帧一次,并将包括视频中的第一帧。

答案3

我为每一帧生成一张图像,并使用 MD5 哈希删除重复的图像:

ffmpeg -i "file.mkv" -r 1 "preffix-%d.png"
md5sum *.png | sort | awk 'BEGIN{lasthash = ""} $1 == lasthash {print $2} {lasthash = $1}' | xargs rm  # From https://unix.stackexchange.com/q/192701/209677

根据您的视频,您可能需要调整变化率(本例中为 0.1)。另外,请注意-vsync vfr

ffmpeg -i file.mkv -vsync vfr -filter_complex "select=gt(scene\,0.1)" "slides-%04d.jpg"

相关内容