Automatizzare gli screenshot su Mac dalla riga di comando
Usa i loop di screencapture di macOS per screenshot a schermo intero, su un'area fissa e con cambio pagina, con nomi di file sicuri e risoluzione dei problemi.
13 min di letturaProduttivitàDi Temposhot Team
Ogni Mac include screencapture, il comando alla base delle scorciatoie di sistema per gli screenshot. Richiamato da un loop zsh, scatta screenshot a intervalli di tempo dell'intero schermo o di un'area fissa, senza software aggiuntivo. Questo articolo costruisce il loop un pezzo alla volta, aggiunge il cambio pagina ed elenca le soluzioni ai problemi più frequenti.
Verifica il permesso prima di correggere il comando
screencapture viene eseguito con i permessi dell'app che lo avvia. In Terminal, questo significa che Terminal deve avere il permesso di registrazione dello schermo. Senza questo permesso il comando termina correttamente, ma l'immagine mostra solo lo sfondo e la barra dei menu.
Apri System Settings, poi Privacy e sicurezza, e attiva la tua app di terminale (Terminal, iTerm o un'altra) nell'elenco della registrazione dello schermo. L'etichetta esatta cambia a seconda della versione di macOS. Chiudi e riapri l'app di terminale dopo la modifica.
Verifica il permesso con una cattura di prova
Una cattura di prova mostra se macOS permette al terminale di leggere lo schermo. Scatta la foto con più finestre aperte, poi apri il file. Se l'immagine mostra le finestre, il permesso funziona. Se mostra solo lo sfondo e la barra dei menu, il permesso manca oppure il terminale non è stato riavviato dopo la modifica.
Elimina il file di prova dopo la verifica. È un'immagine dell'intero schermo e può mostrare contenuti privati.
Scatta uno screenshot dal Terminale
Inizia con una singola cattura prima di scrivere qualsiasi loop:
screencapture -x ~/Desktop/test.png
open ~/Desktop/test.png
Il flag -x disattiva il suono dell'otturatore. Se l'immagine mostra le finestre aperte, il permesso e i percorsi funzionano. Esegui man screencapture per vedere tutti i flag supportati dalla tua versione di macOS.
Flag usati in questo articolo
I flag distinguono tra maiuscole e minuscole. -c copia l'immagine negli appunti, mentre -C aggiunge il puntatore all'immagine. Combina i flag come argomenti separati, per esempio screencapture -x -m -t jpg file.jpg.
Il ritardo -T viene applicato prima di ogni comando screencapture. In un loop aggiunge il ritardo a ogni fotogramma. Usa sleep nel loop quando il ritardo deve valere una sola volta.
Cattura lo schermo intero ogni pochi secondi
Questo loop esegue 20 catture, a distanza di 3 secondi, in una nuova cartella con nome basato sull'ora di avvio:
#!/bin/zsh
out=~/Captures/run-$(date +%Y%m%d-%H%M%S)
mkdir -p "$out"
for i in {1..20}; do
screencapture -x -m "$out/frame-$(printf %04d $i).png"
sleep 3
done
echo "Saved 20 frames to $out"
I nomi con zeri iniziali (frame-0001.png) mantengono i file nell'ordine di cattura in Finder e in qualsiasi strumento che ordina per nome. Il flag -m limita la cattura al display principale. Senza di esso, un Mac con due display si aspetta un nome di file per ogni display. Usa -D 2 per catturare il display secondario.
Salva lo script come capture.sh, esegui chmod +x capture.sh, poi ./capture.sh. Premi Control+C per fermarlo in anticipo. I fotogrammi già salvati restano nella cartella.
Calcola la durata del run
Il loop attende dopo ogni cattura, compresa l'ultima. Un run di 20 fotogrammi attende quindi 60 secondi in totale. Anche ogni cattura richiede un breve tempo, quindi la durata reale del run è leggermente superiore alla somma delle attese. La timeline seguente non include il tempo di cattura.
Per impostare un run in base alla durata, dividi la durata per l'intervallo. Un run di 10 minuti con un fotogramma ogni 5 secondi richiede 600 diviso 5, cioè 120 fotogrammi. Imposta il conteggio del loop a 120 e l'attesa a 5:
for i in {1..120}; do
screencapture -x -m "$out/frame-$(printf %04d $i).png"
sleep 5
done
Se una cattura richiede 0,2 secondi, le 120 catture aggiungono 24 secondi, quindi il run dura circa 624 secondi. Misura il tempo di cattura sul tuo Mac con time screencapture -x ~/Desktop/timing.png, poi elimina il file di prova.
Assegna ai fotogrammi un nome utile per la ricerca
Un nome che include il passaggio rende i fotogrammi più facili da trovare dopo il run. Scorri un elenco di nomi di passaggi nella stessa cartella $out:
steps=(login dashboard export)
for s in $steps; do
screencapture -x -m "$out/$s.png"
sleep 2
done
Usa anche una cartella per ogni attività. Il timestamp nel nome della cartella indica quando è iniziato il run, mentre il nome dell'attività indica cosa copre. Una cartella come Captures/onboarding-run-20261103-101500 tiene separati due run dello stesso giorno e ti permette di trovare un run senza aprire ogni file.
I nomi senza spazi evitano problemi di virgolette nella shell. Mantieni i numeri con zeri iniziali quando conta l'ordine di cattura e i nomi dei passaggi non lo indicano.
Ferma il loop in modo pulito
Control+C interrompe subito il loop. I fotogrammi già salvati restano nella cartella, ma lo script non stampa alcun riepilogo. Aggiungi un trap sopra il loop per stampare il conteggio quando arriva l'interruzione:
trap 'echo "Stopped after $i frames"; exit 0' INT
INT è il segnale inviato da Control+C. Il trap legge $i nel momento in cui arriva il segnale, quindi riporta il numero dell'ultimo fotogramma avviato. Un run interrotto durante una cattura può lasciare incompleto il file più recente. Elimina quel file prima di aprire la cartella in uno strumento PDF, oppure confronta la sua dimensione con quella dei fotogrammi precedenti.
Cattura ripetutamente un'area fissa
Aggiungi -R x,y,w,h per catturare un rettangolo. I valori sono in punti, misurati dall'angolo in alto a sinistra del display principale:
screencapture -x -R 200,120,1200,800 "$out/frame-$(printf %04d $i).png"
Per trovare le coordinate, premi Shift+Command+4 e osserva i numeri accanto al mirino sugli angoli in alto a sinistra e in basso a destra dell'area. La larghezza è il bordo destro meno il bordo sinistro, e l'altezza è il bordo inferiore meno il bordo superiore. La tabella seguente elenca i tasti usati in questo passaggio.
Un rettangolo fisso non segue una finestra. Se la finestra si sposta o la disposizione dei display cambia durante il run, i fotogrammi successivi catturano l'area sbagliata.
Converti i punti in pixel sui display Retina
I valori di -R sono in punti, ma il file salvato contiene pixel. Su un display Retina ogni punto copre due pixel in ciascuna direzione, quindi un rettangolo di 1200 per 800 punti viene salvato come immagine di 2400 per 1600 pixel. Le impostazioni di scala cambiano il fattore, quindi misura un fotogramma salvato invece di presumere un valore:
sips -g pixelWidth -g pixelHeight "$out/frame-0001.png"
Il confronto seguente mostra la dimensione salvata di due regioni su un display 2x e su un display 1x.
Un ritaglio basato sui pixel o una specifica di design richiede valori in pixel. Una cattura pianificata in punti richiede valori in punti in -R. Mescolare le due unità produce fotogrammi più grandi o più piccoli del layout previsto.
Salva file JPG invece di PNG
Usa -t jpg e cambia l'estensione:
screencapture -x -t jpg "$out/frame-$(printf %04d $i).jpg"
Il PNG mantiene nitidi i bordi del testo ed è il formato predefinito più sicuro per le interfacce. I file JPG sono più piccoli, il che conta nei run con centinaia di fotogrammi. Il comando accetta anche pdf e tiff.
Scegli il formato per un run lungo
Un run di 500 fotogrammi produce 500 file nel formato scelto. Scegli JPG quando conta di più la dimensione della cartella che la nitidezza dei bordi del testo. Scegli PNG quando il lettore deve ingrandire etichette piccole. Negli script indica esplicitamente -t png, così il formato è visibile nel codice.
Prima di un run lungo misura un fotogramma di ciascun formato. Esegui du -h sul file, poi moltiplica la dimensione per il numero di fotogrammi per stimare la dimensione della cartella.
Premi un tasto tra uno screenshot e l'altro senza saltare pagine
Scorrere le slide o un lettore richiede la pressione di un tasto dopo ogni cattura. osascript invia il tasto tramite System Events. Il key code 124 corrisponde a Freccia destra:
pages=30
for i in {1..$pages}; do
screencapture -x -m "$out/page-$(printf %04d $i).png"
if (( i < pages )); then
osascript -e 'tell application "System Events" to key code 124'
sleep 1.5
fi
done
Tre dettagli evitano pagine mancanti o in più. La cattura viene eseguita per prima, così viene salvata anche la pagina iniziale. Il if salta la pressione del tasto dopo l'ultima cattura, così il lettore non supera l'ultima pagina. Lo sleep dopo il tasto dà alla pagina successiva il tempo di renderizzarsi prima della cattura.
System Events invia i tasti all'app in primo piano, quindi fai clic sulla finestra del lettore prima di avviare il loop, oppure aggiungi un sleep 5 all'inizio per passare da un'app all'altra. Terminal richiede il permesso di Accessibilità per inviare eventi da tastiera.
Codici dei tasti per il cambio pagina
osascript identifica un tasto tramite il suo key code virtuale di macOS, non tramite il carattere che digita. Questi codici coprono i tasti più usati per cambiare pagina e confermare:
| Tasto | Codice |
|---|---|
| Freccia sinistra | 123 |
| Freccia destra | 124 |
| Freccia giù | 125 |
| Freccia su | 126 |
| Spazio | 49 |
| Invio | 36 |
Alcuni lettori cambiano pagina solo quando un controllo specifico ha il focus. Prova il tasto con un run di 3 pagine prima di un run lungo e verifica che ogni pagina cambi.
Ordina la cattura e la pressione del tasto
L'ordine all'interno del loop determina quale pagina mostra ciascun fotogramma. Il loop di questo passaggio cattura prima e preme il tasto dopo. Il flusso seguente mostra un ciclo.
Se il tasto venisse premuto per primo, ogni fotogramma mostrerebbe la pagina successiva a quella visualizzata, e la prima pagina non verrebbe mai salvata.
L'attesa dopo il tasto determina il ritmo. Una pagina renderizzata da un file locale di solito termina entro l'attesa di 1,5 secondi usata in questo articolo. Un lettore che carica le immagini dalla rete può richiedere da 3 a 5 secondi per alcune pagine. Controlla la pagina più lenta del documento, non la prima, perché una pagina piena di immagini determina l'attesa minima.
Due verifiche intercettano la maggior parte degli errori di cambio pagina prima di un run lungo:
- Esegui 3 pagine e apri i 3 fotogrammi. Ogni fotogramma deve mostrare una pagina diversa, in ordine.
- Confronta l'ultimo fotogramma con l'ultima pagina del documento. Se l'ultimo fotogramma ripete una pagina, il loop ha premuto il tasto una volta di troppo oppure l'attesa era troppo breve.
Tieni sveglio il Mac durante un run lungo
Se il display va in stop, i fotogrammi risultano neri. Avvolgi lo script in caffeinate, che mantiene un'asserzione di sospensione per tutta la durata dello script:
caffeinate -di ./capture.sh
Il flag -d mantiene il display acceso e -i impedisce la sospensione per inattività. caffeinate mantiene sveglio il Mac, ma non mantiene lo schermo sbloccato. I fotogrammi scattati con lo schermo bloccato mostrano la schermata di blocco, non l'app. Per un MacBook che resta sveglio con il coperchio chiuso e alimentazione collegata, aggiungi -s. La pagina di manuale di caffeinate indica che questo flag vale solo mentre il Mac è alimentato dalla rete elettrica.
Risolvi un loop di screencapture non riuscito
| Sintomo | Causa | Soluzione |
|---|---|---|
| Solo sfondo e barra dei menu | Manca il permesso di registrazione dello schermo | Abilita l'app di terminale, poi riaprila |
| "No such file or directory" | Cartella di output mancante | Esegui mkdir -p prima del loop |
| Due immagini o un errore per cattura | Più display, un solo nome di file | Aggiungi -m oppure -D 1 |
| Fotogrammi neri | Il display è andato in stop | Esegui lo script con caffeinate -di |
| Pagine saltate | Tasto inviato prima che la pagina fosse renderizzata | Aumenta lo sleep dopo il tasto |
| Pressioni di tasti ignorate | Manca il permesso di Accessibilità oppure in primo piano c'è l'app sbagliata | Abilita l'app di terminale, fai clic sulla finestra di destinazione |
Controlla la cartella di output
Un run completato lascia una cartella per ogni run, con nomi di fotogrammi che si ordinano nell'ordine di cattura. L'albero seguente mostra un run avviato alle 10:15:00 del 3 novembre 2026 con quattro fotogrammi. I fotogrammi da 5 a 20 seguono lo stesso schema.
Individua fotogrammi identici
Quando tutti i fotogrammi mostrano lo stesso contenuto, controlla queste cause in ordine:
- Il bersaglio non è cambiato tra una cattura e l'altra. Il loop salva ciò che è visibile sullo schermo, quindi una pagina che non cambia o una finestra di dialogo che resta aperta producono fotogrammi identici. Aggiungi una pressione di tasto o un'attesa più lunga.
- Un'altra finestra copre il bersaglio.
-Re-mcatturano la regione dello schermo, non la finestra che si trova dietro. Porta in primo piano la finestra di destinazione e mantienila lì per tutto il run. - L'intervallo è più breve del cambiamento. Una barra di avanzamento che si muove ogni 10 secondi appare ferma con un intervallo di 1 secondo. Controlla i fotogrammi con un intervallo più ampio prima di modificare il loop.
Se non sei sicuro che due file siano diversi, confronta il primo e l'ultimo fotogramma con shasum -a 256. Hash identici confermano pixel identici.
Conta i file dopo ogni run. Un run di 20 fotogrammi deve lasciare 20 file. Un numero inferiore indica che il loop si è fermato in anticipo oppure che una cattura è fallita con il messaggio mostrato nel terminale.
Quando uno script non è più la soluzione più semplice
Un loop di shell è adatto a un lavoro fisso che si svolge sempre allo stesso modo. Ogni nuovo requisito aggiunge codice: fermarsi a un orario, mettere in pausa e riprendere, scegliere una finestra per nome (il flag -l richiede un ID di finestra che macOS non mostra) oppure produrre un PDF ricercabile.
Auto Capture di Temposhot trasforma questi requisiti in impostazioni. Scegli Screens, Windows o Custom Area dalle miniature, imposta Screenshots, Duration o End time come condizione di arresto e registra un tasto qualsiasi nel campo Key press. Una barra mobile mette in pausa, riprende e termina il run. Gli export coprono PNG, JPG, ZIP, PDF ricercabile, MP4 e GIF. WebP compare solo quando il Mac dispone di un encoder WebP.
Associa ogni scelta dello script a un'impostazione
Ogni decisione dello script ha un'impostazione corrispondente in Auto Capture. I passaggi seguenti ricostruiscono in Temposhot il loop di cambio pagina:
Prima di passare, decidi quale parte dello script ti serve ancora. Auto Capture copre i casi comuni: una serie a tempo di un display, di una finestra o di un rettangolo, con una pressione di tasto opzionale tra un fotogramma e l'altro. Non esegue comandi di shell arbitrari tra una cattura e l'altra, quindi uno script con logica personalizzata, come rinominare i file da un foglio di calcolo, resta nella shell.
La corrispondenza per gli esempi di questo articolo è la seguente:
- Il loop di 20 fotogrammi con attesa di 3 secondi diventa una condizione di arresto Screenshots di 20 e un intervallo di 3 secondi.
- Il run di 10 minuti con un fotogramma ogni 5 secondi diventa una condizione di arresto Duration di 10 minuti e un intervallo di 5 secondi. Duration e End time richiedono un intervallo maggiore di zero.
- Il loop di cambio pagina diventa un Key press con Freccia destra e un intervallo di 1,5 secondi. Key press è una funzione Pro e richiede il permesso di Accessibilità.
- Il rettangolo fisso diventa Custom Area. Trascina il rettangolo finché l'overlay mostra la larghezza e l'altezza che ti servono.
Il piano gratuito limita il numero di screenshot per sessione. Un run che richiede più fotogrammi richiede Temposhot Pro.
Due impostazioni spesso differiscono dai valori predefiniti dello script. Il conto alla rovescia è di 3 secondi per impostazione predefinita, e ti dà il tempo di portare la pagina nel suo stato iniziale. Impostalo a 5 o 10 secondi quando il bersaglio ha bisogno di più tempo per caricarsi dopo che premi Start. L'intervallo è di 1 secondo per impostazione predefinita, quindi impostalo esplicitamente per ogni run.
Mantieni lo script per i lavori fissi
Usa lo script quando il lavoro è fisso e lo stesso comando viene eseguito su ogni macchina, per esempio una cattura notturna di una dashboard locale avviata da un cron job. Uno script è anche facile da mettere sotto controllo di versione, il che registra ogni modifica a tempi o regione.
Una sessione di Temposhot è adatta a un'attività svolta da una persona che guarda lo schermo, si ferma per una domanda e vuole un risultato nell'app. Entrambe le soluzioni possono produrre gli stessi fotogrammi. La differenza sta in chi mantiene le istruzioni: uno script vive in un file, mentre una configurazione di Auto Capture vive nell'app e segue i valori predefiniti salvati.
FAQ
Dove salva i file screencapture?
Li salva nel percorso che passi come ultimo argomento. Con -c copia invece l'immagine negli appunti.
screencapture può includere il cursore?
Sì. Aggiungi -C per includere il puntatore. Funziona solo nelle catture non interattive, cioè in tutti i comandi di questo articolo.
Come aggiungo un ritardo prima della prima cattura?
Usa -T 5 per un ritardo di 5 secondi su una singola cattura, oppure inserisci sleep 5 prima del loop.
Posso trasformare i fotogrammi in un PDF o in un video?
Sì. Image to PDF combina i fotogrammi in un unico PDF in ordine di nome, e Images to Video li trasforma in un video. Entrambi funzionano nel browser e mantengono i file sul tuo Mac.
screencapture può catturare una sola finestra?
Sì, con -l e un ID numerico di finestra. Terminal non elenca gli ID delle finestre, quindi l'ID deve provenire da un altro strumento. La scheda Windows di Auto Capture seleziona invece una finestra dalle miniature.
Perché dopo il fotogramma 9999 i fotogrammi si ordinano male?
Il formato %04d stampa almeno quattro cifre. Dal fotogramma 10000 in poi, nomi come frame-10000.png si ordinano prima di frame-9999.png nell'ordine alfabetico. Usa %05d per run più lunghi di 9999 fotogrammi.
I fotogrammi restano dopo Control+C?
Sì. I fotogrammi salvati prima dell'interruzione restano nella cartella. Il trap nella sezione precedente stampa il conteggio quando lo script si ferma.
Trasforma gli screenshot ripetibili in lavoro completato
Quando lo script cresce oltre una regione fissa e un conteggio fisso, prova invece Auto Capture. La guida alla cattura automatica descrive tutte le opzioni, e la pagina di download contiene la build per Apple Silicon.
command-linescreencapturezshscreenshot-automation
Termini utilizzati in questa pagina: retina screenshot, screenshot automation, screenshot timer
Trasforma gli screenshot ripetibili in lavoro completato
Temposhot scatta screenshot a intervalli regolari o a ogni clic ed esporta il risultato come PDF, immagini, ZIP o MP4.
Post correlati
- Come fare screenshot ripetuti con Automator su MacCrea un workflow di Automator con Take Screenshot e Loop, poi usa un'azione shell quando ti servono file in ordine.
- Automatizzare gli screenshot con l'app Shortcuts su MacUsa Shortcuts su Mac per fare screenshot a intervalli di tempo, avviare il comando a un orario preciso o all'apertura di un'app, e risolvere i problemi di permessi per script o registrazione dello schermo.
- Come automatizzare gli screenshot su Mac con gli strumenti integratiAutomatizza gli screenshot su Mac con screencapture, Automator o Shortcuts, con permessi, loop sicuri e risoluzione dei problemi.
- Che cos'è l'automazione degli screenshot su Mac?Cosa significa automazione degli screenshot su Mac, in cosa si differenzia dagli screenshot manuali e dalla registrazione dello schermo, e quando un flusso di acquisizione dedicato diventa utile.