Sha256: e44e49140e0d4a8e16c0eca2c5df38b0af25a454edc368073a0e59a768cc3bd7

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

#!/usr/bin/env ruby
# Generate datamoshing

require 'optparse'
require 'rubygems'
require 'aviglitch'

output = './out.avi'
all = false
fake = false

opts = OptionParser.new do |opts|
  opts.banner = "datamosh - AviGlitch's datamoshing video generator."
  opts.define_head "Usage: #{File.basename($0)} [options] file [file2 ...]"
  opts.separator "Options:"
  opts.on("-o", "--output [OUTPUT]", 
    "Output the video to OUTPUT (./out.avi by default)") do |f|
    output = f
  end
  opts.on("-a", "--all", 
    "Remove all keyframes (It remains a first keyframe by default)") do
    all = true
  end
  opts.on("--fake", "Remains all keyframes as full pixel included deltaframe") do
    fake = true
    if all
      warn "The --fake option cannot use with -a/--all option.\n"
      exit
    end
  end
  opts.on_tail("-h", "--help", "Show this message") do
    puts opts
    exit
  end
end

input = opts.parse!
if input.empty?
  puts opts
  exit 1
else
  input.each do |file|
    if !File.exist?(file) || File.directory?(file)
      opts.banner = "#{file}: No such file.\n\n"
      puts opts
      exit 1
    end
  end
end

a = AviGlitch.open input.shift
unless fake
  a.glitch_with_index :keyframe do |frame, i|
    (!all && i == 0) ? frame : "" # keep the first frame
  end
end
if !all && !fake 
  first = a.frames.index(a.frames.first_of(:keyframe))
  a.mutate_keyframes_into_deltaframes! (first + 1)..a.frames.size
else
  a.mutate_keyframes_into_deltaframes!
end

input.each do |file|
  b = AviGlitch.open file
  unless fake
    b.glitch :keyframe do |frame|
      ""
    end
  end
  b.mutate_keyframes_into_deltaframes!
  a.frames.concat b.frames
end

a.output output

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aviglitch-0.2.0 bin/datamosh