Aller au contenu

Automatiser les captures d'écran sur Mac avec la ligne de commande

Utilisez les boucles screencapture de macOS pour les captures plein écran, les zones fixes et les changements de page, avec des noms de fichiers sûrs et le dépannage.

14 min de lectureProductivitéPar Temposhot Team

Chaque Mac inclut screencapture, la commande derrière les raccourcis de capture d'écran du système. Appelée depuis une boucle zsh, elle prend des captures temporisées de l'écran entier ou d'une zone fixe, sans logiciel supplémentaire. Cet article construit la boucle étape par étape, ajoute les changements de page et répertorie les corrections des pannes les plus fréquentes.

Vérifier l'autorisation avant de déboguer la commande

screencapture s'exécute avec les autorisations de l'application qui la lance. Dans Terminal, cela signifie que Terminal doit avoir l'autorisation d'enregistrement de l'écran. Sans elle, la commande réussit quand même, mais l'image ne montre que le fond d'écran et la barre de menus.

Ouvrez System Settings, puis Privacy and Security (Confidentialité et sécurité), et activez votre application de terminal (Terminal, iTerm ou une autre) dans la liste d'enregistrement de l'écran (Screen Recording). Le libellé exact varie selon la version de macOS. Quittez puis rouvrez l'application de terminal après cette modification.

Confirmer l'autorisation avec une capture de test

Une capture de test montre si macOS autorise le terminal à lire l'écran. Faites une capture avec plusieurs fenêtres ouvertes, puis ouvrez le fichier. Si l'image montre les fenêtres, l'autorisation fonctionne. Si elle ne montre que le fond d'écran et la barre de menus, l'autorisation manque ou le terminal n'a pas été redémarré après la modification.

Liste de contrôle en quatre points : le terminal est autorisé dans l'enregistrement de l'écran, le terminal a été quitté puis rouvert, l'image de test montre les fenêtres ouvertes, et l'image de test s'ouvre dans Preview.

Supprimez le fichier de test après la vérification. C'est une image plein écran qui peut afficher du contenu privé.

Prendre une capture depuis Terminal

Commencez par une seule capture avant d'écrire une boucle :

screencapture -x ~/Desktop/test.png
open ~/Desktop/test.png

L'option -x désactive le bruit d'obturateur. Si l'image montre vos fenêtres ouvertes, l'autorisation et les chemins fonctionnent. Exécutez man screencapture pour voir chaque option prise en charge par votre version de macOS.

Options utilisées dans cet article

Liste de réglages de sept options screencapture avec leur effet : pas de bruit d'obturateur, écran principal seulement, écran 2, sortie JPG, un rectangle, le pointeur et un délai de 5 secondes.

Les options sont sensibles à la casse. -c copie l'image dans le presse-papiers, et -C ajoute le pointeur à l'image. Combinez les options en arguments séparés, par exemple screencapture -x -m -t jpg file.jpg.

Le délai -T s'exécute avant chaque commande screencapture. Dans une boucle, il ajoute ce délai à chaque image. Utilisez sleep dans la boucle lorsque le délai ne doit s'appliquer qu'une seule fois.

Capturer l'écran entier toutes les quelques secondes

Cette boucle prend 20 captures, à 3 secondes d'intervalle, dans un nouveau dossier nommé d'après l'heure de départ :

#!/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"

Les noms à numérotation complétée par des zéros (frame-0001.png) gardent les fichiers dans l'ordre de capture dans le Finder et dans tout outil qui trie par nom. L'option -m limite la capture à l'écran principal. Sans elle, un Mac à deux écrans attend un nom de fichier par écran. Utilisez -D 2 pour capturer l'écran secondaire à la place.

Enregistrez le script sous capture.sh, exécutez chmod +x capture.sh, puis ./capture.sh. Appuyez sur Control+C pour arrêter plus tôt. Les images déjà enregistrées restent dans le dossier.

Calculer la durée d'une exécution

La boucle attend après chaque capture, y compris la dernière. Une exécution de 20 images dort donc 60 secondes au total. Chaque capture prend aussi un court instant, si bien que la durée réelle dépasse un peu le total des pauses. La chronologie ci-dessous ne tient pas compte du temps de capture.

Chronologie de la boucle de 20 images : image 1 à 0:00, image 2 à 0:03, image 20 à 0:57, et la ligne de résumé à 1:00 après la dernière pause.
Trois chiffres de l'exemple de 20 images : 20 images par exécution, 60 secondes de pause par exécution et 3 secondes entre les images.

