在 Gnomes 3 默认桌面录制器中只录制一个窗口

sel*_*ler 11 gnome screen-capture screencasts screen-recorder gnome3

GNOME 3下具有很大的特点Ctrl- Alt- Shift-R快捷方式1我猜这是伊斯坦布尔 似乎它不是伊斯坦布尔...但我找不到有关此计划的任何信息。

我在哪里可以找到手册页?如何从控制台运行它?
最重要的是:如何只记录一个窗口(类似于Alt+ Print Screen)?

小智 16

根据 GNOME API 文档,gnome-shell(shell-recorder 类)屏幕录像机基本上是将所有屏幕截图输出管道传输到管道,然后由 GStreamer 编码。

您可以使用 dconf-editor 应用程序并导航到org.gnome.shell.recorder,在此架构中您将找到 3 个选项:

  • 文件扩展名 - 我的盒子默认为 webm
  • 帧率 - 在我的盒子上默认为 30
  • 管道 - 默认使用管道传输到 GStreamer vp8enc 以对流进行编码。 vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux

那么我们如何在命令行上复制录音管道呢?我们可以使用 gstreamer-tool 的 gst-launch 命令来实现。首先,您需要在您的盒子上安装 gst-tools,然后您就可以开始玩 gstreamer!。以下是几个例子:

录制到 webm(vp8 视频和 vorbis 音频):

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
Run Code Online (Sandbox Code Playgroud)

按 Ctrl+C 停止录制。

录制到 ogv(theora 视频和 vorbis 音频):

gst-launch ximagesrc ! ffmpegcolorspace ! queue ! theoraenc ! mux. alsasrc ! audio/x-raw-int ! queue ! audioconvert ! vorbisenc ! mux. oggmux name=mux ! filesink location=screencast.ogv
Run Code Online (Sandbox Code Playgroud)

按 Ctrl+C 停止录制。

管道由 gst-launch 执行。以下是他们所做的:

  • 抓取 X 视频图像(桌面)
  • 自动将视频转换为可接受的格式
  • 生成后台线程 [t1] 以继续视频处理
  • [t1] 编码视频(vp8 或 theora)
  • [t1] 准备将视频合并到视频外壳(webm 或 ogg)中
  • 获取原始音频输入(麦克风)
  • 产生一个后台线程 [t2] 以继续音频处理
  • [t2] 自动将音频转换为可接受的格式
  • [t2] 将音频编码为 vorbis
  • [t2] 准备将音频合并到视频外壳中(webm 或 ogg)
  • 将编码的音频和视频写入视频文件

现在,您不必再害怕 gstreamer 管道了!\o/


小智 10

而最重要的是。如何只录制一个窗口?

如果能得到窗口的XID,就可以把它传给ximagesrc。例如,如果您知道窗口的唯一标题是什么,您可以使用 xwininfo 和一些魔法来获得它。在 bash 中:

TITLE="Terminal Six"
WINDOW_XID=$(xwininfo -tree -root -all | egrep $TITLE | sed -e 's/^ *//' | cut -d\  -f1)`
Run Code Online (Sandbox Code Playgroud)

现在您可以将该 XID 传递给 ximagesrc,当然,完成管道:

gst-launch-1.0 ximagesrc xid=$WINDOW_XID ! video/x-raw,framerate=30/1 ! videoconvert ! queue ! ...
Run Code Online (Sandbox Code Playgroud)

仅供参考,我将使用 1.0 版的 gstreamer 向您展示这一点。没有更多的 ffmpegcolorspace,您可以使用 videoconvert(FFmpeg 的最新版本已将名称更改为“libav”,因此已重命名)。