答案1
根据 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
按 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
按 Ctrl+C 停止录制。
管道由 gst-launch 执行。它们的作用如下:
- 抓取 X 视频图像(桌面)
- 自动将视频转换为可接受的格式
- 生成后台线程 [t1] 以继续视频处理
- [t1] 对视频进行编码(vp8 或 theora)
- [t1] 准备将视频合并到视频外壳(webm 或 ogg)
- 获取原始音频输入(麦克风)
- 产生一个后台线程 [t2] 来继续音频处理
- [t2] 自动将音频转换为可接受的格式
- [t2] 将音频编码为 vorbis
- [t2] 准备将音频合并到视频外壳(webm 或 ogg)
- 将编码的音频和视频写入视频文件
现在,您不必再害怕 gstreamer 管道了!\o/
答案2
最重要的是,我怎样才能只录制一个窗口?
如果您可以获得窗口的 XID,则可以将其传递给 ximagesrc。例如,如果您知道窗口的唯一标题是什么,则可以使用 xwininfo 和一些小技巧来获取它。在 bash 中:
TITLE="Terminal Six"
WINDOW_XID=$(xwininfo -tree -root -all | egrep $TITLE | sed -e 's/^ *//' | cut -d\ -f1)`
现在您只需将该 XID 传递给 ximagesrc,当然,完成管道:
gst-launch-1.0 ximagesrc xid=$WINDOW_XID ! video/x-raw,framerate=30/1 ! videoconvert ! queue ! ...
仅供参考,我使用 1.0 版 gstreamer 向您展示此内容。不再有 ffmpegcolorspace,您改用 videoconvert(最新版本的 FFmpeg 已更名为“libav”,因此已重命名)。
答案3
Gnome 3 录制使用 GStreamer FFmpeg 插件输出.webm在用户主页下。
GStreamer FFmpeg 插件
http://gstreamer.freedesktop.org/modules/gst-ffmpeg.html
最重要的是:我怎样才能只记录一个窗口?
可以将窗口放大到全屏吗?