20

What software can I use to take screenshots with a set interval? I'd like to take screenshots every 2 second or so. Command-line and GUI are both ok.

I'd prefer software that can also resize and compress each screenshot.

jrg
  • 60,611

5 Answers5

25

Install scrot and then run this:

while true; do scrot & sleep 2; done
Oli
  • 293,335
  • wouldn't that take 2 seconds + time scrot takes to run? – Seppo Erviälä Jun 28 '11 at 16:31
  • 1
    This seems to take a screenshot every 2,5 seconds on my system. I'd like something more precise. – Seppo Erviälä Jun 28 '11 at 16:37
  • 8
    @Seppo: use while true; do scrot & sleep 2; done. It'll background scrot (it runs scrot, but does not block until scrot is done) – Lekensteyn Jun 28 '11 at 16:50
  • 2
    Thanks Lekensteyn, I edited my answer based on that. I didn't think a few milliseconds would make a difference but it takes 1/2 and would take even longer on a slower disk. Therei0s a risk here that on a very slow disk with a proper 2-second gap, it would be constantly writing to disk or worse still, it would fill up all the buffers until the system ground to a halt. @Seppo make sure whatever you're doing has enough time to write to disk. – Oli Jun 28 '11 at 21:15
  • When scrot takes a screenshot, its sound beeb, how silent this? – Fakhamatia Jan 21 '20 at 17:11
9
watch -n2 scrot

or

while true; do scrot -d2; done
David Foerster
  • 36,264
  • 56
  • 94
  • 147
lukasz
  • 2,406
4
while true; do import -window root /path/to/where/you/want/to/save/`date`.png; done
markuz
  • 151
  • 1
    You will need to install imagemagick for this to work. You can add a sleep command to the script to make it take the screen-shot every 2 seconds, as the question asks. – Javier Rivera Sep 13 '11 at 16:40
1

If you want to control the number of screenshots and/or maybe their names, you could do:

for i in {1..10};do
    scrot $i'.png' && sleep 1;
done

Cheers!

1

As per an edit to your question:

import threading
    import os

    def capture(i):
        i += 1
        threading.Timer(2.0, capture, [i]).start()
        fill = str(i).zfill(5)
        os.system("scrot scrot-%s.jpg" % fill)
        os.system("streamer -o streamer-%s.jpeg -s 320x240 -j 100" % fill)

    capture(0)
jrg
  • 60,611