Vai al contenuto

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.

Checklist con quattro verifiche: l'app di terminale è attiva in Registrazione dello schermo, il terminale è stato riavviato, l'immagine di prova mostra le finestre aperte e l'immagine si apre in Preview.

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

Elenco di sette flag di screencapture con i rispettivi effetti: nessun suono dell'otturatore, solo il display principale, display 2, output JPG, un rettangolo, il puntatore e un ritardo di 5 secondi.

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.

Timeline del loop a 20 fotogrammi: il fotogramma 1 a 0:00, il fotogramma 2 a 0:03, il fotogramma 20 a 0:57 e la riga di riepilogo a 1:00, dopo l'ultima attesa.
Tre valori per l'esempio a 20 fotogrammi: 20 fotogrammi per run, 60 secondi di attesa per run e 3 secondi tra un fotogramma e l'altro.

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.

Elenco di tre scorciatoie: Shift+Command+4 per un mirino con le coordinate, Shift+Command+3 per un file dell'intero schermo sul Desktop e Control+C per fermare un loop.

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.

Confronto di due regioni -R e della dimensione in pixel che ciascuna salva 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.

Confronto tra output PNG e JPG per i loop di screencapture, su bordi del testo, dimensione del file e tipo di run adatto a ciascun formato.

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:

TastoCodice
Freccia sinistra123
Freccia destra124
Freccia giù125
Freccia su126
Spazio49
Invio36

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.

Ciclo in quattro passaggi: cattura la pagina corrente, invia Freccia destra, attende 1,5 secondi, poi cattura la pagina successiva.

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.

Elenco di cose da fare e da non fare per un run lungo di screencapture: avvia lo script con caffeinate -di, tieni acceso il display, non presumere che il coperchio chiuso mantenga i fotogrammi e non usare caffeinate come condizione di arresto.

Risolvi un loop di screencapture non riuscito

SintomoCausaSoluzione
Solo sfondo e barra dei menuManca il permesso di registrazione dello schermoAbilita l'app di terminale, poi riaprila
"No such file or directory"Cartella di output mancanteEsegui mkdir -p prima del loop
Due immagini o un errore per catturaPiù display, un solo nome di fileAggiungi -m oppure -D 1
Fotogrammi neriIl display è andato in stopEsegui lo script con caffeinate -di
Pagine saltateTasto inviato prima che la pagina fosse renderizzataAumenta lo sleep dopo il tasto
Pressioni di tasti ignorateManca il permesso di Accessibilità oppure in primo piano c'è l'app sbagliataAbilita 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.

Albero dei file di un run di screencapture completato: una cartella Captures che contiene una cartella di run con quattro fotogrammi PNG numerati.

Individua fotogrammi identici

Quando tutti i fotogrammi mostrano lo stesso contenuto, controlla queste cause in ordine:

  1. 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.
  2. Un'altra finestra copre il bersaglio. -R e -m catturano 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.
  3. 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:

Quattro passaggi di configurazione in Auto Capture: scegli la sorgente, imposta la condizione di arresto e l'intervallo, registra Freccia destra nel campo Key press, poi imposta il conto alla rovescia e avvia il run.

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