macOS에서 명령줄로 스크린샷 자동화하기
macOS screencapture 반복문으로 전체 화면, 고정 영역, 페이지 넘김 스크린샷을 찍습니다. 안전한 파일 이름 짓기와 자주 발생하는 오류의 해결 방법도 다룹니다.
11분 분량생산성작성자: Temposhot Team
모든 Mac에는 시스템 스크린샷 단축키의 바탕이 되는 screencapture 명령이 들어 있습니다. zsh 반복문에서 호출하면 추가 소프트웨어 없이 전체 화면이나 고정 영역을 일정 간격으로 촬영합니다. 이 글은 반복문을 한 단계씩 만들고, 페이지 넘김을 추가하며, 가장 자주 발생하는 실패의 해결 방법을 정리합니다.
명령을 디버깅하기 전에 권한 확인하기
screencapture는 이를 실행한 앱의 권한으로 동작합니다. 터미널에서 실행하면 터미널에 화면 녹화 권한이 있어야 합니다. 권한이 없어도 명령은 성공으로 끝나지만, 이미지에는 배경화면과 메뉴 막대만 나타납니다.
System Settings를 열고 Privacy and Security로 이동한 뒤, Screen Recording 목록에서 터미널 앱(Terminal, iTerm 등)을 켭니다. 메뉴 이름은 macOS 버전에 따라 다를 수 있습니다. 설정을 바꾼 뒤에는 터미널 앱을 종료했다가 다시 실행합니다.
테스트 캡처로 권한 확인하기
테스트 캡처로 macOS가 터미널의 화면 읽기를 허용하는지 확인합니다. 창을 여러 개 연 상태에서 캡처한 뒤 파일을 엽니다. 이미지에 창이 보이면 권한이 정상입니다. 배경화면과 메뉴 막대만 보이면 권한이 없거나, 설정을 바꾼 뒤 터미널을 다시 시작하지 않은 것입니다.
테스트 파일은 전체 화면 이미지이므로 확인 후 삭제합니다. 개인 정보가 찍혔을 수 있습니다.
터미널에서 스크린샷 한 장 찍기
반복문을 작성하기 전에 한 번만 캡처합니다.
screencapture -x ~/Desktop/test.png
open ~/Desktop/test.png
-x 플래그는 셔터음을 끕니다. 이미지에 열린 창이 보이면 권한과 경로가 정상입니다. 사용 중인 macOS가 지원하는 모든 플래그는 man screencapture로 확인합니다.
이 글에서 사용하는 플래그
플래그는 대소문자를 구분합니다. -c는 이미지를 클립보드에 복사하고, -C는 포인터를 이미지에 넣습니다. 플래그는 screencapture -x -m -t jpg file.jpg처럼 각각 별도의 인자로 조합합니다.
-T 지연은 screencapture 명령이 실행되기 전마다 적용됩니다. 반복문 안에서 쓰면 모든 프레임에 지연이 더해집니다. 지연을 한 번만 적용하려면 반복문 안에서 sleep을 사용합니다.
전체 화면을 몇 초마다 캡처하기
이 반복문은 3초 간격으로 20장을 촬영해 시작 시각 이름의 새 폴더에 저장합니다.
#!/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"
0으로 채운 파일 이름(frame-0001.png)은 Finder와 이름순으로 정렬하는 도구에서 캡처 순서를 유지합니다. -m 플래그는 캡처를 주 디스플레이로 제한합니다. 이 플래그가 없으면 디스플레이가 두 개인 Mac은 디스플레이마다 파일 이름을 하나씩 요구합니다. 보조 디스플레이를 캡처하려면 -D 2를 사용합니다.
스크립트를 capture.sh로 저장하고 chmod +x capture.sh를 실행한 뒤 ./capture.sh로 실행합니다. 중간에 멈추려면 Control+C를 누릅니다. 이미 저장된 프레임은 폴더에 남습니다.
실행 시간 계산하기
반복문은 마지막 캡처 뒤에도 sleep을 실행합니다. 따라서 20장 실행은 총 60초 동안 대기합니다. 캡처 자체에도 짧은 시간이 걸리므로 실제 실행 시간은 대기 시간 합계보다 조금 깁니다. 아래 타임라인은 캡처 시간을 제외합니다.
실행 시간을 기준으로 프레임 수를 정하려면 전체 시간을 간격으로 나눕니다. 5초마다 한 프레임을 찍어 10분 동안 실행하려면 600을 5로 나눈 120프레임이 필요합니다. 반복 횟수를 120으로, 대기 시간을 5로 설정합니다.
for i in {1..120}; do
screencapture -x -m "$out/frame-$(printf %04d $i).png"
sleep 5
done
캡처 한 번에 0.2초가 걸리면 120번의 캡처가 24초를 더하므로 실행 시간은 약 624초가 됩니다. 실제 캡처 시간은 time screencapture -x ~/Desktop/timing.png로 측정하고, 측정 후 테스트 파일은 삭제합니다.
나중에 검색하기 쉬운 이름으로 프레임 저장하기
파일 이름에 단계를 넣으면 실행 후 프레임을 찾기 쉽습니다. 같은 $out 폴더 안에서 단계 이름 목록을 반복합니다.
steps=(login dashboard export)
for s in $steps; do
screencapture -x -m "$out/$s.png"
sleep 2
done
작업마다 폴더를 하나씩 만드는 것도 좋습니다. 폴더 이름의 타임스탬프는 실행 시작 시각을, 작업 이름은 캡처 범위를 나타냅니다. 예를 들어 Captures/onboarding-run-20261103-101500 같은 이름을 쓰면 같은 날 실행한 두 작업을 구분할 수 있고, 파일을 하나씩 열지 않고도 실행 결과를 찾을 수 있습니다.
셸에서 따옴표 문제를 피하려면 파일 이름에 공백을 넣지 않습니다. 캡처 순서가 중요하고 단계 이름으로는 순서를 알 수 없을 때는 0으로 채운 번호를 유지합니다.
반복문을 깔끔하게 중단하기
Control+C를 누르면 반복문이 즉시 끝납니다. 저장된 프레임은 폴더에 남지만 스크립트는 요약을 출력하지 않습니다. 반복문 위에 trap을 추가하면 인터럽트 신호를 받을 때 프레임 수를 출력합니다.
trap 'echo "Stopped after $i frames"; exit 0' INT
INT는 Control+C가 보내는 신호입니다. trap은 신호를 받는 시점의 $i를 읽으므로, 시작된 마지막 프레임 번호를 출력합니다. 캡처 도중 중단하면 가장 최근 파일이 불완전할 수 있습니다. PDF 도구로 폴더를 열기 전에 그 파일을 삭제하거나, 앞선 프레임과 파일 크기를 비교합니다.
고정 영역을 반복해서 캡처하기
사각형을 캡처하려면 -R x,y,w,h를 추가합니다. 값은 주 디스플레이의 왼쪽 위 모서리를 기준으로 한 포인트 단위입니다.
screencapture -x -R 200,120,1200,800 "$out/frame-$(printf %04d $i).png"
좌표를 찾으려면 Shift+Command+4를 누르고, 영역의 왼쪽 위와 오른쪽 아래 모서리에 있는 십자선 옆 숫자를 확인합니다. 너비는 오른쪽 가장자리에서 왼쪽 가장자리를 뺀 값이고, 높이는 아래쪽 가장자리에서 위쪽 가장자리를 뺀 값입니다. 아래 표는 이 단계에서 사용하는 키를 정리합니다.
고정 사각형은 창을 따라가지 않습니다. 실행 도중 창이 움직이거나 디스플레이 배치가 바뀌면 이후 프레임은 잘못된 영역을 캡처합니다.
Retina 디스플레이에서 포인트를 픽셀로 변환하기
-R 값은 포인트 단위이지만 저장되는 파일은 픽셀 단위입니다. Retina 디스플레이에서는 한 포인트가 가로와 세로 각각 두 픽셀을 차지하므로, 1200 x 800 포인트 사각형은 2400 x 1600 픽셀 이미지로 저장됩니다. 배율 설정에 따라 값이 달라지므로 가정하지 말고 저장된 프레임을 측정합니다.
sips -g pixelWidth -g pixelHeight "$out/frame-0001.png"
아래 비교는 2x 디스플레이와 1x 디스플레이에서 두 영역을 캡처했을 때 저장되는 크기를 보여줍니다.
픽셀 기준으로 자르거나 디자인 사양이 픽셀 값이라면 픽셀 값을 사용합니다. 포인트 기준으로 계획한 캡처라면 -R에 포인트 값을 넣습니다. 두 단위를 섞으면 계획한 레이아웃보다 크거나 작은 프레임이 만들어집니다.
PNG 대신 JPG 파일로 저장하기
-t jpg를 사용하고 확장자를 바꿉니다.
screencapture -x -t jpg "$out/frame-$(printf %04d $i).jpg"
PNG는 텍스트 가장자리를 선명하게 유지하므로 인터페이스 캡처의 기본값으로 더 적합합니다. JPG 파일은 크기가 작아서 수백 장을 찍는 실행에서 유리합니다. 이 명령은 pdf와 tiff도 지원합니다.
장시간 실행에 맞는 형식 고르기
500프레임을 찍으면 선택한 형식으로 파일 500개가 만들어집니다. 폴더 크기가 텍스트의 선명도보다 중요하면 JPG를 고릅니다. 독자가 작은 레이블을 확대해서 읽어야 하면 PNG를 고릅니다. 스크립트에는 형식이 코드에서 드러나도록 -t png를 명시합니다.
긴 실행 전에는 형식별로 프레임 한 장을 찍어 비교합니다. 파일에 du -h를 실행한 뒤 크기에 프레임 수를 곱하면 폴더 크기를 추정할 수 있습니다.
넘치지 않게 스크린샷 사이에 키 누르기
슬라이드나 리더의 페이지를 넘기려면 캡처 뒤마다 키 입력이 필요합니다. osascript는 System Events를 통해 키를 보냅니다. 키 코드 124는 오른쪽 화살표입니다.
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
누락이나 중복 페이지를 막는 세 가지 세부 사항이 있습니다. 캡처를 먼저 실행하므로 시작 페이지도 저장됩니다. if 조건은 마지막 캡처 뒤의 키 입력을 건너뛰므로 마지막 페이지를 넘어가지 않습니다. 키 입력 뒤의 sleep은 다음 페이지가 렌더링될 시간을 줍니다.
System Events는 맨 앞의 앱에 키를 보냅니다. 반복문을 시작하기 전에 리더 창을 클릭하거나, 시작 부분에 sleep 5를 추가해 앱을 전환할 시간을 확보합니다. 터미널은 키 이벤트를 보내려면 Accessibility 권한이 필요합니다.
페이지 넘김용 키 코드
osascript는 입력되는 문자가 아니라 macOS 가상 키 코드로 키를 식별합니다. 아래 코드는 페이지 넘김과 확인에 자주 쓰는 키입니다.
| 키 | 코드 |
|---|---|
| Left Arrow | 123 |
| Right Arrow | 124 |
| Down Arrow | 125 |
| Up Arrow | 126 |
| Space | 49 |
| Return | 36 |
일부 리더는 특정 컨트롤에 포커스가 있을 때만 페이지를 넘깁니다. 긴 실행 전에 3페이지 실행으로 키를 테스트하고, 각 페이지가 바뀌는지 확인합니다.
캡처와 키 입력의 순서 정하기
반복문 안의 순서는 각 프레임이 어느 페이지를 보여줄지 결정합니다. 이 절의 반복문은 먼저 캡처하고 그다음 키를 누릅니다. 아래 흐름은 한 번의 주기를 보여줍니다.
키 입력을 먼저 하면 모든 프레임이 화면의 다음 페이지를 보여주고, 첫 페이지는 저장되지 않습니다.
키 입력 뒤의 sleep이 실행 속도를 정합니다. 로컬 파일에서 렌더링되는 페이지는 이 글의 1.5초 대기 안에 끝나는 경우가 많습니다. 네트워크로 이미지를 불러오는 리더는 일부 페이지에 3초에서 5초가 필요할 수 있습니다. 이미지가 많은 페이지가 최소 대기 시간을 정하므로, 첫 페이지가 아니라 가장 느린 페이지를 확인합니다.
긴 실행 전에 다음 두 가지를 점검하면 대부분의 페이지 넘김 오류를 찾을 수 있습니다.
- 3페이지를 실행하고 프레임 3장을 엶. 각 프레임이 순서대로 서로 다른 페이지를 보여야 함
- 마지막 프레임을 문서의 마지막 페이지와 비교함. 마지막 프레임이 같은 페이지를 반복하면 키를 한 번 더 누른 것이거나
sleep이 짧은 것임
장시간 실행 중 화면을 켜 두기
디스플레이가 꺼지면 프레임이 검게 나옵니다. 스크립트를 caffeinate로 감싸면 스크립트가 실행되는 동안 잠자기 방지 설정이 유지됩니다.
caffeinate -di ./capture.sh
-d 플래그는 디스플레이를 켜 두고, -i는 유휴 상태에 의한 잠자기를 막습니다. caffeinate는 Mac이 잠들지 않게 하지만 화면의 잠금 해제 상태를 유지하지는 않습니다. 화면이 잠긴 상태에서 찍은 프레임에는 앱이 아니라 잠금 화면이 나옵니다. 전원에 연결된 MacBook을 덮은 상태에서도 계속 깨어 있게 하려면 -s를 추가합니다. caffeinate 매뉴얼에 따르면 이 플래그는 Mac이 AC 전원으로 동작할 때만 적용됩니다.
실패한 screencapture 반복문 문제 해결하기
| 증상 | 원인 | 해결 |
|---|---|---|
| 배경화면과 메뉴 막대만 보임 | 화면 녹화 권한 없음 | 터미널 앱을 허용한 뒤 다시 실행 |
| "No such file or directory" | 출력 폴더 없음 | 반복문 전에 mkdir -p 실행 |
| 캡처마다 이미지 두 개 또는 오류 | 디스플레이가 여러 개이고 파일 이름은 하나 | -m 또는 -D 1 추가 |
| 검은 프레임 | 디스플레이가 잠자기 상태 | caffeinate -di로 스크립트 실행 |
| 페이지 건너뜀 | 페이지 렌더링 전에 키 전송 | 키 입력 뒤의 sleep 늘리기 |
| 키 입력 무시됨 | Accessibility 권한 없음 또는 잘못된 앱이 맨 앞에 있음 | 터미널 앱 허용 후 대상 창 클릭 |
출력 폴더 확인하기
실행이 끝나면 실행마다 폴더가 하나씩 생기고, 프레임 이름은 캡처 순서대로 정렬됩니다. 아래 트리는 2026년 11월 3일 10:15:00에 시작해 프레임 4장을 저장한 실행을 보여줍니다. 프레임 5부터 20까지도 같은 형식을 따릅니다.
프레임이 모두 같아 보일 때 원인 찾기
모든 프레임이 같은 내용을 보이면 다음 순서로 원인을 확인합니다.
- 대상이 캡처 사이에 바뀌지 않음. 반복문은 화면에 보이는 내용을 저장하므로, 페이지가 넘어가지 않거나 대화상자가 계속 열려 있으면 같은 프레임이 나옴. 키 입력을 추가하거나 대기 시간을 늘림
- 다른 창이 대상을 가리고 있음.
-R과-m은 창 뒤의 영역이 아니라 화면 영역을 캡처함. 대상 창을 맨 앞으로 가져오고 실행 동안 그대로 둠 - 간격이 변화 주기보다 짧음. 10초마다 움직이는 진행률 막대는 1초 간격에서 정지된 것처럼 보임. 반복문을 바꾸기 전에 더 넓은 간격으로 프레임을 확인함
두 파일이 다른지 확실하지 않으면 shasum -a 256으로 첫 프레임과 마지막 프레임을 비교합니다. 해시가 같으면 픽셀이 같다는 뜻입니다.
실행이 끝날 때마다 파일 수를 셉니다. 20프레임 실행은 파일 20개를 남겨야 합니다. 파일 수가 적으면 반복문이 일찍 끝났거나 캡처가 실패한 것이며, 실패 메시지는 터미널에 출력됩니다.
스크립트가 더 이상 쉬운 방법이 아닐 때
셸 반복문은 매번 같은 방식으로 실행되는 고정 작업에 적합합니다. 새 요구 사항이 생길 때마다 코드가 늘어납니다. 예를 들면 특정 시각에 멈추기, 일시 중지와 재개, 이름으로 창 고르기(-l 플래그는 macOS가 목록을 제공하지 않는 창 ID를 필요로 함), 검색 가능한 PDF 만들기가 있습니다.
Temposhot의 Auto Capture는 이런 기능을 설정으로 제공합니다. 썸네일에서 Screens, Windows 또는 Custom Area를 고르고, 중지 조건으로 Screenshots, Duration 또는 End time을 설정하며, Key press 필드에 원하는 키를 기록합니다. 떠 있는 도구막대에서 실행을 일시 중지, 재개, 완료할 수 있습니다. 내보내기는 PNG, JPG, ZIP, 검색 가능한 PDF, MP4, GIF를 지원합니다. WebP는 Mac에 WebP 인코더가 있을 때만 나타납니다.
스크립트의 각 선택을 설정에 대응시키기
스크립트의 각 결정에는 Auto Capture 설정이 하나씩 대응합니다. 아래 단계는 Temposhot에서 페이지 넘김 반복문을 다시 만드는 과정입니다.
전환하기 전에 스크립트에서 아직 필요한 부분을 정합니다. Auto Capture는 일반적인 경우를 다룹니다. 한 디스플레이, 한 창 또는 한 사각형을 일정 간격으로 캡처하고, 프레임 사이에 선택적으로 키를 누르는 작업입니다. 캡처 사이에 임의의 셸 명령을 실행하지는 않으므로, 스프레드시트에서 파일 이름을 바꾸는 것처럼 사용자 로직이 필요한 스크립트는 셸에 남겨야 합니다.
이 글의 예시를 설정으로 옮기면 다음과 같습니다.
- 간격 3초의 20프레임 반복문은 Screenshots 중지 조건 20과 간격 3초가 됨
- 5초마다 한 프레임씩 10분 동안 실행하는 작업은 Duration 중지 조건 10분과 간격 5초가 됨. Duration과 End time은 간격이 0보다 커야 함
- 페이지 넘김 반복문은 간격 1.5초의 Key press Right Arrow가 됨. Key press는 Pro 기능이며 Accessibility 권한이 필요함
- 고정 사각형은 Custom Area가 됨. 원하는 너비와 높이가 오버레이에 표시될 때까지 사각형을 드래그함
무료 플랜은 세션당 스크린샷 수를 제한합니다. 더 많은 프레임이 필요한 실행에는 Temposhot Pro가 필요합니다.
스크립트 기본값과 다른 설정이 두 가지 있습니다. 카운트다운 기본값은 3초이며, 시작 전에 대상 페이지를 시작 상태로 맞출 시간을 줍니다. 시작 버튼을 누른 뒤 대상이 로드되는 데 시간이 더 필요하면 5초나 10초로 설정합니다. 간격 기본값은 1초이므로 실행마다 명시적으로 설정합니다.
고정 작업에는 스크립트 유지하기
작업이 고정되어 있고 모든 기기에서 같은 명령이 실행되는 경우에는 스크립트를 사용합니다. 예를 들어 cron 작업이 시작하는 로컬 대시보드의 야간 캡처가 이에 해당합니다. 스크립트는 버전 관리에 넣기도 쉬워서 타이밍이나 영역의 변경 내역을 기록할 수 있습니다.
Temposhot 세션은 화면을 지켜보는 사람이 작업을 실행하고, 질문에 답하려고 멈추고, 결과를 앱 안에서 얻고 싶을 때 적합합니다. 두 방법 모두 같은 프레임을 만들 수 있습니다. 차이는 지침을 누가 관리하느냐입니다. 스크립트는 파일에 저장되고, Auto Capture 설정은 앱에 저장되어 저장된 기본값을 따릅니다.
자주 묻는 질문
screencapture는 파일을 어디에 저장합니까?
마지막 인자로 전달한 경로에 저장합니다. -c를 사용하면 파일 대신 이미지를 클립보드에 복사합니다.
screencapture에 커서를 포함할 수 있습니까?
예. -C를 추가하면 포인터가 포함됩니다. 이 옵션은 비대화형 캡처에서만 동작하며, 이 글의 모든 명령이 여기에 해당합니다.
첫 캡처 전에 지연을 추가하려면 어떻게 합니까?
단일 캡처에는 -T 5로 5초 지연을 줍니다. 반복문 전체 앞에 지연을 주려면 반복문 앞에 sleep 5를 넣습니다.
프레임을 PDF나 동영상으로 만들 수 있습니까?
예. Image to PDF는 프레임을 이름순으로 묶어 PDF 한 파일로 만들고, Images to Video는 동영상으로 변환합니다. 두 도구 모두 브라우저에서 실행되며 파일은 Mac에 남습니다.
screencapture로 창 하나만 캡처할 수 있습니까?
예. -l과 숫자 창 ID를 사용합니다. 터미널은 창 ID를 표시하지 않으므로 ID를 다른 도구로 확인해야 합니다. Auto Capture의 Windows 탭은 썸네일에서 창을 선택합니다.
프레임 9999 이후에 정렬 순서가 틀어지는 이유는 무엇입니까?
%04d 형식은 최소 네 자리 숫자를 출력합니다. 10000번 프레임부터는 frame-10000.png가 이름순으로 frame-9999.png보다 앞에 정렬됩니다. 9999프레임을 넘는 실행에는 %05d를 사용합니다.
Control+C 후에도 프레임이 남습니까?
예. 중단 전에 저장된 프레임은 폴더에 남습니다. 위 절의 trap은 스크립트가 멈출 때 프레임 수를 출력합니다.
반복 가능한 스크린샷을 완성된 결과물로 만들기
스크립트가 고정 영역과 고정 개수의 범위를 넘어서면 Auto Capture를 사용합니다. 자동 캡처 가이드에서 모든 옵션을 확인할 수 있고, 다운로드 페이지에 Apple Silicon 빌드가 있습니다.
command-linescreencapturezshscreenshot-automation
여기서 사용한 용어: retina screenshot, screenshot automation, screenshot timer
반복되는 스크린샷을 완성된 결과물로 만듭니다
Temposhot은 타이머 또는 클릭할 때마다 캡처하고, 결과를 PDF, 이미지, ZIP 또는 MP4로 내보냅니다.
관련 글
- Mac에서 Automator로 스크린샷을 반복 촬영하는 방법Take Screenshot과 Loop 액션으로 Automator 스크린샷 워크플로를 만들고, 순서가 있는 파일이 필요하면 셸 액션을 사용합니다.
- Mac의 Apple 단축어 앱으로 스크린샷 자동화하기Mac의 단축어로 일정 간격마다 스크린샷을 찍고, 지정한 시각이나 앱 실행 시점에 단축어를 실행하며, 스크립트와 화면 기록 권한 문제를 해결합니다.
- Mac 내장 도구로 스크린샷을 자동화하는 방법screencapture, Automator, Shortcuts로 Mac 스크린샷을 자동화합니다. 권한 설정, 안전한 반복 루프, 문제 해결 방법을 다룹니다.
- macOS에서 스크린샷 자동화란 무엇인가?스크린샷 자동화가 macOS에서 무엇을 뜻하는지, 수동 캡처 및 화면 녹화와 어떻게 다른지, 전용 캡처 워크플로가 중요해지는 시점을 설명합니다.