vcs_ruby 0.8.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/vcs.rb CHANGED
@@ -89,6 +89,18 @@ optparse = OptionParser.new do|opts|
89
89
  opts.on( '-l [HIGHLIGHT]', '--highlight [HIGHLIGHT]' 'Add the frame found at timestamp [HIGHLIGHT] as a highlight.') do |highlight|
90
90
  options[:highlight] = TimeIndex.new highlight
91
91
  end
92
+ opts.on("--[no-]timestamp", "Add timestamp to thumbnails. Default: true") do |timestamp|
93
+ options[:timestamp] = timestamp
94
+ end
95
+ opts.on("--[no-]shadow", "Add shadow to thumbnails. Default: true") do |shadow|
96
+ options[:shadow] = shadow
97
+ end
98
+ opts.on("--[no-]polaroid", "Thumbnails look as polaroid frames. Default: false") do |polaroid|
99
+ options[:polaroid] = polaroid
100
+ end
101
+ opts.on( '-p [PROFILE]', '--profile [PROFILE]' 'Loads additional setting from profile.yml.') do |profile|
102
+ options[:profile] = profile
103
+ end
92
104
  opts.on( '-q', '--quiet', 'Don\'t print progress messages just errors. Repeat to mute completely, even on error.') do |file|
93
105
  options[:quiet] = true
94
106
  end
@@ -139,5 +151,6 @@ begin
139
151
  end
140
152
  rescue Exception => e
141
153
  STDERR.puts "ERROR: #{e.message}"
154
+ STDERR.puts "#{e.backtrace.join("\n")}" if options[:verbose]
142
155
  end
143
156
 
data/lib/black.yml ADDED
@@ -0,0 +1,12 @@
1
+ style:
2
+ header:
3
+ color: White
4
+ background: Black
5
+ title:
6
+ color: White
7
+ background: Black
8
+ contact:
9
+ background: Black
10
+ signature:
11
+ color: White
12
+ background: Black
data/lib/capturer.rb CHANGED
@@ -9,27 +9,43 @@ module VCSRuby
9
9
  end
10
10
 
11
11
  def name
12
- raise "NotImplmentedException"
12
+ raise "NotImplementedException"
13
13
  end
14
14
 
15
15
  def load_video
16
- raise "NotImplmentedException"
16
+ raise "NotImplementedException"
17
17
  end
18
18
 
19
19
  def length
20
- raise "NotImplmentedException"
20
+ raise "NotImplementedException"
21
21
  end
22
22
 
23
23
  def width
24
- raise "NotImplmentedException"
24
+ raise "NotImplementedException"
25
25
  end
26
26
 
27
27
  def height
28
- raise "NotImplmentedException"
28
+ raise "NotImplementedException"
29
29
  end
30
30
 
31
- def grab time
32
- raise "NotImplmentedException"
31
+ def grab time, image_path
32
+ raise "NotImplementedException"
33
+ end
34
+
35
+ def available_formats
36
+ raise "NotImplementedException"
37
+ end
38
+
39
+ def format
40
+ @format
41
+ end
42
+
43
+ def format= format
44
+ if available_formats.include? format
45
+ @format = format
46
+ else
47
+ raise "Capturer '#{name}' does not support format: '#{format}'"
48
+ end
33
49
  end
34
50
  end
35
51
  end
data/lib/command.rb CHANGED
@@ -15,8 +15,9 @@ module VCSRuby
15
15
  @available
16
16
  end
17
17
 
18
- def execute parameter, streams = 0
18
+ def execute parameter, streams = 0, no_error = false
19
19
  raise "Command '#{name}' not available" unless available?
20
+ puts "#{@command} #{parameter} #{streams}" if Tools.verbose?
20
21
  result = nil
21
22
  if Tools::windows?
22
23
  streams = '2> nul' if streams === 0
@@ -28,9 +29,10 @@ module VCSRuby
28
29
  result =`#{@command} #{parameter} #{streams}`
29
30
  end
30
31
 
31
- raise "#{@command} failed with return value '#{$?}'"unless $? == 0
32
+ raise "#{@command} failed with return value '#{$?}'" unless $?.to_i == 0 || no_error
32
33
  return result
33
34
  end
35
+
34
36
  private
35
37
  # http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
36
38
  def which cmd
data/lib/configuration.rb CHANGED
@@ -4,30 +4,54 @@
4
4
 
5
5
  require 'font'
6
6
 
7
+
8
+ class ::Hash
9
+ def deep_merge(second)
10
+ merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
11
+ self.merge(second, &merger)
12
+ end
13
+ end
14
+
7
15
  module VCSRuby
8
16
  class Configuration
9
17
  attr_accessor :capturer
10
18
  attr_reader :header_font, :title_font, :timestamp_font, :signature_font
11
19
 
12
- def initialize
20
+ def initialize profile
13
21
  default_config_file = File.expand_path("defaults.yml", File.dirname(__FILE__))
14
- local_config_files = ['~/.vcs.rb.yml']
22
+ @config = ::YAML::load_file(default_config_file)
15
23
 
16
- config = ::YAML::load_file(default_config_file)
24
+ local_config_files = ['~/.vcs.rb.yml']
17
25
  local_config_files.select{ |f| File.exists?(f) }.each do |local_config_file|
18
26
  puts "Local configuration file loaded: #{local_config_file}" if Tools.verbose?
19
27
  local_config = YAML::load_file(local_config_file)
20
- cconfig.merge(local_config)
28
+ @config = @config.deep_merge(local_config)
21
29
  end
22
30
 
23
- @config = config
24
-
31
+ load_profile profile if profile
32
+
25
33
  @header_font = Font.new @config['style']['header']['font'], @config['style']['header']['size']
26
34
  @title_font = Font.new @config['style']['title']['font'], @config['style']['title']['size']
27
35
  @timestamp_font = Font.new @config['style']['timestamp']['font'], @config['style']['timestamp']['size']
28
36
  @signature_font = Font.new @config['style']['signature']['font'], @config['style']['signature']['size']
29
37
  end
30
38
 
39
+ def load_profile profile
40
+ profiles = [File.expand_path("#{profile}.yml", File.dirname(__FILE__)), "~/#{profile}.yml"]
41
+
42
+ found = false
43
+ profiles.each do |profile|
44
+ if File.exists?(profile)
45
+ puts "Profile loaded: #{profile}" if Tools.verbose?
46
+ config = YAML::load_file(profile)
47
+ @config = @config.deep_merge(config)
48
+ found = true
49
+ end
50
+ end
51
+
52
+ raise "No profile '#{profile}' found" unless found
53
+ end
54
+
31
55
  def rows
32
56
  @config['main']['rows'] ? @config['main']['rows'].to_i : nil
33
57
  end
@@ -99,5 +123,17 @@ module VCSRuby
99
123
  def blank_alternatives
100
124
  @config['lowlevel']['blank_alternatives'].map{ |e| TimeIndex.new e.to_i }
101
125
  end
126
+
127
+ def timestamp
128
+ !!@config['filter']['timestamp']
129
+ end
130
+
131
+ def polaroid
132
+ !!@config['filter']['polaroid']
133
+ end
134
+
135
+ def softshadow
136
+ !!@config['filter']['softshadow']
137
+ end
102
138
  end
103
139
  end
data/lib/contact_sheet.rb CHANGED
@@ -11,12 +11,13 @@ require 'vcs'
11
11
  module VCSRuby
12
12
  class ContactSheet
13
13
  attr_accessor :capturer, :format, :signature, :title, :highlight
14
+ attr_accessor :softshadow, :timestamp, :polaroid
14
15
  attr_reader :thumbnail_width, :thumbnail_height
15
16
  attr_reader :length, :from, :to
16
17
 
17
- def initialize video, capturer = :any
18
- @capturer = capturer
19
- @configuration = Configuration.new
18
+ def initialize video, profile = nil
19
+ @capturer = :any
20
+ @configuration = Configuration.new profile
20
21
  @signature = "Created by Video Contact Sheet Ruby"
21
22
  initialize_capturers video
22
23
  initialize_filename(File.basename(@video, '.*'))
@@ -24,6 +25,11 @@ module VCSRuby
24
25
  detect_video_properties
25
26
 
26
27
  @thumbnails = []
28
+ @filters = []
29
+
30
+ @timestamp = @configuration.timestamp
31
+ @softshadow = @configuration.softshadow
32
+ @polaroid = @configuration.polaroid
27
33
 
28
34
  @tempdir = Dir.mktmpdir
29
35
 
@@ -115,13 +121,15 @@ module VCSRuby
115
121
  end
116
122
 
117
123
  def build
124
+ selected_capturer.format = selected_capturer.available_formats.first
125
+ initialize_filters
118
126
  initialize_thumbnails
119
127
  capture_thumbnails
120
128
 
121
129
  puts "Composing standard contact sheet..." unless Tools.quiet?
122
- s = splice_montage(montage_thumbs)
130
+ montage = splice_montage(montage_thumbs)
123
131
 
124
- image = MiniMagick::Image.open(s)
132
+ image = MiniMagick::Image.open(montage)
125
133
 
126
134
  puts "Adding header and footer..." unless Tools.quiet?
127
135
  final = add_header_and_footer image
@@ -158,6 +166,13 @@ private
158
166
  @capturers.select{ |c| c.available? }
159
167
  end
160
168
 
169
+ def initialize_filters
170
+ @filters << :resize_filter
171
+ @filters << :softshadow_filter if softshadow
172
+ @filters << :timestamp_filter if timestamp
173
+ @filters << :polaroid_filter if polaroid
174
+ end
175
+
161
176
  def initialize_thumbnails
162
177
  time = @from
163
178
  (1..number_of_caps).each do |i|
@@ -166,7 +181,8 @@ private
166
181
  thumb.width = thumbnail_width
167
182
  thumb.height = thumbnail_height
168
183
  thumb.time = (time += interval)
169
- thumb.image_path = File::join(@tempdir, "th#{"%03d" % i}.png")
184
+ thumb.image_path = File::join(@tempdir, "th#{"%03d" % i}.#{selected_capturer.format.to_s}")
185
+ thumb.filters.push(*@filters)
170
186
 
171
187
  @thumbnails << thumb
172
188
  end
@@ -219,11 +235,24 @@ private
219
235
  end
220
236
 
221
237
  def splice_montage montage_path
238
+ if softshadow
239
+ left = @configuration.padding + 3
240
+ top = @configuration.padding + 5
241
+ bottom = right = @configuration.padding
242
+ else
243
+ left = right = top = bottom = @configuration.padding
244
+ end
245
+
246
+
222
247
  file_path = File::join(@tempdir, 'spliced.png')
223
248
  MiniMagick::Tool::Convert.new do |convert|
224
249
  convert << montage_path
225
250
  convert.background @configuration.contact_background
226
- convert.splice '5x10'
251
+
252
+ convert.splice "#{left}x#{top}"
253
+ convert.gravity 'SouthEast'
254
+ convert.splice "#{right}x#{bottom}"
255
+
227
256
  convert << file_path
228
257
  end
229
258
  file_path
@@ -295,7 +324,7 @@ private
295
324
  end
296
325
  a.pointsize @configuration.header_font.size
297
326
  a.background @configuration.header_background
298
- a.fill 'Black'
327
+ a.fill @configuration.header_color
299
328
  a.stack do |b|
300
329
  b.gravity 'West'
301
330
  b.stack do |c|
data/lib/defaults.yml CHANGED
@@ -4,6 +4,10 @@ main:
4
4
  interval: ~
5
5
  padding: 2
6
6
  quality: 95
7
+ filter:
8
+ timestamp: true
9
+ polaroid: false
10
+ softshadow: true
7
11
  style:
8
12
  header:
9
13
  font: DejaVuSans.ttf
data/lib/ffmpeg.rb CHANGED
@@ -13,6 +13,12 @@ module VCSRuby
13
13
  DIMENSION = 5
14
14
  FPS = 7
15
15
 
16
+ HEADER = 10
17
+
18
+ ENCODING_SUPPORT = 2
19
+ VIDEO_CODEC = 3
20
+ NAME = 8
21
+
16
22
  def initialize video
17
23
  @video = video
18
24
  @ffmpeg = Command.new :ffmpeg, 'ffmpeg'
@@ -90,6 +96,30 @@ module VCSRuby
90
96
  @ffmpeg.execute "-y -ss #{time.total_seconds} -i \"#{@video}\" -an -dframes 1 -vframes 1 -vcodec png -f rawvideo \"#{image_path}\""
91
97
  end
92
98
 
