class Screengif::Options

Public Class Methods

parse(args) click to toggle source
# File lib/screengif/options.rb, line 11
def self.parse(args)
  options = OpenStruct.new

  options.framerate = 5
  options.delay = 10
  options.delay_last = 50
  options.no_coalesce = false
  options.progressbar = false
  options.input_file = nil
  options.output_file = nil
  options.no_gifsicle = false
  options.fuzz = 5

  # options.ffmpeg_inputfile = nil

  optionparser = OptionParser.new do |opts|
    opts.banner = "screengif.rb - Convert your screencast into a gif.\n" +
      "Usage:\n" + 
        "\tscreengif.rb [options] [--input FILENAME.mov] [--output OUTPUTFILE.gif]\n" +
      "Examples:\n" +
        "\t./screengif.rb --input demo.mov --output out.gif\n" +
        "\tcat somefile.gif | ./screengif.rb --progressbar --framerate 10 --delay 50 --delay-last 5 > out.gif\n"

    opts.separator ""
    opts.separator "Specific options:"

    opts.on("-i", "--input FILENAME.mov", "Use ffmpeg to convert FILENAME.mov into PPM image stream and process results.", 
            "If missing, will process PPM or GIF image stream from STDIN.") do |filename|
      if (File.exists?(filename))
        options.input_file = filename
        options.no_coalesce = true # ffmpeg's ppm output is already coalesced
      else
        $stderr.puts "Unable to open filename: #{filename}"
        puts opts
        exit 1
      end
    end
    opts.on("-o", "--output FILENAME.gif", "Output resulting GIF data to FILENAME.gif. (defaults to STDOUT).") do |filename|
      options.output_file  = filename
    end

    opts.on("-d", "--delay MS", Integer, "Animation frame delay, in tens of ms. (default: 10)") do |tens_of_ms|
      options.delay = tens_of_ms.to_i
    end

    opts.on("-p", "--progressbar", "Overlay progress bar on the animation.") do
      options.progressbar = true
    end

    opts.on("-d", "--delay MS", Integer, "Animation frame delay, in tens of ms. (default: 10)") do |tens_of_ms|
      options.delay = tens_of_ms.to_i
    end

    opts.on("--delay-last MS", Integer, "Animation frame delay of last frame, in tens of ms. (default: 50)") do |tens_of_ms|
      options.delay_last = tens_of_ms.to_i
    end

    opts.on("-r", "--framerate FPS", Integer, "Specify amount of frames per second to keep. (default: 5)") do |fps|
      options.framerate = fps.to_i
    end

    opts.on("-w", "--max-width PIXELS", Integer, "Output image max width, in pixels.") do |pixels|
      options.max_width = pixels.to_i
    end

    opts.on("--max-height PIXELS", Integer, "Output image max height, in pixels.") do |pixels|
      options.max_height = pixels.to_i
    end

    opts.on("--no-contrast", "Skip increasing contrast using imagemagick.") do
      options.nocontrast = true
    end

    opts.on("-f", "--fuzz PERCENT", Integer, "Imagemagick fuzz factor for color reduction. (default: 5%)") do |fuzz|
      options.fuzz = fuzz.to_i
    end

    opts.on("--no-coalesce", "Skip Magick::ImageList#coalesce() if input doesn't need it.") do
      options.no_coalesce = true
    end

    opts.on("--no-gifsicle", "Prevent filter the output through gifsicle. Greatly increases output file size.") do
      options.no_gifsicle = true
    end

    # Boilerplate
    opts.on_tail("-h", "--help", "Show this message") do
      puts opts
      exit
    end
    opts.on_tail("-v", "--verbose", "Verbose output") do
      $verbose = true
    end
    opts.on_tail("--version", "Show version") do
      puts "0.1"
      exit
    end
  end
  optionparser.parse!(args)
  return options, optionparser
end