Pour fixer une exécution par durée, divisez la durée par l'intervalle. Une exécution de 10 minutes qui prend une image toutes les 5 secondes nécessite 600 divisé par 5, soit 120 images. Réglez le nombre de boucles sur 120 et la pause sur 5 :

for i in {1..120}; do
  screencapture -x -m "$out/frame-$(printf %04d $i).png"
  sleep 5
done

Si une capture prend 0,2 seconde, les 120 captures ajoutent 24 secondes, donc l'exécution dure environ 624 secondes. Mesurez le temps de capture sur votre Mac avec time screencapture -x ~/Desktop/timing.png, puis supprimez le fichier de test.

Nommer les images pour une recherche ultérieure

Un nom qui inclut l'étape rend les images plus faciles à retrouver après l'exécution. Parcourez une liste de noms d'étapes dans le même dossier $out :

steps=(login dashboard export)
for s in $steps; do
  screencapture -x -m "$out/$s.png"
  sleep 2
done

Gardez aussi un dossier par tâche. L'horodatage du nom de dossier indique le début de l'exécution, et le nom de la tâche indique ce qu'elle couvre. Un dossier tel que Captures/onboarding-run-20261103-101500 sépare deux exécutions du même jour et permet de retrouver une exécution sans ouvrir chaque fichier.

Les noms sans espaces évitent les problèmes de guillemets dans le shell. Conservez les numéros complétés par des zéros lorsque l'ordre de capture importe et que les noms d'étapes n'importent pas.

Arrêter la boucle proprement

Control+C arrête la boucle immédiatement. Les images déjà enregistrées restent dans le dossier, mais le script n'affiche aucun résumé. Ajoutez un trap au-dessus de la boucle pour afficher le nombre d'images lorsque l'interruption survient :

trap 'echo "Stopped after $i frames"; exit 0' INT

INT est le signal envoyé par Control+C. Le trap lit $i au moment où le signal arrive, il indique donc le numéro de la dernière image commencée. Une exécution arrêtée pendant une capture peut laisser le dernier fichier incomplet. Supprimez ce fichier avant d'ouvrir le dossier dans un outil PDF, ou comparez sa taille avec celle des images précédentes.

Capturer une zone fixe de manière répétée

Ajoutez -R x,y,w,h pour capturer un rectangle. Les valeurs sont exprimées en points, mesurés depuis le coin supérieur gauche de l'écran principal :

screencapture -x -R 200,120,1200,800 "$out/frame-$(printf %04d $i).png"

Pour trouver les coordonnées, appuyez sur Shift+Command+4 et observez les nombres près du réticule, aux coins supérieur gauche et inférieur droit de la zone. La largeur correspond au bord droit moins le bord gauche, et la hauteur au bord inférieur moins le bord supérieur. Le tableau ci-dessous répertorie les touches utilisées autour de cette étape.

Liste de raccourcis avec trois touches : Shift+Command+4 pour un réticule avec coordonnées, Shift+Command+3 pour un fichier plein écran sur le Bureau, et Control+C pour arrêter une boucle.

Un rectangle fixe ne suit pas une fenêtre. Si la fenêtre se déplace ou si la disposition des écrans change pendant l'exécution, les images suivantes capturent la mauvaise zone.

Convertir les points en pixels sur les écrans Retina

Les valeurs -R sont en points, mais le fichier enregistré contient des pixels. Sur un écran Retina, chaque point couvre deux pixels dans chaque direction. Un rectangle de 1200 par 800 points est donc enregistré en image de 2400 par 1600 pixels. Les réglages de mise à l'échelle modifient ce facteur. Mesurez donc une image enregistrée au lieu de supposer une valeur :

sips -g pixelWidth -g pixelHeight "$out/frame-0001.png"

La comparaison ci-dessous montre la taille enregistrée de deux zones sur un écran 2x et sur un écran 1x.

Comparaison de deux zones -R et de la taille en pixels enregistrée pour chacune, sur un écran 2x et sur un écran 1x.

Un recadrage en pixels ou une spécification de design nécessite des valeurs en pixels. Une capture planifiée en points nécessite des valeurs en points dans -R. Mélanger les deux unités produit des images plus grandes ou plus petites que la mise en page prévue.

Enregistrer des fichiers JPG au lieu de PNG

