Sha256: 137b114b134ab5169a92ec5ddde8cbff80abc11cb70ef119545ac7e2193d33bc

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

module ScreenRecorder
  # All screenshot related code
  module Screenshot
    #
    # Takes a screenshot in the current context (input) - desktop or current window
    #
    def screenshot(filename, resolution = nil)
      ScreenRecorder.logger.debug "Screenshot filename: #{filename}, resolution: #{resolution}"
      cmd = screenshot_cmd(filename: filename, resolution: resolution)
      process = execute_command(cmd)
      exit_code = wait_for_process_exit(process) # 0 (success) or 1 (fail)
      if exit_code&.zero?
        ScreenRecorder.logger.info "Screenshot: #{filename}"
        return filename
      end
      ScreenRecorder.logger.error 'Failed to take a screenshot.'
      nil
    end

    #
    # Parameters to capture a single frame
    #
    def screenshot_cmd(filename:, resolution: nil)
      resolution = resolution ? resolution_arg(resolution) : nil
      # -f overwrites existing file
      "#{ffmpeg_bin} -f #{options.capture_device} -i #{options.input} -framerate 1 -frames:v 1 #{resolution}#{filename}"
    end

    private

    #
    # Returns OS specific video resolution arg for ffmpeg
    #
    def resolution_arg(size)
      # macOS likes -s, windows and linux like -video_size
      OS.mac? ? "-s #{size} " : "-video_size #{size} "
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
screen-recorder-1.6.0 lib/screen-recorder/screenshot.rb