Como tirar uma captura de tela a cada n segundo?

16

Que software posso usar para tirar capturas de tela com um intervalo definido? Eu gostaria de tirar screenshots a cada 2 segundos ou mais. Linha de comando e GUI estão ok.

Prefiro software que também possa redimensionar e compactar cada captura de tela.

Seppo Erviälä
fonte
2
Boa sorte espionagem.
Oleh Prypin

Respostas:

19

Instale scrote execute o seguinte:

while true; do scrot & sleep 2; done
Oli
fonte
isso não levaria 2 segundos + o tempo que o scrot leva para ser executado?
Seppo Erviälä
11
Isso parece ter uma captura de tela a cada 2,5 segundos no meu sistema. Eu gostaria de algo mais preciso.
Seppo Erviälä
7
@ Seppo: use while true; do scrot & sleep 2; done. Vai fundo scrot(ele é executado scrot, mas não bloqueia até scrot é feito)
Lekensteyn
2
Obrigado Lekensteyn, editei minha resposta com base nisso. Não achei que alguns milissegundos fariam diferença, mas são necessários 1/2 e levaria ainda mais tempo em um disco mais lento. Há um risco aqui de que, em um disco muito lento com um intervalo de 2 segundos adequado, ele esteja constantemente gravando em disco ou, pior ainda, preenchendo todos os buffers até que o sistema seja interrompido. O @Spopo garante que o que você está fazendo tenha tempo suficiente para gravar no disco.
Oli
7
watch -n2 scrot

ou

while true; do scrot -d2; done
lukasz
fonte
2
while true; do import -window root /path/to/where/you/want/to/save/`date`.png; done
markuz
fonte
11
Você precisará instalar o imagemagick para que isso funcione. Você pode adicionar um comando de suspensão ao script para fazer a captura de tela a cada 2 segundos, conforme a pergunta.
Javier Rivera
1

Conforme uma edição da sua pergunta:

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
fonte