Utilisez -t jpg et changez l'extension :

screencapture -x -t jpg "$out/frame-$(printf %04d $i).jpg"

PNG conserve des bords de texte nets et constitue la valeur par défaut la plus sûre pour les interfaces. Les fichiers JPG sont plus petits, ce qui compte pour les exécutions de centaines d'images. La commande accepte aussi pdf et tiff.

Choisir le format pour une exécution longue

Une exécution de 500 images produit 500 fichiers dans le format choisi. Choisissez JPG lorsque la taille du dossier compte plus que la netteté des bords du texte. Choisissez PNG lorsqu'un lecteur doit zoomer sur de petites étiquettes. Passez -t png explicitement dans les scripts pour que le format soit visible dans le code.

Comparaison des sorties PNG et JPG pour les boucles screencapture, portant sur les bords du texte, la taille des fichiers et le type d'exécution adapté à chaque format.

Mesurez une image de chaque format avant une exécution longue. Exécutez du -h sur le fichier, puis multipliez la taille par le nombre d'images pour estimer la taille du dossier.

Appuyer sur une touche entre les captures sans dépasser

Parcourir des diapositives ou un lecteur nécessite un appui sur une touche après chaque capture. osascript envoie une touche via System Events. Le code de touche 124 correspond à la flèche droite :

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

Trois détails évitent les pages manquées ou en trop. La capture s'exécute en premier, donc la page de départ est enregistrée. Le if ignore l'appui sur la touche après la dernière capture, afin que le lecteur ne passe pas au-delà de la dernière page. La pause sleep après la touche laisse à la page suivante le temps de s'afficher avant la capture suivante.

System Events envoie les touches à l'application au premier plan. Cliquez donc sur la fenêtre du lecteur avant le début de la boucle, ou ajoutez un sleep 5 au début pour changer d'application. Terminal a besoin de l'autorisation Accessibility pour envoyer des événements clavier.

Codes de touches pour tourner les pages

osascript identifie une touche par son code de touche virtuel macOS, et non par le caractère qu'elle saisit. Ces codes couvrent les touches les plus utilisées pour tourner les pages et confirmer :

ToucheCode
Flèche gauche123
Flèche droite124
Flèche bas125
Flèche haut126
Espace49
Retour36

Certains lecteurs ne tournent les pages que lorsqu'un contrôle précis a le focus. Testez la touche sur une exécution de 3 pages avant une exécution longue, et vérifiez que chaque page change.

Ordonner la capture et l'appui sur la touche

L'ordre à l'intérieur de la boucle détermine la page affichée par chaque image. La boucle de cette section capture d'abord et appuie sur la touche ensuite. Le schéma ci-dessous montre un cycle.

Cycle en quatre étapes : capturer la page actuelle, envoyer la flèche droite, attendre 1,5 seconde, puis capturer la page suivante.

Si la touche venait en premier, chaque image montrerait la page suivant celle affichée, et la première page ne serait jamais enregistrée.

La pause après la touche fixe le rythme. Une page affichée à partir d'un fichier local se termine généralement pendant la pause de 1,5 seconde utilisée dans cet article. Un lecteur qui charge des images par le réseau peut avoir besoin de 3 à 5 secondes pour certaines pages. Vérifiez la page la plus lente du document, et non la première, car une page pleine d'images fixe le délai minimal.

Deux vérifications détectent la plupart des erreurs de changement de page avant une exécution longue :

  • Exécutez 3 pages et ouvrez les 3 images. Chaque image doit montrer une page différente, dans l'ordre.
  • Comparez la dernière image à la dernière page du document. Si la dernière image répète une page, la boucle a appuyé sur la touche une fois de trop, ou la pause était trop courte.

Garder une longue exécution éveillée

Si l'écran se met en veille, les images sont noires. Placez le script dans caffeinate, qui maintient une assertion de veille tant que le script s'exécute :

caffeinate -di ./capture.sh

L'option -d maintient l'écran allumé et -i empêche la mise en veille due à l'inactivité. caffeinate garde le Mac éveillé, mais ne garde pas l'écran déverrouillé. Les images prises pendant que l'écran est verrouillé montrent l'écran de verrouillage, et non l'application. Pour un MacBook qui reste éveillé capot fermé sur secteur, ajoutez -s. La page de manuel de caffeinate indique que cette option ne s'applique que lorsque le Mac fonctionne sur secteur.

