5

有什么方法(通过脚本或最好是调用我错过的 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 的解决方案会更可取,但是,我相信其他人会对其他平台上的解决方案感兴趣(如果有的话)。

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

4

3 回答 3

6

你试过这个-vsync 0选项吗?

于 2012-10-16T19:06:31.223 回答
2

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

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

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

于 2013-10-23T21:28:16.857 回答
1

您可以通过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生成图像序列。

(在需要的情况下,过滤器mpdecimate可以通过其选项进行调整,hi但默认值可以正常工作。)lofrac

于 2017-03-19T17:43:56.703 回答