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.

  • 2
    Good luck spying. – Oleh Prypin Jun 28 '11 at 20:03

Install scrot and then run this:

while true; do scrot & sleep 2; done
  • 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
watch -n2 scrot


while true; do scrot -d2; done
while true; do import -window root /path/to/where/you/want/to/save/`date`.png; done
  • 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

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)


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;


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.