Liste de bonnes pratiques et d'erreurs pour une longue exécution screencapture : lancer le script avec caffeinate, garder l'écran allumé, ne pas supposer qu'un capot fermé continue de produire des images, et ne pas utiliser caffeinate comme condition d'arrêt.

Résoudre une panne de boucle screencapture

SymptômeCauseCorrection
Seulement le fond d'écran et la barre de menusAutorisation d'enregistrement de l'écran manquanteAutorisez l'application de terminal, puis rouvrez-la
"No such file or directory"Dossier de sortie absentExécutez mkdir -p avant la boucle
Deux images ou une erreur par capturePlusieurs écrans, un seul nom de fichierAjoutez -m ou -D 1
Images noiresÉcran en veilleLancez le script avec caffeinate -di
Pages sautéesTouche envoyée avant le rendu de la pageAugmentez la pause sleep après la touche
Appuis sur les touches ignorésAutorisation Accessibility manquante ou mauvaise application au premier planAutorisez l'application de terminal, cliquez sur la fenêtre cible

Vérifier le dossier de sortie

Une exécution terminée laisse un dossier par exécution, avec des noms d'images qui se trient dans l'ordre de capture. L'arborescence ci-dessous montre une exécution démarrée à 10:15:00 le 3 novembre 2026 avec quatre images. Les images 5 à 20 suivent le même schéma.

Arborescence d'une exécution screencapture terminée : un dossier Captures contenant un dossier d'exécution avec quatre images PNG numérotées.

Diagnostiquer des images identiques

Lorsque toutes les images montrent le même contenu, vérifiez ces causes dans l'ordre :

  1. La cible n'a pas changé entre les captures. La boucle enregistre ce qui est affiché à l'écran. Une page qui ne tourne jamais, ou une boîte de dialogue qui reste ouverte, produit des images identiques. Ajoutez un appui sur une touche ou une attente plus longue.
  2. Une autre fenêtre recouvre la cible. -R et -m capturent la zone de l'écran, et non la fenêtre située derrière. Placez la fenêtre cible au premier plan et gardez-la là pendant toute l'exécution.
  3. L'intervalle est plus court que le changement. Une barre de progression qui bouge toutes les 10 secondes paraît figée avec un intervalle de 1 seconde. Vérifiez les images avec un intervalle plus large avant de modifier la boucle.

Comparez les fichiers de la première et de la dernière image avec shasum -a 256 si vous ne savez pas si deux fichiers diffèrent. Des empreintes identiques confirment des pixels identiques.

Comptez les fichiers après chaque exécution. Une exécution de 20 images doit laisser 20 fichiers. Un nombre inférieur signifie que la boucle s'est arrêtée tôt, ou qu'une capture a échoué avec le message affiché dans le terminal.

Quand un script n'est plus la solution simple

Une boucle shell convient à une tâche fixe qui s'exécute toujours de la même façon. Chaque nouvelle exigence ajoute du code : arrêter à une heure donnée, mettre en pause et reprendre, choisir une fenêtre par son nom (l'option -l demande un identifiant de fenêtre que macOS ne liste pas pour vous), ou produire un PDF consultable.

Auto Capture de Temposhot transforme ces exigences en réglages. Vous choisissez Screens, Windows ou Custom Area à partir de vignettes, vous définissez Screenshots, Duration ou End time comme condition d'arrêt, et vous enregistrez une touche dans le champ Key press. Une barre d'outils flottante met en pause, reprend et termine l'exécution. Les exports couvrent PNG, JPG, ZIP, PDF consultable, MP4 et GIF. Le format WebP n'apparaît que lorsque le Mac dispose d'un encodeur WebP.

Associer chaque choix du script à un réglage

Chaque décision du script a un réglage correspondant dans Auto Capture. Les étapes ci-dessous reconstruisent la boucle de changement de page dans Temposhot :

Quatre étapes de configuration dans Auto Capture : choisir la source, définir la condition d'arrêt et l'intervalle, enregistrer la flèche droite dans le champ Key press, puis définir le compte à rebours et lancer l'exécution.

Avant de changer d'outil, décidez quelle partie du script vous est encore utile. Auto Capture couvre les cas courants : une série temporisée d'un écran, d'une fenêtre ou d'un rectangle, avec un appui sur une touche facultatif entre les images. Il n'exécute pas de commandes shell arbitraires entre les captures. Un script qui contient une logique personnalisée, comme renommer des fichiers à partir d'un tableur, reste donc dans le shell.

