Skip to content

Instantly share code, notes, and snippets.

@PaulJuliusMartinez
Created April 8, 2022 16:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PaulJuliusMartinez/5841cab598438a8be0fd09212d7b3542 to your computer and use it in GitHub Desktop.
Save PaulJuliusMartinez/5841cab598438a8be0fd09212d7b3542 to your computer and use it in GitHub Desktop.
Simple macOS script for taking screenshots every X seconds on multiple displays
#! /usr/bin/env ruby
require 'time'
def usage
puts "USAGE: ./record-timelapse every 10 displays 1,2"
end
if ARGV[0] != "every" || ARGV[2] != "displays"
usage
exit
end
sleep_duration = ARGV[1].to_i
displays = ARGV[3].split(",").map(&:to_i)
puts "Taking screenshots of displays: #{display} every #{sleep_duration} seconds"
puts "Starting in 3 seconds..."
sleep(3)
displays.each do |display|
`mkdir display#{display}`
end
loop do
now = Time.now.strftime('%Y-%m-%dT%H-%M-%S')
displays.each do |display|
filename = "display#{display}/screenshot-at-#{now}.png"
`screencapture -D#{display} -C -x #{filename}`
end
puts "captured at #{now}"
sleep(sleep_duration)
end
# https://trac.ffmpeg.org/wiki/Slideshow
#
# -framerate X : how many images to show per second
# -r Y : output framerate (should probably be multiple of X, and either 24, 30 or 60)
#
# ffmpeg -framerate 15 -pattern_type glob -i "./display1/*.png" -c:v libx264 -r 30 -pix_fmt yuv420p display1.mp4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment