ffmpeg x11抓取单个窗口

ffmpeg x11抓取单个窗口

是否可以使用 ffmpeg 抓取最小化或没有焦点的窗口(上面有另一个窗口,但 ffmpeg 仅记录下面的窗口)?

使用类似命令ffmpeg -f x11grab -r 30 -i :0.0+x,y -f flv rtmp://url

答案1

据我所知,无法使用 ffmpeg 捕获特定窗口,手册中的 x11grab 条目仅指屏幕https://www.ffmpeg.org/ffmpeg-devices.html#x11grab并且它表明您指定的区域是静态的(如果您移动窗口,ffmpeg 不会跟随它):

然而,GStreamer 在这种情况下提供了更多的灵活性:

gst-launch-1.0 ximagesrc xid=0x04000007 ! videoconvert ! autovideosink

这适用于失焦的窗口,您甚至可以移动它们,但它不适用于最小化的窗口。

您可能知道,您可以使用 获取窗口 ID wmctrl -l

您可以使用该程序查看 GStreamer 元素支持的选项gst-inspect-1.0,例如:

gst-inspect-1.0 ximagesrc

答案2

我不知道很久以前提出这个问题时是否有可能,但为了完整起见,我现在成功地做到了:

ffmpeg -f x11grab -framerate 25 $(slop -D -f '-video_size %wx%h -i +%x,%y') out.mp4

安装后slop,这变得容易得多,但坐标当然也可以手动输入。然后,这就像-video_size 640x480 -i +0,100捕获一个640x480大小合适的视频,其左上角位于 x=0 和 y=100(屏幕坐标)。语法-i [X],[Y]不是很直观。

相关内容