La correspondance pour les exemples de cet article :

  • La boucle de 20 images avec une pause de 3 secondes devient une condition d'arrêt Screenshots de 20 et un intervalle de 3 secondes.
  • L'exécution de 10 minutes à une image toutes les 5 secondes devient une condition d'arrêt Duration de 10 minutes et un intervalle de 5 secondes. Duration et End time exigent un intervalle supérieur à zéro.
  • La boucle de changement de page devient un Key press avec la flèche droite et un intervalle de 1,5 seconde. Key press est une fonctionnalité Pro et nécessite l'autorisation Accessibility.
  • Le rectangle fixe devient Custom Area. Faites glisser le rectangle jusqu'à ce que la superposition affiche la largeur et la hauteur souhaitées.

Le forfait gratuit limite le nombre de captures d'écran par session. Une exécution qui nécessite plus d'images requiert Temposhot Pro.

Deux réglages diffèrent souvent des valeurs par défaut du script. Le compte à rebours est de 3 secondes par défaut, ce qui vous laisse le temps de placer la page dans son état de départ. Réglez-le sur 5 ou 10 secondes lorsque la cible a besoin de plus de temps pour se charger après que vous avez cliqué sur Start. L'intervalle est de 1 seconde par défaut. Définissez-le donc explicitement pour chaque exécution.

Garder le script pour les tâches fixes

Utilisez le script lorsque la tâche est fixe et que la même commande s'exécute sur chaque machine, par exemple une capture nocturne d'un tableau de bord local lancée par une tâche cron. Un script se gère aussi facilement avec un contrôle de version, ce qui enregistre chaque modification du timing ou de la zone.

Une session Temposhot convient à une tâche exécutée par une personne qui surveille l'écran, fait une pause pour poser une question et veut un résultat dans l'application. Les deux peuvent produire les mêmes images. La différence tient à la personne qui maintient les instructions : un script vit dans un fichier, tandis qu'une configuration Auto Capture vit dans l'application et suit les valeurs par défaut enregistrées.

FAQ

Où screencapture enregistre-t-il les fichiers ?

Il enregistre dans le chemin passé en dernier argument. Avec -c, il copie l'image dans le presse-papiers à la place.

screencapture peut-il inclure le curseur ?

Oui. Ajoutez -C pour inclure le pointeur. Cela ne fonctionne que pour les captures non interactives, ce qui couvre toutes les commandes de cet article.

Comment ajouter un délai avant la première capture ?

Utilisez -T 5 pour un délai de 5 secondes sur une seule capture, ou placez sleep 5 avant la boucle.

Puis-je transformer les images en PDF ou en vidéo ?

Oui. Image to PDF combine les images en un seul PDF dans l'ordre des noms, et Images to Video les transforme en vidéo. Les deux fonctionnent dans le navigateur et conservent les fichiers sur votre Mac.

screencapture peut-il capturer une seule fenêtre ?

Oui, avec -l et un identifiant numérique de fenêtre. Terminal n'affiche pas les identifiants de fenêtre. L'identifiant doit donc venir d'un autre outil. L'onglet Windows d'Auto Capture sélectionne une fenêtre à partir de vignettes à la place.

Pourquoi l'ordre est-il faux après l'image 9999 ?

Le format %04d affiche au moins quatre chiffres. À partir de l'image 10000, des noms tels que frame-10000.png se trient avant frame-9999.png dans l'ordre des noms. Utilisez %05d pour les exécutions de plus de 9999 images.

Les images sont-elles conservées après Control+C ?

Oui. Les images enregistrées avant l'interruption restent dans le dossier. Le trap de la section ci-dessus affiche le nombre d'images lorsque le script s'arrête.

Transformer des captures répétables en travail fini

Lorsque le script dépasse une zone fixe et un nombre fixe d'images, essayez plutôt Auto Capture. Le guide de capture automatisée couvre toutes les options, et la page de téléchargement propose la version Apple Silicon.

command-linescreencapturezshscreenshot-automation

Termes utilisés ici : retina screenshot, screenshot automation, screenshot timer

Transformez vos captures d'écran répétitives en résultats prêts à l'emploi

Temposhot capture l'écran à intervalles réguliers ou à chaque clic et exporte le résultat au format PDF, image, ZIP ou MP4.

Articles connexes