当输入发生变化时,我怎样才能使用 ffmpeg 进行抓取?

当输入发生变化时,我怎样才能使用 ffmpeg 进行抓取?

我正在尝试使用 ffmpeg 将我的 x11 桌面抓取到视频文件中。

但是,桌面实际上没有变化的情况经常发生。我想从录制的视频中忽略这一点。因此,录制的视频应该只包含连续移动的桌面。

例如,如果我录制了一段 10 分钟长的视频,但只在 1 分钟内做了一些事情,那么我想看 1 分钟长的录音。

目前我使用命令

ffmpeg -f x11grab -i :0 -filter_complex "select='gt(scene,0.01)'" out.mp4

为此。如果我理解文档的话,它应该跳过连续的相同帧。

但事实并非如此。录制的视频仍然有10分钟长,只是其中有一些“跳跃”。

是否存在一些棘手的标志(可能是一些“filter_complex”设置),什么可以简单地从抓取中删除连续相同的屏幕?

答案1

选择过滤器不会调整保留帧的时间戳,因此诀窍是调整它们以消除间隙。

ffmpeg -f x11grab -i :0 -filter_complex "select='gt(scene,0.01)',setpts='if(eq(N\,0),0,PREV_OUTPTS+if(lte(T-PREV_INT\,3.0)\,(T-PREV_INT)/TB\,2/TB))'" out.mp4

如果相邻保留帧的时间戳之间的间隙超过 3 秒,则它们的间隙将减少到 2 秒。

您可能需要尝试场景变化值以避免捕获仅时钟或网络图标变化的部分等

相关内容