12个稳定版本
2.5.1 | 2023年6月24日 |
---|---|
2.4.0 | 2023年5月5日 |
2.3.1 | 2022年9月2日 |
2.3.0 | 2022年7月31日 |
1.1.6 | 2017年9月23日 |
#117 in GUI
28KB
586 行
shotgun
针对X11的最小化截图工具。Shotgun是为了替换我在工作流程中的maim
而编写的。
功能
- 将PNG截图导出到文件或标准输出
- 遮罩多显示器设置中的屏幕外区域
- 支持通过窗口ID和几何形状进行选择
- 平均而言,shotgun比maim快两倍以上
用法
Usage: shotgun [options] [file]
Options:
-i, --id ID Window to capture
-g, --geometry WxH+X+Y
Area to capture
-f, --format png/pam
Output format
-s, --screen Capture the current screen
-h, --help Print help and exit
-v, --version Print version and exit
示例
与hacksaw一起使用:截取屏幕截图并将其复制到剪贴板
#!/bin/sh -e
selection=$(hacksaw -f "-i %i -g %g")
shotgun $selection - | xclip -t 'image/png' -selection clipboard
与slop(作为maim -s
的替代)一起使用
#!/bin/sh -e
sel=$(slop -f "-i %i -g %g")
shotgun $sel "$1"
shotgun与maim比较
- 仅支持PNG和PAM
- 不尝试包装slop
- 没有光标混合
- 默认使用带时间戳的文件而不是将原始PNG数据直接输出到终端(如果要将输出重定向到其他内容,请使用
-
作为文件名) - 省略了大多数命令行标志
- 不支持XShape扩展
- shotgun是用Rust编写的,maim是用C++编写的
- 代码库保持尽可能小和简单(尽可能多地在Rust允许的范围内)
省略这些功能有几个原因
- 可以通过外部程序和包装脚本轻松替换的功能
- 使用ImageMagick的
convert
和shotgun的-f pam
生成JPEG输出 - 在shell脚本中处理slop输出很简单
- 使用
sleep
代替-d
,因为slop需要单独调用,因此此标志不是必需的 -x
甚至不应该存在,请使用$DISPLAY
代替
- 使用ImageMagick的
- 我从不使用光标混合,我知道大多数用户实际上并不关心它
-w
(相对于另一个窗口的几何形状)难以使用且几乎无用,相反,shotgun始终将输入几何形状解释为相对于根窗口(maim的默认值是捕获的窗口本身)- 很少有理由截图XShape窗口,其中大部分都是特殊的,比如slop的选择窗口或keynav的十字准线。正确支持XShape可能会增加大量的开销,包括代码长度和性能,这些都不是我们所希望的。
性能
我声称shotgun比maim快两倍,以下是一些支持证据(使用hyperfine
)
$ xrandr --fb 3840x2160
$ hyperfine --warmup 15 --min-runs 50 \
> 'maim > /dev/null' \
> 'shotgun - > /dev/null'
Benchmark #1: maim > /dev/null
Time (mean ± σ): 629.3 ms ± 3.7 ms [User: 570.7 ms, System: 52.1 ms]
Range (min … max): 624.8 ms … 646.7 ms 50 runs
Benchmark #2: shotgun - > /dev/null
Time (mean ± σ): 293.0 ms ± 3.2 ms [User: 239.6 ms, System: 52.9 ms]
Range (min … max): 287.8 ms … 298.2 ms 50 runs
Summary
'shotgun - > /dev/null' ran
2.15 ± 0.03 times faster than 'maim > /dev/null'
进一步的性能分析表明,shotgun的瓶颈完全在于PNG编码器。
加快速度
可以通过使用-f pam
来避免PNG编码器的瓶颈。这会将输出格式设置为Netpbm PAM - 一种未压缩的二进制图像格式。
使用未压缩的格式可以同时提高编码和解码的性能
编码
$ hyperfine --warmup 15 --min-runs 50 \
> 'shotgun -f png - > /dev/null' \
> 'shotgun -f pam - > /dev/null'
Benchmark #1: shotgun -f png - > /dev/null
Time (mean ± σ): 294.5 ms ± 3.3 ms [User: 240.0 ms, System: 54.1 ms]
Range (min … max): 289.2 ms … 301.4 ms 50 runs
Benchmark #2: shotgun -f pam - > /dev/null
Time (mean ± σ): 116.8 ms ± 2.8 ms [User: 62.5 ms, System: 53.7 ms]
Range (min … max): 113.8 ms … 122.7 ms 50 runs
Summary
'shotgun -f pam - > /dev/null' ran
2.52 ± 0.07 times faster than 'shotgun -f png - > /dev/null'
解码(使用ImageMagick转换为jpg)
$ hyperfine --warmup 15 --min-runs 50 \
> 'shotgun -f png - | convert - jpg:- > /dev/null' \
> 'shotgun -f pam - | convert - jpg:- > /dev/null'
Benchmark #1: shotgun -f png - | convert - jpg:- > /dev/null
Time (mean ± σ): 600.7 ms ± 5.8 ms [User: 506.4 ms, System: 96.5 ms]
Range (min … max): 594.9 ms … 620.7 ms 50 runs
Benchmark #2: shotgun -f pam - | convert - jpg:- > /dev/null
Time (mean ± σ): 350.4 ms ± 3.9 ms [User: 217.0 ms, System: 139.3 ms]
Range (min … max): 345.5 ms … 367.8 ms 50 runs
Summary
'shotgun -f pam - | convert - jpg:- > /dev/null' ran
1.71 ± 0.03 times faster than 'shotgun -f png - | convert - jpg:- > /dev/null'
安装
- 从源代码安装
- 安装一个最新的Rust工具链
- 克隆此存储库并运行
cargo install --path .
- 或者从crates.io安装:
cargo install shotgun
- Arch Linux:
pacman -S shotgun
- Nix/NixOS:
nixpkgs.shotgun
- 其他发行版:提交一个请求以添加您的软件包或构建脚本!
依赖关系
~12MB
~251K SLoC