vcs_ruby 1.1.8 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/lib/time_index.rb CHANGED
@@ -1,121 +1,121 @@
1
- #
2
- # Time interval
3
- #
4
-
5
- module VCSRuby
6
- class TimeIndex
7
- include Comparable
8
- attr_reader :total_seconds
9
-
10
- def initialize time_index = ''
11
- if time_index.instance_of? Float or time_index.instance_of? Fixnum
12
- @total_seconds = time_index
13
- else
14
- @total_seconds = 0.0
15
- @to_parse = time_index.strip
16
-
17
- unless @to_parse.empty?
18
- try_parse_ffmpeg_index
19
- try_parse_vcs_index
20
- try_parse_as_number
21
- end
22
- end
23
- end
24
-
25
- def try_parse_ffmpeg_index
26
- parts = @to_parse.split(':')
27
- if parts.count == 3
28
- @total_seconds += parts[0].to_i * 60 * 60
29
- @total_seconds += parts[1].to_i * 60
30
- @total_seconds += parts[2].to_f
31
- end
32
- end
33
-
34
- def try_parse_vcs_index
35
- if @to_parse =~ /\d*m|\d*h|\d*s/
36
- parts = @to_parse.split(/(\d*h)|(\d*m)|(\d*s)/).select{|e| !e.empty?}
37
- parts.each do |part|
38
- add_vcs_part part
39
- end
40
- end
41
- end
42
-
43
- def add_vcs_part part
44
- return @total_seconds += part.to_i * 60 * 60 if part.end_with? 'h'
45
- return @total_seconds += part.to_i * 60 if part.end_with? 'm'
46
- @total_seconds += part.to_i
47
- end
48
-
49
- def try_parse_as_number
50
- temp = @to_parse.to_i
51
- if temp.to_s == @to_parse
52
- @total_seconds += temp
53
- end
54
- end
55
-
56
- def total_seconds
57
- @total_seconds
58
- end
59
-
60
- def hours
61
- (@total_seconds.abs / 3600).to_i
62
- end
63
-
64
- def minutes
65
- ((@total_seconds.abs / 60) % 60).to_i
66
- end
67
-
68
- def seconds
69
- @total_seconds.abs % 60
70
- end
71
-
72
- def + operand
73
- if operand.instance_of? Fixnum
74
- TimeIndex.new @total_seconds + operand
75
- else
76
- TimeIndex.new @total_seconds + operand.total_seconds
77
- end
78
- end
79
-
80
- def - operand
81
- if operand.instance_of? Fixnum
82
- TimeIndex.new @total_seconds - operand
83
- else
84
- TimeIndex.new @total_seconds - operand.total_seconds
85
- end
86
- end
87
-
88
- def * operand
89
- TimeIndex.new total_seconds * operand
90
- end
91
-
92
- def / operand
93
- if operand.instance_of? Fixnum
94
- TimeIndex.new @total_seconds / operand
95
- else
96
- @total_seconds / operand.total_seconds
97
- end
98
- end
99
-
100
- def <=> operand
101
- @total_seconds <=> operand.total_seconds
102
- end
103
-
104
- def sign
105
- return '-' if @total_seconds < 0
106
- ''
107
- end
108
-
109
- def to_s
110
- "#{sign}#{hours}h#{"%02d" % minutes}m#{"%02d" % seconds}s"
111
- end
112
-
113
- def to_timestamp
114
- if hours == 0
115
- "#{sign}#{"%02d" % minutes}:#{"%02d" % seconds}"
116
- else
117
- "#{sign}#{hours}:#{"%02d" % minutes}:#{"%02d" % seconds}"
118
- end
119
- end
120
- end
121
- end
1
+ #
2
+ # Time interval
3
+ #
4
+
5
+ module VCSRuby
6
+ class TimeIndex
7
+ include Comparable
8
+ attr_reader :total_seconds
9
+
10
+ def initialize time_index = ''
11
+ if time_index.instance_of? Float or time_index.instance_of? Fixnum
12
+ @total_seconds = time_index
13
+ else
14
+ @total_seconds = 0.0
15
+ @to_parse = time_index.strip
16
+
17
+ unless @to_parse.empty?
18
+ try_parse_ffmpeg_index
19
+ try_parse_vcs_index
20
+ try_parse_as_number
21
+ end
22
+ end
23
+ end
24
+
25
+ def try_parse_ffmpeg_index
26
+ parts = @to_parse.split(':')
27
+ if parts.count == 3
28
+ @total_seconds += parts[0].to_i * 60 * 60
29
+ @total_seconds += parts[1].to_i * 60
30
+ @total_seconds += parts[2].to_f
31
+ end
32
+ end
33
+
34
+ def try_parse_vcs_index
35
+ if @to_parse =~ /\d*m|\d*h|\d*s/
36
+ parts = @to_parse.split(/(\d*h)|(\d*m)|(\d*s)/).select{|e| !e.empty?}
37
+ parts.each do |part|
38
+ add_vcs_part part
39
+ end
40
+ end
41
+ end
42
+
43
+ def add_vcs_part part
44
+ return @total_seconds += part.to_i * 60 * 60 if part.end_with? 'h'
45
+ return @total_seconds += part.to_i * 60 if part.end_with? 'm'
46
+ @total_seconds += part.to_i
47
+ end
48
+
49
+ def try_parse_as_number
50
+ temp = @to_parse.to_i
51
+ if temp.to_s == @to_parse
52
+ @total_seconds += temp
53
+ end
54
+ end
55
+
56
+ def total_seconds
57
+ @total_seconds
58
+ end
59
+
60
+ def hours
61
+ (@total_seconds.abs / 3600).to_i
62
+ end
63
+
64
+ def minutes
65
+ ((@total_seconds.abs / 60) % 60).to_i
66
+ end
67
+
68
+ def seconds
69
+ @total_seconds.abs % 60
70
+ end
71
+
72
+ def + operand
73
+ if operand.instance_of? Fixnum
74
+ TimeIndex.new @total_seconds + operand
75
+ else
76
+ TimeIndex.new @total_seconds + operand.total_seconds
77
+ end
78
+ end
79
+
80
+ def - operand
81
+ if operand.instance_of? Fixnum
82
+ TimeIndex.new @total_seconds - operand
83
+ else
84
+ TimeIndex.new @total_seconds - operand.total_seconds
85
+ end
86
+ end
87
+
88
+ def * operand
89
+ TimeIndex.new total_seconds * operand
90
+ end
91
+
92
+ def / operand
93
+ if operand.instance_of? Fixnum
94
+ TimeIndex.new @total_seconds / operand
95
+ else
96
+ @total_seconds / operand.total_seconds
97
+ end
98
+ end
99
+
100
+ def <=> operand
101
+ @total_seconds <=> operand.total_seconds
102
+ end
103
+
104
+ def sign
105
+ return '-' if @total_seconds < 0
106
+ ''
107
+ end
108
+
109
+ def to_s
110
+ "#{sign}#{hours}h#{"%02d" % minutes}m#{"%02d" % seconds}s"
111
+ end
112
+
113
+ def to_timestamp
114
+ if hours == 0
115
+ "#{sign}#{"%02d" % minutes}:#{"%02d" % seconds}"
116
+ else
117
+ "#{sign}#{hours}:#{"%02d" % minutes}:#{"%02d" % seconds}"
118
+ end
119
+ end
120
+ end
121
+ end
data/lib/tools.rb CHANGED
@@ -1,70 +1,81 @@
1
- #
2
- # Dependencies
3
- #
4
-
5
- module VCSRuby
6
-
7
- class Tools
8
- def self.windows?
9
- return ((RUBY_PLATFORM =~ /win32/ or RUBY_PLATFORM =~ /mingw32/) or (RbConfig::CONFIG['host_os'] =~ /mswin|windows/i))
10
- end
11
-
12
- def self.linux?
13
- return ((RUBY_PLATFORM =~ /linux/) or (RbConfig::CONFIG['host_os'] =~ /linux/i))
14
- end
15
-
16
- def self.list_arguments arguments
17
- arguments.map{ |argument| argument.to_s }.join(', ')
18
- end
19
-
20
- def self.print_help optparse
21
- puts optparse.summarize
22
- exit 0
23
- end
24
-
25
- MagickVersion = Struct.new(:major, :minor, :revision)
26
- def self.magick_version
27
- output = %x[convert -version]
28
- m = output.match /(\d+)\.(\d+)\.(\d+)(-(\d+))?/
29
- MagickVersion.new(m[1].to_i, m[2].to_i, m[3].to_i)
30
- end
31
-
32
- def self.contact_sheet_with_options video, options
33
- Configuration.instance.load_profile options[:profile] if options[:profile]
34
- Configuration.instance.capturer = options[:capturer]
35
-
36
- video = VCSRuby::Video.new video
37
- sheet = video.contact_sheet
38
-
39
- sheet.format = options[:format] if options[:format]
40
- sheet.title = options[:title] if options[:title]
41
- sheet.signature = options[:signature] if options[:signature]
42
- sheet.signature = nil if options[:no_signature]
43
-
44
- if options[:rows] || options[:columns] || options[:interval]
45
- sheet.initialize_geometry(options[:rows], options[:columns], options[:interval])
46
- end
47
-
48
- sheet.thumbnail_width = options[:width] if options[:width]
49
- sheet.thumbnail_height = options[:height] if options[:height]
50
- sheet.from = options[:from] if options[:from]
51
- sheet.to = options[:to] if options[:to]
52
- sheet.highlight = options[:highlight] if options[:highlight]
53
-
54
- sheet.timestamp = options[:timestamp] if options[:timestamp] != nil
55
- sheet.softshadow = options[:softshadow] if options[:softshadow] != nil
56
- sheet.polaroid = options[:polaroid] if options[:polaroid] != nil
57
-
58
- return sheet
59
- end
60
-
61
- def self.to_human_size size
62
- powers = { 'B' => 1 << 10, 'KiB' => 1 << 20, 'MiB' => 1 << 30, 'GiB' => 1 << 40, 'TiB' => 1 << 50 }
63
- powers.each_pair do |prefix, power|
64
- if size < power
65
- return format('%.2f',size.to_f / (power >> 10)) + ' ' + prefix
66
- end
67
- end
68
- end
69
- end
70
- end
1
+ #
2
+ # Dependencies
3
+ #
4
+
5
+ module VCSRuby
6
+
7
+ class Tools
8
+ def self.windows?
9
+ return ((RUBY_PLATFORM =~ /win32/ or RUBY_PLATFORM =~ /mingw32/) or (RbConfig::CONFIG['host_os'] =~ /mswin|windows/i))
10
+ end
11
+
12
+ def self.linux?
13
+ return ((RUBY_PLATFORM =~ /linux/) or (RbConfig::CONFIG['host_os'] =~ /linux/i))
14
+ end
15
+
16
+ def self.list_arguments arguments
17
+ arguments.map{ |argument| argument.to_s }.join(', ')
18
+ end
19
+
20
+ def self.print_help optparse
21
+ puts optparse.summarize
22
+ exit 0
23
+ end
24
+
25
+ MagickVersion = Struct.new(:major, :minor, :revision)
26
+ def self.magick_version
27
+ output = %x[convert -version]
28
+ m = output.match /(\d+)\.(\d+)\.(\d+)(-(\d+))?/
29
+ MagickVersion.new(m[1].to_i, m[2].to_i, m[3].to_i)
30
+ end
31
+
32
+ def self.contact_sheet_with_options video, options
33
+ Configuration.instance.load_profile options[:profile] if options[:profile]
34
+ Configuration.instance.capturer = options[:capturer]
35
+
36
+ video = VCSRuby::Video.new video
37
+
38
+ unless video.valid?
39
+ puts "Video '#{video.full_path}' cannot be read by Capturer '#{video.capturer_name}'"
40
+ return nil
41
+ end
42
+
43
+ sheet = video.contact_sheet
44
+
45
+ sheet.format = options[:format] if options[:format]
46
+ sheet.title = options[:title] if options[:title]
47
+ sheet.signature = options[:signature] if options[:signature]
48
+ sheet.signature = nil if options[:no_signature]
49
+
50
+ if options[:rows] || options[:columns] || options[:interval]
51
+ sheet.initialize_geometry(options[:rows], options[:columns], options[:interval])
52
+ end
53
+
54
+ if options[:width] && options[:height]
55
+ sheet.aspect_ratio = Rational(options[:width], options[:height])
56
+ else
57
+ sheet.aspect_ratio = options[:aspect_ratio] if options[:aspect_ratio]
58
+ end
59
+ sheet.thumbnail_width = options[:width] if options[:width]
60
+ sheet.thumbnail_height = options[:height] if options[:height]
61
+ sheet.from = options[:from] if options[:from]
62
+ sheet.to = options[:to] if options[:to]
63
+ sheet.highlight = options[:highlight] if options[:highlight]
64
+
65
+ sheet.timestamp = options[:timestamp] if options[:timestamp] != nil
66
+ sheet.softshadow = options[:softshadow] if options[:softshadow] != nil
67
+ sheet.polaroid = options[:polaroid] if options[:polaroid] != nil
68
+
69
+ return sheet
70
+ end
71
+
72
+ def self.to_human_size size
73
+ powers = { 'B' => 1 << 10, 'KiB' => 1 << 20, 'MiB' => 1 << 30, 'GiB' => 1 << 40, 'TiB' => 1 << 50 }
74
+ powers.each_pair do |prefix, power|
75
+ if size < power
76
+ return format('%.2f',size.to_f / (power >> 10)) + ' ' + prefix
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
data/lib/vcs.rb CHANGED
@@ -1,26 +1,26 @@
1
- #
2
- # Video Contact Sheet Ruby
3
- #
4
-
5
- $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
6
-
7
- require 'command'
8
- require 'configuration'
9
- require 'contact_sheet'
10
- require 'video'
11
- require 'frame'
12
- require 'time_index'
13
- require 'tools'
14
- require 'version'
15
- require 'FFmpeg/ffmpeg'
16
- require 'FFmpeg/ffmpeg_audio_stream'
17
- require 'FFmpeg/ffmpeg_video_stream'
18
- require 'FFmpeg/ffmpeg_meta_info'
19
- require 'libAV/libav'
20
- require 'libAV/libav_audio_stream'
21
- require 'libAV/libav_video_stream'
22
- require 'libAV/libav_meta_info'
23
- require 'MPlayer/mplayer'
24
- require 'MPlayer/mplayer_audio_stream'
25
- require 'MPlayer/mplayer_video_stream'
26
- require 'MPlayer/mplayer_meta_info'
1
+ #
2
+ # Video Contact Sheet Ruby
3
+ #
4
+
5
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
6
+
7
+ require 'command'
8
+ require 'configuration'
9
+ require 'contact_sheet'
10
+ require 'video'
11
+ require 'frame'
12
+ require 'time_index'
13
+ require 'tools'
14
+ require 'version'
15
+ require 'FFmpeg/ffmpeg'
16
+ require 'FFmpeg/ffmpeg_audio_stream'
17
+ require 'FFmpeg/ffmpeg_video_stream'
18
+ require 'FFmpeg/ffmpeg_meta_info'
19
+ require 'libAV/libav'
20
+ require 'libAV/libav_audio_stream'
21
+ require 'libAV/libav_video_stream'
22
+ require 'libAV/libav_meta_info'
23
+ require 'MPlayer/mplayer'
24
+ require 'MPlayer/mplayer_audio_stream'
25
+ require 'MPlayer/mplayer_video_stream'
26
+ require 'MPlayer/mplayer_meta_info'
data/lib/version.info CHANGED
@@ -1 +1 @@
1
- 1.1.8
1
+ 1.1.9
data/lib/version.rb CHANGED
@@ -1,25 +1,25 @@
1
- #
2
- # Version of vcs.rb
3
- #
4
-
5
- module VCSRuby
6
- def self.version_path
7
- File.expand_path("version.info", File.dirname(__FILE__))
8
- end
9
-
10
- def self.read_version
11
- File.open(version_path, &:readline)
12
- end
13
-
14
- def self.update_version
15
- current_version = read_version
16
- parts = File.open(version_path, &:readline).split('.').map(&:strip)
17
- parts[2] = (parts[2].to_i + 1).to_s
18
- File.open(version_path, 'w') {|f| f.write(parts.join('.')) }
19
- current_version
20
- end
21
- end
22
-
23
- $vcs_ruby_version = Gem::Version.new(VCSRuby::read_version)
24
- $vcs_ruby_name = 'Video Contact Sheet Ruby'
25
- $vcs_ruby_short = 'vcr.rb'
1
+ #
2
+ # Version of vcs.rb
3
+ #
4
+
5
+ module VCSRuby
6
+ def self.version_path
7
+ File.expand_path("version.info", File.dirname(__FILE__))
8
+ end
9
+
10
+ def self.read_version
11
+ File.open(version_path, &:readline)
12
+ end
13
+
14
+ def self.update_version
15
+ current_version = read_version
16
+ parts = File.open(version_path, &:readline).split('.').map(&:strip)
17
+ parts[2] = (parts[2].to_i + 1).to_s
18
+ File.open(version_path, 'w') {|f| f.write(parts.join('.')) }
19
+ current_version
20
+ end
21
+ end
22
+
23
+ $vcs_ruby_version = Gem::Version.new(VCSRuby::read_version)
24
+ $vcs_ruby_name = 'Video Contact Sheet Ruby'
25
+ $vcs_ruby_short = 'vcr.rb'