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

相關文章:

翻譯: