是否可以使用 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]
不是很直观。