Wayland 环境下gif录屏

昨天在写 Firefox 的一些有趣功能的时候,需要演示一些 ui 操作步骤,这个时候截图不太能清楚记录过程,联想到 Github 上面经常有些 gif 图片演示操作步骤,用命令行 2 张图片结合生产了一张 gif 图片也是可以的,略微麻烦。在这种场景下,录屏操作步骤,然后生成一个 gif 图片是个理想的方式。当然,网站上嵌入视频也可以,但是很多平台并不支持视频上传,对于简单网页教程来说,图片更加适合。

1. 垂死挣扎

当前 Linux 生态里面 peekKooha 是主流的录屏生成 gif 的软件。令人遗憾的是:

  • peek

在我的 labwc 环境下,装上 peek 录制出来的 gif 是黑屏,什么都看不到,而且作者不维护了,具体见这份申明

  • Kooha

peek 无效的情况下,没有办法,只能转战 Kooha,好不容易装完依赖包,在最终的编译阶段,报错了: libadwaita-1 的版本不对,懒得编译安装,主动放弃了。

 1error: failed to run custom build command for `libadwaita-sys v0.4.1`
 2
 3Caused by:
 4  process didn't exit successfully: `/home/mephisto/github/Kooha/_build/src/release/build/libadwaita-sys-324727e752f0426f/build-script-build` (exit status: 1)
 5  --- stdout
 6  cargo:rerun-if-env-changed=LIBADWAITA_1_NO_PKG_CONFIG
 7  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-gnu
 8  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_gnu
 9  cargo:rerun-if-env-changed=HOST_PKG_CONFIG
10  cargo:rerun-if-env-changed=PKG_CONFIG
11  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu
12  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu
13  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
14  cargo:rerun-if-env-changed=PKG_CONFIG_PATH
15  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu
16  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu
17  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
18  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
19  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu
20  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu
21  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
22  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
23  cargo:warning=`PKG_CONFIG_ALLOW_SYSTEM_CFLAGS="1" "pkg-config" "--libs" "--cflags" "libadwaita-1" "libadwaita-1 >= 1.4"` did not exit successfully: exit status: 1
24  error: could not find system library 'libadwaita-1' required by the 'libadwaita-sys' crate
25
26  --- stderr
27  Package dependency requirement 'libadwaita-1 >= 1.4' could not be satisfied.
28  Package 'libadwaita-1' has version '1.3.3', required version is '>= 1.4'
29
30warning: build failed, waiting for other jobs to finish...
31[45/47] Generating data/io.github.seadve.Kooha.metainfo.xml with a custom command
32FAILED: src/kooha
33/usr/bin/env CARGO_HOME=/home/mephisto/github/Kooha/_build/cargo-home /home/mephisto/.cargo/bin/cargo build --manifest-path /home/mephisto/github/Kooha/Cargo.toml --target-dir /home/mephisto/github/Kooha/_build/src --release && cp src/release/kooha src/kooha
34ninja: build stopped: subcommand failed.

特别说明,如果读者的环境能能安装 peek/Kooha,个人建议直接使用,省心省力。

2. 柳暗花明

当我准备再次使用 imagemagick 工具集,如下所示那样制作 gif 图片的时候,仿佛听到后面有人说: "你这里溢出了,这里少了个分号,这样是不对的..."。

1convert -delay 100 -loop 0 *.jpeg animatedGIF.gif

此时,我想起了 wf-recorder,一个简易功能强大的录屏工具。也许它不光能输出 mp4/webp,也能输出 gif 呢?

我翻看了 Readme 文档,Ctrl + F 搜索 gif 关键字,并没有任何匹配结果,通常这种情况下,一个坚实的 Linux 用户是不会放弃的,最终,在 issues 列表中搜索 gif 关注找到了真解,参考 issue

你只需要命令行这样操作就好了:

1wf-recorder -f test.gif -c gif -g "$(slurp)"
  • slurp 其实是另外一个软件,会让你选择范围,不带这个参数的话,会让你选择屏幕(如果使用了多屏幕的话)
  • -c gif 指定编码(codec)格式,没有这个参数,输出 test.gif 会报错。

其实 wf-recorder help 文档上也有相关说明,太隐蔽了,大部分人不会注意到。

-c, --codec Specifies the codec of the video. Supports GIF output also.

To modify codec parameters, use -p <option_name>=<option_value>

gif 图片示例(录制了好多秒,大小 792K):

test gif

停止录屏,按 Ctrl + c, 会有报错,忽略就好。

1➜  ~ wf-recorder -f test.gif -c gif -g "$(slurp)"
2Detected output based on geometry: DP-1
3selected region 1936,44 1263x973
4Using video filter: null
5Output #0, gif, to 'test.gif':
6  Stream #0:0: Video: gif, bgr8(pc), 1262x972 [SAR 1:1 DAR 631:486], q=2-31, 200 kb/s
7^C[gif @ 0x7f031c000d40] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 1167 >= 1102
最后修改于: Monday, August 28, 2023
欢迎关注微信公众号,留言交流。

相关文章:

翻译: