ffmpeg x11grab a single window
AFAIK it's not possible to capture a specific window with ffmpeg, the x11grab entry in the manual only refers to screens https://www.ffmpeg.org/ffmpeg-devices.html#x11grab and it suggests that the region you specify is static (if you move the window ffmpeg does not follow it):
However GStreamer offers some more flexibility in this case:
gst-launch-1.0 ximagesrc xid=0x04000007 ! videoconvert ! autovideosink
This works with out-of focus windows and you can even move them but it does NOT work with minimized windows.
As you may know, you can get the window id with wmctrl -l
.
You can see the options supported by GStreamer elements using the gst-inspect-1.0
program, e.g.:
gst-inspect-1.0 ximagesrc
I do not know if it was possible when this question was asked long time ago, but for the sake of completeness I had now success with:
ffmpeg -f x11grab -framerate 25 $(slop -D -f '-video_size %wx%h -i +%x,%y') out.mp4
Having slop
installed makes this much easier, but the coordinates can also entered by hand of cause. It is then something like -video_size 640x480 -i +0,100
to capture a 640x480
sized video with the topper left corner in position x=0 and y=100 (screen coordinates). The -i [X],[Y]
syntax is not really intuitive.