99
+ def available_formats
100
+ # Ordered by priority
101
+ image_formats = ['png', 'tiff', 'bmp', 'mjpeg']
102
+ formats = []
103
+
104
+ list = @ffprobe.execute "-codecs"
105
+ list.lines.drop(HEADER).each do |codec|
106
+ name, e, v = format_split(codec)
107
+ formats << name if image_formats.include?(name) && e && v
108
+ end
109
+
110
+ image_formats.select{ |format| formats.include?(format) }.map(&:to_sym)
111
+ end
112
+
113
+ def format_split line
114
+ e = line[ENCODING_SUPPORT] == 'E'
115
+ v = line[VIDEO_CODEC] == 'V'
116
+
117
+ name = line[NAME..-1].split(' ', 2).first
118
+ return name, e, v
119
+ rescue
120
+ return nil, false, false
121
+ end
122
+
93
123
  def to_s
94
124
  "FFmpeg #{@version}"
95
125
  end
data/lib/font.rb CHANGED
@@ -58,12 +58,12 @@ module VCSRuby
58
58
  fonts.lines.each do |line|
59
59
  key, value = line.strip.split(':', 2).map(&:strip)
60
60
 
61
- next if ['Path'].include? key
61
+ next if [nil, 'Path'].include? key
62
62
 
63
63
  if key == 'Font'
64
64
  @@fonts[value] = font = IMFont.new(value)
65
65
  else
66
- font.send(key + '=', value)
66
+ font.send("#{key}=", value)
67
67
  end
68
68
  end
69
69
  end
data/lib/libav.rb CHANGED
@@ -13,6 +13,12 @@ module VCSRuby
13
13
  DIMENSION = 4
14
14
  FPS = 6
15
15
 
16
+ HEADER = 10
17
+
18
+ ENCODING_SUPPORT = 2
19
+ VIDEO_CODEC = 3
20
+ NAME = 8
21
+
16
22
  def initialize video
17
23
  @video = video
18
24
  @avconv = Command.new :libav, 'avconv'
@@ -29,6 +35,7 @@ module VCSRuby
29
35
  @avconv.available? && @avprobe.available?
30
36
  end
31
37
 
38
+
32
39
  def detect_version
33
40
  info = @avconv.execute('-version')
34
41
  match = /avconv ([\d|.|-|:]*)/.match(info)
@@ -79,7 +86,31 @@ module VCSRuby
79
86
  end
80
87
 
81
88
  def grab time, image_path
82
- @avconv.execute "-y -ss #{time.total_seconds} -i \"#{@video}\" -an -dframes 1 -vframes 1 -vcodec png -f rawvideo \"#{image_path}\""
89
+ @avconv.execute "-y -ss #{time.total_seconds} -i \"#{@video}\" -an -dframes 1 -vframes 1 -vcodec #{format} -f rawvideo \"#{image_path}\""
90
+ end
91
+
92
+ def available_formats
93
+ # Ordered by priority
94
+ image_formats = ['png', 'tiff', 'bmp', 'mjpeg']
95
+ formats = []
96
+
97
+ list = @avprobe.execute "-codecs"
98
+ list.lines.drop(HEADER).each do |codec|
99
+ name, e, v = format_split(codec)
100
+ formats << name if image_formats.include?(name) && e && v
101
+ end
102
+
103
+ image_formats.select{ |format| formats.include?(format) }.map(&:to_sym)
104
+ end
105
+
106
+ def format_split line
107
+ e = line[ENCODING_SUPPORT] == 'E'
108
+ v = line[VIDEO_CODEC] == 'V'
109
+
110
+ name = line[NAME..-1].split(' ', 2).first
111
+ return name, e, v
112
+ rescue
113
+ return nil, false, false
83
114
  end
84
115
 
85
116
  def to_s
data/lib/mplayer.rb CHANGED
@@ -4,12 +4,18 @@
4
4
 
5
5
  require 'command'
6
6
  require 'capturer'
7
+ require 'fileutils'
7
8
 
8
9
  module VCSRuby
9
10
  class MPlayer < Capturer
11
+
12
+ HEADER = 2
13
+
10
14
  def initialize video
11
15
  @video = video
12
16
  @mplayer = Command.new :mplayer, 'mplayer'
17
+
18
+ detect_version if available?
13
19
  end
14
20
 
15
21
  def name
@@ -17,12 +23,102 @@ module VCSRuby
17
23
  end
18
24
 
19
25
  def available?
20
- @mplayer.available? && false
26
+ @mplayer.available?
21
27
  end
22
28
 
29
+ def detect_version
30
+ info = @mplayer.execute('')
31
+ match = /MPlayer (.*),/.match(info)
32
+ @version = match[1] if match
33
+ end
34
+
35
+ def length
36
+ load_probe
37
+ @length
38
+ end
39
+
40
+ def width
41
+ load_probe
42
+ @width
43
+ end
44
+
45
+ def height
46
+ load_probe
47
+ @height
48
+ end
49
+
50
+ def video_codec
51
+ load_probe
52
+ @video_codec
53
+ end
54
+
55
+ def audio_codec
56
+ load_probe
57
+ @audio_codec
58
+ end
59
+
60
+ def fps
61
+ load_probe
62
+ @fps
63
+ end
64
+
65
+ def file_pattern n
66
+ if format == :jpeg
67
+ "#{"%08d" % n}.jpg"
68
+ else
69
+ "#{"%08d" % n}.#{format.to_s}"
70
+ end
71
+ end
72
+
73
+ def grab time, image_path
74
+ @mplayer.execute "-sws 9 -ao null -benchmark -vo #{@format} -quiet -frames 5 -ss #{time.total_seconds} \"#{@video}\""
75
+ (1..4).each { |n| FileUtils.rm(file_pattern(n)) }
76
+ FileUtils.mv(file_pattern(5), image_path)
77
+ end
78
+
79
+ def available_formats
80
+ # Ordered by priority
81
+ image_formats = ['png', 'jpeg']
82
+ formats = []
83
+
84
+ list = @mplayer.execute("-vo help", 0, true)
85
+ list.lines.drop(HEADER).each do |codec|
86
+ name = format_split(codec)
87
+ formats << name if image_formats.include?(name)
88
+ end
89
+
90
+ image_formats.select{ |format| formats.include?(format) }.map(&:to_sym)
91
+ end
92
+
93
+ def format_split line
94
+ name = line.strip.split(' ', 2).first
95
+ end
96
+
23
97
  def to_s
24
98
  "MPlayer #{@version}"
25
99
  end
100
+ private
101
+ def parsed?
102
+ !!@parsed
103
+ end
26
104
 
105
+ def load_probe
106
+ unless parsed?
107
+ parse_identify(@mplayer.execute("-ao null -vo null -identify -frames 0 -quiet \"#{@video}\""))
108
+ end
109
+ end
110
+
111
+ def parse_identify info
112
+ info.lines.each do |line|
113
+ key, value = line.split('=', 2)
114
+ @length = TimeIndex.new value.to_f if key == 'ID_LENGTH'
115
+ @width = value.to_i if key == 'ID_VIDEO_WIDTH'
116
+ @height = value.to_i if key == 'ID_VIDEO_HEIGHT'
117
+ @video_codec = value.chomp if key == 'ID_VIDEO_FORMAT'
118
+ @audio_codec = value.chomp if key == 'ID_AUDIO_FORMAT'
119
+ @fps = value.to_f if key == 'ID_VIDEO_FPS'
120
+ end
121
+ @parsed = true
122
+ end
27
123
  end
28
124
  end
data/lib/oldstyle.yml ADDED
@@ -0,0 +1,12 @@
1
+ style:
2
+ header:
3
+ color: Black
4
+ background: YellowGreen
5
+ title:
6
+ color: White
7
+ background: Black
8
+ contact:
9
+ background: White
10
+ signature:
11
+ color: Black
12
+ background: SandyBrown
data/lib/thumbnail.rb CHANGED
@@ -9,12 +9,13 @@ module VCSRuby
9
9
  attr_accessor :width, :height, :aspect
10
10
  attr_accessor :image_path
11
11
  attr_accessor :time
12
+ attr_reader :filters
12
13
 
13
14
  def initialize capper, video, configuration
14
15
  @capper = capper
15
16
  @video = video
16
17
  @configuration = configuration
17
- @filters = [ method(:resize_filter), method(:timestamp_filter), method(:softshadow_filter) ]
18
+ @filters = []
18
19
  end
19
20
 
20
21
  def capture
@@ -47,14 +48,28 @@ module VCSRuby
47
48
  convert.background 'Transparent'
48
49
  convert.fill 'Transparent'
49
50
  convert << @image_path
