截图命令行工具的最快图像捕获

Kon*_*nos 5 linux x11 performance screenshot imagemagick

我试图找到在 GNU/linux 中进行全屏连续截图的最快方法,而无需任何人工干预。到目前为止,我得到:

$ time for i in {1..10}; do import -window root test-$i.png; done
real    0m9.742s
user    0m11.324s
sys     0m0.584s

$ time for i in {1..10}; do scrot test-$i.png; done
real    0m1.686s
user    0m1.528s
sys     0m0.060s
Run Code Online (Sandbox Code Playgroud)

但是,我想要比 scrot 更快的东西。系统时间是在一台不错的(硬件方面的)台式电脑(运行 Ubuntu Linux)中进行的。有趣的是它托管了一个 kvm 机器(CrunchBang Linux),它返回:

$ time for i in {1..10}; do import -window root test-$i.png; done
real    0m7.591s
user    0m6.096s
sys     0m0.196s

$ time for i in {1..10}; do scrot test-$i.png; done
real    0m2.921s
user    0m2.440s
sys     0m0.120s
Run Code Online (Sandbox Code Playgroud)

因此,ImageMagick更快但scrot更慢!?!硬盘 I/O 似乎不会影响速度,因为我得到的时间几乎相同。

您对显着(或不太显着)提高速度有什么建议?

谢谢!

emc*_*lle 5

您所经历的时间可能会受到将屏幕图像转码为友好的 PNG 或 JPEG 格式的影响。只需使用 X xwd(X 转储显示实用程序)就可以将屏幕从 RAM 转储到磁盘。仅当您准备查看/处理原始 XWD 文件时才将其转换为另一种格式。

# Capture
time for i in {1..10}; do xwd -root -silent -out test-$i.xwd; done

# When ready to view
 mogrify -format PNG -path ./pngs test-*.xwd
Run Code Online (Sandbox Code Playgroud)

您甚至可以xwd通过仅转储特定窗口来加快进程;其中,可以预先计算。