【问题标题】:FFMPEG - How to Extract Frames As Images While Removing Sequentially Duplicate FramesFFMPEG - 如何在删除连续重复的帧时将帧提取为图像
【发布时间】:2012-08-07 22:11:56
【问题描述】:

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

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

【问题讨论】:

    标签: ffmpeg duplicate-removal sequential image-extraction


    【解决方案1】:

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

    【讨论】:

    • 接近了,但是当我尝试时,fdupes 仍然找到更多连续相同的帧来剔除。
    • +1 在我的情况下(低帧率),我将每帧复制了 50 次。使用此选项,每 1000 个非重复帧只有 1 个重复帧。
    • 对我来说正好是输入帧的数量。也许有一些全黑的过渡帧作为其他评论者的副本弹出?
    • 相同。它给了我确切的输入帧数。这实际上对其他人有什么作用?
    【解决方案2】:

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

    Linux:fdupes -N -d *.png (http://code.google.com/p/fdupes/)。

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

    【讨论】:

      【解决方案3】:

      您可以通过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 可以通过其选项hilofrac 进行调整,但默认值可以正常工作。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 2016-04-19
        • 2017-08-10
        • 1970-01-01
        相关资源
        最近更新 更多