50
- @filters.each do |filter|
51
- filter.call(convert)
51
+
52
+ sorted_filters.each do |filter|
53
+ call_filter filter, convert
52
54
  end
55
+
53
56
  convert << @image_path
54
57
  end
55
58
  end
56
59
 
57
60
  private
61
+ def call_filter filter, convert
62
+ if respond_to?(filter, true)
63
+ method(filter).call(convert)
64
+ else
65
+ raise "Filter '#{filter}' does not exist"
66
+ end
67
+ end
68
+
69
+ def sorted_filters
70
+ [:resize_filter, :timestamp_filter, :photoframe_filter, :polaroid_filter, :random_rotation_filter, :softshadow_filter].select{ |filter| @filters.include?(filter) }
71
+ end
72
+
58
73
  def resize_filter convert
59
74
  convert.resize "#{width}x#{height}!"
60
75
  end
@@ -74,13 +89,6 @@ private
74
89
  convert.gravity 'None'
75
90
  end
76
91
 
77
- def photoframe_filter convert
78
- convert.bordercolor 'White'
79
- convert.border 3
80
- convert.bordercolor 'Grey60'
81
- convert.border 1
82
- end
83
-
84
92
  def softshadow_filter convert
85
93
  convert.stack do |box|
86
94
  box.background 'Black'
@@ -94,6 +102,13 @@ private
94
102
  convert.repage.+
95
103
  end
96
104
 
105
+ def photoframe_filter convert
106
+ convert.bordercolor 'White'
107
+ convert.border 3
108
+ convert.bordercolor 'Grey60'
109
+ convert.border 1
110
+ end
111
+
97
112
  def polaroid_filter convert
98
113
  border = 8
99
114
  convert.stack do |a|
@@ -109,8 +124,8 @@ private
109
124
  a.flip
110
125
  a.bordercolor 'Grey60'
111
126
  a.border 1
112
- a.repage.+
113
127
  end
128
+ convert.repage.+
114
129
  end
115
130
 
116
131
  def random_rotation_filter convert
data/lib/tools.rb CHANGED
@@ -40,7 +40,9 @@ module VCSRuby
40
40
  end
41
41
 
42
42
  def self.contact_sheet_with_options video, options
43
- sheet = VCSRuby::ContactSheet.new video, options[:capturer]
43
+ sheet = VCSRuby::ContactSheet.new video, options[:profile]
44
+
45
+ sheet.capturer = options[:capturer]
44
46
  sheet.format = options[:format] if options[:format]
45
47
  sheet.title = options[:title] if options[:title]
46
48
  sheet.signature = options[:signature] if options[:signature]
@@ -56,6 +58,10 @@ module VCSRuby
56
58
  sheet.to = options[:to] if options[:to]
57
59
  sheet.highlight = options[:highlight] if options[:highlight]
58
60
 
61
+ sheet.timestamps = options[:timestamps] if options[:timestamps] != nil
62
+ sheet.softshadow = options[:softshadow] if options[:softshadow] != nil
63
+ sheet.polaroid = options[:polaroid] if options[:polaroid] != nil
64
+
59
65
  return sheet
60
66
  end
61
67
 
data/lib/version.info CHANGED
@@ -1 +1 @@
1
- 0.8.6
1
+ 1.0.1
data/lib/white.yml ADDED
@@ -0,0 +1,12 @@
1
+ style:
2
+ header:
3
+ color: Black
4
+ background: White
5
+ title:
6
+ color: Black
7
+ background: White
8
+ contact:
9
+ background: White
10
+ signature:
11
+ color: Black
12
+ background: White
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vcs_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-02 00:00:00.000000000 Z
12
+ date: 2016-05-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mini_magick
@@ -77,11 +77,14 @@ files:
77
77
  - lib/ffmpeg.rb
78
78
  - lib/version.rb
79
79
  - lib/libav.rb
80
+ - lib/white.yml
80
81
  - lib/capturer.rb
81
82
  - lib/version.info
82
83
  - lib/vcs.rb
83
84
  - lib/command.rb
85
+ - lib/black.yml
84
86
  - lib/configuration.rb
87
+ - lib/oldstyle.yml
85
88
  - lib/defaults.yml
86
89
  - bin/vcs.rb
87
90
  homepage: https://github.com/FreeApophis/vcs.rb