我需要捕捉第二个显示屏的屏幕并且"监视"它在主显示屏中,在窗口内(按x0.5缩放并与邻居插值,因为我更喜欢性能与质量)。从这个link,我得到了这个截屏视频命令:
gst-launch ximagesrc ! ffmpegcolorspace ! queue \
! vp8enc quality=10 speed=2 ! mux. alsasrc ! audio/x-raw-int ! queue \
! audioconvert ! vorbisenc ! mux. webmmux name=mux \
! filesink location=screencast.webm
...但它捕获到文件(不是窗口),它缺少缩放和插值类型,声音不是必需的等等。
由于我熟悉libav,我所寻找的东西与此类似:
avconv -f x11grab -r 30 -s 1280x1024 -i :0.1 -c:v mpeg4 -b:v 1000k \
-vf "hflip" -vf "scale=640:480" -sws_flags "neighbor" -f avi - | avplay -i -
...我会使用它,但它在帧速率方面存在一些问题(问here)。所以,我正在 Gstreamer 中寻找替代方案。
答案 0 :(得分:6)
这是gst-launch命令:
gst-launch-1.0 ximagesrc startx=1280 use-damage=0 ! video/x-raw,framerate=30/1 ! videoscale method=0 ! video/x-raw,width=640,height=480 ! ximagesink
说明:
参数startx
=从"像素列开始录制" 1280-也就是说,如果你有两个1280宽度的显示器,它将从右侧的那个开始。
参数use-damage
设置为0 =不使用XDamage。损坏仅计算后续帧之间的差异,这显然非常需要CPU。
element ximagesink
= X服务器创建的窗口作为输出 - 它比glimagesink(opengl加速窗口)要求的CPU要少。
元素videoscale
参数method
为0表示Mario Mey在评论中建议的最近邻居。这导致我在CPU中节省了17%到12%。
还有可配置的fps和显示窗口的高度/宽度(我认为它足够清晰)。