FFMPEG - 如何在删除顺序重复帧时将帧提取为图像

时间:2012-08-10 15:11:49

标签: ffmpeg duplicate-removal sequential image-extraction

有没有办法(通过脚本或最好是我错过调用ffmpeg的一些参数)从avi文件中提取帧并忽略顺序重复的帧,从而能够查看图片只有在增量/变化?

我经常需要在工作和很多时间记录会议,我正在通过电话交谈时,我正在查看的客户端屏幕没有变化。会议结束后,我需要将这些图像用作文档和规范收集的一部分。

我知道我可以输出每一帧并通过任何给定的重复文件移除实用程序运行它们,但这会删除所有重复的帧。因此,如果提取的帧是这样的:

A,A,A,B,B,B,B,C,C,A,A,C,C,C,B,B,B ...

通过典型的重复文件移除器运行它们,我会得到:A,B,C

我想要的是:A,B,C,A,C,B

我目前用于提取图像的命令是:

ffmpeg.exe -i file.avi -ss 0 -sameq -f image2 -r 1 images%5d.png

我事先得到了每一帧(从上面删除了-r 1),但由于这些在线会议可能需要几个小时,因此产生的帧数太多了,所以现在,我得到每帧一帧文件。

基于Windows的解决方案更可取,但是,我相信其他人会对其他平台上的解决方案感兴趣。

非常感谢任何正确方向的解决方案或观点。

3 个答案:

答案 0 :(得分:6)

您是否尝试使用-vsync 0选项?

答案 1 :(得分:2)

运行ffmpeg后,运行重复的文件查找器。

Linux:fdupes -N -d *.pnghttp://code.google.com/p/fdupes/)。

对于许多类似的工具,对于Windows等,请参阅http://en.wikipedia.org/wiki/List_of_duplicate_file_finders

答案 2 :(得分:0)

您可以通过mpdecimate视频过滤器(后跟setpts过滤器获取正确的时间)来访问它。
使用此选项:

-vf mpdecimate,setpts=N/FRAME_RATE/TB

也许它无法使用您的原始命令,您需要使用它来首先将原始视频转换为没有重复帧的视频:

ffmpeg.exe -i file.avi -vf mpdecimate,setpts=N/FRAME_RATE/TB outfile.avi

然后使用outfile.avi生成图像序列。

(如果需要,可以通过其选项mpdecimatehilo调整过滤器frac,但默认值可以正常工作。)