Здоровий глузд

Про дизайн, міста та дизайн у містах, кодінг та автоматизацію

Таймлапс екрану в Mac OS X

Для одного робочого проєкту з картами захотів записати відео процесу роботи. Але процес малювання карти монотонний і не швидкий, тому звичайний запис екрану в реальному часі не підходить: записувати довго, потім відео треба прискорювати, комп’ютер починає грітися тощо. Згадав, що бачив ролики з прискореним процесом малювання та також захотів зробити схожий таймлапс з екрану (чи як це ще можна назвати).

Почав, звісно ж, із пошуку готового рішення. Перерив увесь безкоштовний софт в App Store, але нічого толкового не знайшов, а купувати купу зайвих функцій заради однієї потрібної не захотів. В App Store натрапив на програму Interval, яка просто збирає відеоролик із пачки зображень. І в мене одразу виникла ідея: робити скріншоти екрану через певні інтервали часу, а потім зібрати з цього ролик. Озброївшись маковським Automator та ознайомившись трохи з AppleScript, написав простий скрипт, який робить знімок екрану через задану кількість секунд і складає всі файли у визначену папку. Потім із цих зображень за допомогою “Інтервалу” збираємо відео.

Automator і AppleScript

Беремо Automator (стандартна програма для автоматизації на Mac) і створюємо просту схему:

  • Скрипт для автоматичних скріншотів
  • Блок із паузою
  • Повторюємо попередні дії 30–60 хвилин, потім скрипт зупиняється. Скрипт також можна зупинити вручну, натиснувши в Automator кнопку Stop.

Ось так це все виглядає:

1-automator.png

Скрипт в Automator

Сам скрипт для скріншотів працює дуже просто:

  1. Вказуємо папку для збереження скріншотів. У мене це Desktop/Screens.
  2. Задаємо змінну з часом створення скріншоту, щоб використати її у назві файлу.
  3. Безпосередньо команда захоплення картинки з екрану й збереження у вибрану папку.
  4. Остання частина просто зменшує ширину скріншоту до 1280 пікселів. Якщо вам потрібні скріншоти розміром 1:1, просто видаліть цю частину коду і не використовуйте її.

Код скрипта:

set ScreensDir to (path to home folder as string) & "Desktop:" & "Screens:"
set theDate to do shell script "date +%Y-%m-%d-%H-%M-%S"

-- Take a screen capture
set captureImg to ((POSIX path of ScreensDir) & theDate & ".jpg") as string
do shell script "/usr/sbin/screencapture -x -tjpg " & quoted form of captureImg

-- Resize image file
tell application "Image Events"
    set this_image to open captureImg
    scale this_image to size 1280
    save this_image in captureImg
    close this_image
end tell

Interval

Коли потрібна кількість скріншотів готова та збережена у папці, відкриваємо програму Interval. Натискаємо кнопку «Import» та вказуємо шлях до папки з картинками. Коли зображення завантажилися, можна натиснути внизу кнопку старт і подивитися, яка встановлена швидкість зміни кадрів.

2-interval.png

Головне вікно

У вкладці Settings вибираємо формат відео, його розмір та швидкість зміни кадрів (frame rate). Чим більше число, тим швидше прокручується відео. У своєму прикладі я обрав 12 кадрів на секунду.

3-interval-settings.png

Вікно з налаштуваннями

Натискаємо Export і отримуємо готове відео:

Завантажте файл для Automator і спробуйте самі погратися з параметрами. Успіхів!