sensible-cinema 0.15.0 → 0.16.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +15 -1
- data/LICENSE +46 -35
- data/Rakefile +7 -10
- data/TODO +61 -67
- data/VERSION +1 -1
- data/bin/sensible-cinema +195 -113
- data/lib/edl_parser.rb +54 -0
- data/lib/mencoder_wrapper.rb +8 -9
- data/lib/storage.rb +82 -0
- data/lib/swing_helpers.rb +19 -1
- data/run_sensible_cinema_in_create_mode.bat +5 -0
- data/sensible-cinema.gemspec +141 -136
- data/spec/edl_parser.spec.rb +76 -0
- data/spec/mencoder_wrapper.spec.rb +10 -12
- data/spec/sensible_cinema_gui.spec.rb +12 -10
- data/vendor/unzip.exe +0 -0
- data/zamples/edit_decision_lists/category descriptions.txt +1 -0
- data/zamples/edit_decision_lists/dvds/bobs_big_plan.txt +9 -12
- data/zamples/edit_decision_lists/dvds/happiest baby on the block.txt +8 -11
- data/zamples/edit_decision_lists/dvds/White Christmas.txt b/data/zamples/edit_decision_lists/dvds/old_and_inaccurate/White → Christmas.txt +0 -0
- data/zamples/edit_decision_lists/dvds/{all_dogs_go_to_heaven.txt → old_and_inaccurate/all_dogs_go_to_heaven.txt} +0 -0
- data/zamples/edit_decision_lists/dvds/{cars_disney.txt → old_and_inaccurate/cars_disney.txt} +0 -0
- data/zamples/edit_decision_lists/dvds/{happy_feet.txt → old_and_inaccurate/happy_feet.txt} +0 -0
- data/zamples/edit_decision_lists/dvds/{labyrinth.txt → old_and_inaccurate/labyrinth.txt} +0 -0
- data/zamples/edit_decision_lists/dvds/making marriage work.txt b/data/zamples/edit_decision_lists/dvds/old_and_inaccurate/making marriage → work.txt +0 -0
- data/zamples/edit_decision_lists/{star_trek_generations_hulu.txt → dvds/old_and_inaccurate/star_trek_generations_hulu.txt} +0 -0
- data/zamples/edit_decision_lists/example_edit_decision_list.txt +36 -20
- data/zamples/edit_decision_lists/{youtube → old_not_yet_update/youtube}/gummy_bear_song_youtube.txt +0 -0
- data/zamples/edit_decision_lists/{youtube → old_not_yet_update/youtube}/nuki_song_youtube.txt +0 -0
- metadata +291 -285
data/lib/edl_parser.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
class EdlParser
|
2
|
+
|
3
|
+
def self.parse_file filename
|
4
|
+
parse_string File.read(filename), filename
|
5
|
+
end
|
6
|
+
|
7
|
+
# better eye-ball these before letting people run them, eh?
|
8
|
+
# but I couldn't think of any other way
|
9
|
+
def self.parse_string string, filename, ok_categories_array = []
|
10
|
+
string = '{' + string + "\n}"
|
11
|
+
if filename
|
12
|
+
raw = eval(string, binding, filename)
|
13
|
+
else
|
14
|
+
raw = eval string
|
15
|
+
end
|
16
|
+
|
17
|
+
# mutes and blank_outs need to be special parsed into arrays...
|
18
|
+
mutes = raw["mutes"] || []
|
19
|
+
blanks = raw["blank_outs"] || []
|
20
|
+
raw["mutes"] = convert_to_timestamp_arrays(mutes, ok_categories_array)
|
21
|
+
raw["blank_outs"] = convert_to_timestamp_arrays(blanks, ok_categories_array)
|
22
|
+
raw
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.convert_to_timestamp_arrays array, ok_categories_array
|
26
|
+
out = []
|
27
|
+
while(single_element = extract_entry!(array))
|
28
|
+
# assume that it's always start_time, end_time, category, number
|
29
|
+
category = single_element[-2]
|
30
|
+
category_number = single_element[-1]
|
31
|
+
unless ok_categories_array.index([category, category_number])
|
32
|
+
out << single_element
|
33
|
+
end
|
34
|
+
end
|
35
|
+
out
|
36
|
+
end
|
37
|
+
|
38
|
+
TimeStamp = /^\d+:\d\d[\d:\.]*$/
|
39
|
+
# starts with a digit, has at least one colon followed by two digits,then some combo of digits and colons and periods...
|
40
|
+
|
41
|
+
def self.extract_entry! from_this
|
42
|
+
return nil if from_this.length == 0
|
43
|
+
# two digits, then whatever else you see, that's not a digit...
|
44
|
+
out = from_this.shift(2)
|
45
|
+
out.each{|d|
|
46
|
+
raise 'non timestamp? ' + d unless d =~ TimeStamp
|
47
|
+
}
|
48
|
+
while(from_this[0] && from_this[0] !~ TimeStamp)
|
49
|
+
out << from_this.shift
|
50
|
+
end
|
51
|
+
out
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
data/lib/mencoder_wrapper.rb
CHANGED
@@ -13,20 +13,19 @@ class MencoderWrapper
|
|
13
13
|
if File.exist?(@big_temp) && File.exist?(@big_temp + '.done')
|
14
14
|
''
|
15
15
|
else
|
16
|
-
"call mencoder dvd
|
16
|
+
"call mencoder dvd://#{@dvd_title_track} -oac copy -lavcopts keyint=1 -ovc lavc -o #{@big_temp} -dvd-device #{this_drive} && echo got_file > #{@big_temp}.done\n"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def get_bat_commands these_mutes, this_drive, to_here_final_file, start_here = nil, end_here = nil
|
20
|
+
def get_bat_commands these_mutes, this_drive, to_here_final_file, start_here = nil, end_here = nil, dvd_title_track = "1"
|
21
21
|
combined = VLCProgrammer.convert_incoming_to_split_sectors these_mutes
|
22
|
-
|
22
|
+
@dvd_title_track = dvd_title_track
|
23
23
|
if start_here || end_here
|
24
24
|
raise 'need both' unless end_here && start_here
|
25
25
|
start_here = OverLayer.translate_string_to_seconds(start_here)
|
26
26
|
end_here = OverLayer.translate_string_to_seconds(end_here)
|
27
27
|
combined.select!{|start, endy, type| start > start_here && endy < end_here }
|
28
28
|
# it's relative now, since we rip from not the beginning
|
29
|
-
raise Exception.new('unable to find any edit decisions to do within that range') unless combined.length > 0
|
30
29
|
previous_end = start_here
|
31
30
|
else
|
32
31
|
previous_end = 0
|
@@ -51,14 +50,14 @@ class MencoderWrapper
|
|
51
50
|
|
52
51
|
out += "del #{to_here_final_file}\n"
|
53
52
|
# ridiculous
|
54
|
-
out += "call mencoder #{partials.join(' ')} -o #{to_here_final_file}.
|
53
|
+
out += "call mencoder #{partials.join(' ')} -o #{to_here_final_file}.avi -ovc copy -oac copy\n"
|
55
54
|
# LODO only do this if they want to watch it on their computer, with something other than smplayer, or want to make it smaller, as it takes *forever* longer
|
56
55
|
# LODO the "insta play" mode, or the "faster rip" mode (related...)
|
57
56
|
# out += "call mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -vf scale=720:480,harddup -srate 48000 -af lavcresample=48000 -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 30000/1001 #{partials.join(' ')} -o #{to_here_final_file}\n"
|
58
57
|
|
59
58
|
out += "@rem del #{@big_temp}\n" # LODO
|
60
|
-
out += "
|
61
|
-
out += "echo wrote to #{to_here_final_file}.
|
59
|
+
out += "del " + partials.join(' ') + "\n"# LODO
|
60
|
+
out += "echo wrote to #{to_here_final_file}.avi"
|
62
61
|
out
|
63
62
|
end
|
64
63
|
|
@@ -68,7 +67,7 @@ class MencoderWrapper
|
|
68
67
|
endy = endy - start - 0.001
|
69
68
|
# very decreased volume is like muting :)
|
70
69
|
# LODO can we copy more here? ntsc-dvd supposedly remuxes...
|
71
|
-
codecs = should_mute ? "-vcodec copy -acodec ac3 -vol 0 " : "-vcodec copy -acodec copy " # LODO
|
70
|
+
codecs = should_mute ? "-vcodec copy -acodec ac3 -vol 0 " : "-vcodec copy -acodec copy " # LODO the ac3 must match the copy...hmm...
|
72
71
|
# ffmpeg -i from_here.avi -vcodec copy -acodec copy -ss 1:00 -t 1:00 out.avi
|
73
72
|
partial_filename = to_here_final_file + '.' + (@idx += 1).to_s + '.avi'
|
74
73
|
"del #{partial_filename}\ncall ffmpeg -i #{@big_temp} #{codecs} -ss #{start} -t #{endy} #{partial_filename}\n"
|
@@ -86,7 +85,7 @@ if $0 == __FILE__
|
|
86
85
|
drive = ARGV.shift
|
87
86
|
raise 'wrong drive' unless File.exist?(drive + "AUDIO_TS")
|
88
87
|
execute = ARGV.delete('--run')
|
89
|
-
commands =MencoderWrapper.get_bat_commands(a, drive, *ARGV)
|
88
|
+
commands = MencoderWrapper.get_bat_commands(a, drive, *ARGV)
|
90
89
|
if ARGV.length > 2
|
91
90
|
write_to = 'range.bat'
|
92
91
|
else
|
data/lib/storage.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# use it like
|
2
|
+
|
3
|
+
class Storage
|
4
|
+
class << self
|
5
|
+
attr_writer :storage_dir
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.storage_dir
|
9
|
+
@user_dir ||= File.join(File.expand_path('~'), ".storage")
|
10
|
+
end
|
11
|
+
|
12
|
+
# Open a storage file or create it if it doesn't exist.
|
13
|
+
#
|
14
|
+
# @param [String] a (short) name, should be suitable for use as a filename
|
15
|
+
def initialize(name)
|
16
|
+
@name = name
|
17
|
+
unless File.exists?(Storage.storage_dir)
|
18
|
+
FileUtils.mkdir_p(Storage.storage_dir)
|
19
|
+
end
|
20
|
+
rollback
|
21
|
+
end
|
22
|
+
|
23
|
+
# Save the storage to disk.
|
24
|
+
def save
|
25
|
+
File.open(path, "w") { |f| YAML.dump(@storage, f) }
|
26
|
+
update_timestamp
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
# Rollback the storage to the latest revision saved to disk or empty it if
|
31
|
+
# it hasn't been saved.
|
32
|
+
def rollback
|
33
|
+
if File.exists?(path)
|
34
|
+
@storage = YAML.load_file(path)
|
35
|
+
raise 'storage file is corrupted--please delete ' + path unless @storage.is_a? Hash
|
36
|
+
update_timestamp
|
37
|
+
else
|
38
|
+
@storage = {}
|
39
|
+
end
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
# retrieve key value
|
44
|
+
# note: it does not re-read from disk before returning you this value
|
45
|
+
def [](key)
|
46
|
+
if @last_modified_time
|
47
|
+
if File.exist?(path()) && (File.stat(path()).mtime != @last_modified_time)
|
48
|
+
rollback
|
49
|
+
end
|
50
|
+
end
|
51
|
+
@storage[key]
|
52
|
+
end
|
53
|
+
|
54
|
+
# set key to value
|
55
|
+
# note: it automatically saves this to disk
|
56
|
+
def []=(key, value)
|
57
|
+
@storage[key] = value
|
58
|
+
save
|
59
|
+
value
|
60
|
+
end
|
61
|
+
|
62
|
+
def set_default(key, value)
|
63
|
+
unless @storage.has_key?(key)
|
64
|
+
self[key] = value
|
65
|
+
end
|
66
|
+
value
|
67
|
+
end
|
68
|
+
|
69
|
+
def keys
|
70
|
+
@storage.keys
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def path
|
76
|
+
File.join(Storage.storage_dir, @name + ".yaml")
|
77
|
+
end
|
78
|
+
|
79
|
+
def update_timestamp
|
80
|
+
@last_modified_time = File.stat(path()).mtime
|
81
|
+
end
|
82
|
+
end
|
data/lib/swing_helpers.rb
CHANGED
@@ -5,8 +5,9 @@ module SensibleSwing
|
|
5
5
|
JFileChooser, JComboBox, JDialog, SwingUtilities] # grab these constants (http://jira.codehaus.org/browse/JRUBY-5107)
|
6
6
|
include_package 'java.awt'
|
7
7
|
[FlowLayout, Font]
|
8
|
-
include_class
|
8
|
+
include_class java.awt.event.ActionListener
|
9
9
|
JFile = java.io.File
|
10
|
+
include_class java.awt.FileDialog
|
10
11
|
|
11
12
|
class JButton
|
12
13
|
def initialize *args
|
@@ -39,6 +40,23 @@ module SensibleSwing
|
|
39
40
|
end
|
40
41
|
get_selected_file.get_absolute_path
|
41
42
|
end
|
43
|
+
|
44
|
+
# match FileDialog
|
45
|
+
def set_title x
|
46
|
+
set_dialog_title x
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_file f
|
50
|
+
set_selected_file JFile.new(f)
|
51
|
+
end
|
52
|
+
alias setFile set_file
|
53
|
+
end
|
54
|
+
|
55
|
+
class FileDialog
|
56
|
+
def go
|
57
|
+
show
|
58
|
+
File.expand_path(get_directory + '/' + get_file) if get_file
|
59
|
+
end
|
42
60
|
end
|
43
61
|
|
44
62
|
class ModeLessDialog < JDialog
|
@@ -0,0 +1,5 @@
|
|
1
|
+
@setlocal
|
2
|
+
@rem disable any local rubyopt settings...
|
3
|
+
@set RUBYOPT=
|
4
|
+
@echo This window will display lots of debug message output!
|
5
|
+
@cd sensible-cinema && java -cp "./vendor/cache/jruby-complete-1.5.5.jar" org.jruby.Main bin\sensible-cinema --create-mode || echo you need to install java first!
|
data/sensible-cinema.gemspec
CHANGED
@@ -1,163 +1,168 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sensible-cinema}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.16.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Roger Pack"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-03}
|
13
13
|
s.email = %q{rogerdpack@gmail.com}
|
14
14
|
s.executables = ["sensible-cinema", "sensible-cinema-cli"]
|
15
15
|
s.extensions = ["ext/mkrf_conf.rb"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"ChangeLog",
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
"LICENSE",
|
19
|
+
"README",
|
20
|
+
"TODO"
|
21
21
|
]
|
22
22
|
s.files = [
|
23
23
|
"ChangeLog",
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
24
|
+
"LICENSE",
|
25
|
+
"README",
|
26
|
+
"Rakefile",
|
27
|
+
"TODO",
|
28
|
+
"VERSION",
|
29
|
+
"bin/sensible-cinema",
|
30
|
+
"bin/sensible-cinema-cli",
|
31
|
+
"experimental_readme.txt",
|
32
|
+
"ext/mkrf_conf.rb",
|
33
|
+
"gplv3.txt",
|
34
|
+
"lib/add_any_bundled_gems_to_load_path.rb",
|
35
|
+
"lib/blanker.rb",
|
36
|
+
"lib/drive_info.rb",
|
37
|
+
"lib/edl_parser.rb",
|
38
|
+
"lib/fake_blanker.rb",
|
39
|
+
"lib/file_chooser.rb",
|
40
|
+
"lib/keyboard_input.rb",
|
41
|
+
"lib/mencoder_wrapper.rb",
|
42
|
+
"lib/mouse.rb",
|
43
|
+
"lib/mouse_forever.rb",
|
44
|
+
"lib/muter.rb",
|
45
|
+
"lib/ocr.rb",
|
46
|
+
"lib/overlayer.rb",
|
47
|
+
"lib/screen_tracker.rb",
|
48
|
+
"lib/storage.rb",
|
49
|
+
"lib/swing_helpers.rb",
|
50
|
+
"lib/vlc_programmer.rb",
|
51
|
+
"never_do",
|
52
|
+
"run_sensible_cinema.bat",
|
53
|
+
"run_sensible_cinema_in_create_mode.bat",
|
54
|
+
"sensible-cinema.gemspec",
|
55
|
+
"spec/blanker.spec.rb",
|
56
|
+
"spec/common.rb",
|
57
|
+
"spec/convert_image.rb",
|
58
|
+
"spec/drive_info.spec.rb",
|
59
|
+
"spec/edl_parser.spec.rb",
|
60
|
+
"spec/images/black.bmp",
|
61
|
+
"spec/images/colon.bmp",
|
62
|
+
"spec/images/hulu_0.bmp",
|
63
|
+
"spec/images/hulu_2.bmp",
|
64
|
+
"spec/images/hulu_2_3.bmp",
|
65
|
+
"spec/images/hulu_2_4.bmp",
|
66
|
+
"spec/images/hulu_3.bmp",
|
67
|
+
"spec/images/hulu_3_4.bmp",
|
68
|
+
"spec/images/hulu_4.bmp",
|
69
|
+
"spec/images/hulu_4_4.bmp",
|
70
|
+
"spec/images/hulu_5.bmp",
|
71
|
+
"spec/images/hulu_7.bmp",
|
72
|
+
"spec/images/hulu_8.bmp",
|
73
|
+
"spec/images/hulu_slash.bmp",
|
74
|
+
"spec/images/vlc_0.bmp",
|
75
|
+
"spec/images/vlc_2_4.bmp",
|
76
|
+
"spec/images/vlc_2_6.bmp",
|
77
|
+
"spec/images/vlc_4.bmp",
|
78
|
+
"spec/images/vlc_5.bmp",
|
79
|
+
"spec/images/vlc_6.bmp",
|
80
|
+
"spec/images/vlc_9.bmp",
|
81
|
+
"spec/images/vlc_colon.bmp",
|
82
|
+
"spec/images/youtube_0.bmp",
|
83
|
+
"spec/images/youtube_1.bmp",
|
84
|
+
"spec/images/youtube_2_0.bmp",
|
85
|
+
"spec/images/youtube_2_5.bmp",
|
86
|
+
"spec/images/youtube_2_6.bmp",
|
87
|
+
"spec/images/youtube_3_0.bmp",
|
88
|
+
"spec/images/youtube_4.bmp",
|
89
|
+
"spec/images/youtube_4_0.bmp",
|
90
|
+
"spec/images/youtube_5.bmp",
|
91
|
+
"spec/images/youtube_6.bmp",
|
92
|
+
"spec/images/youtube_light_0.bmp",
|
93
|
+
"spec/images/youtube_light_1_3.bmp",
|
94
|
+
"spec/images/youtube_light_2_1.bmp",
|
95
|
+
"spec/images/youtube_light_2_3.bmp",
|
96
|
+
"spec/images/youtube_light_2_9.bmp",
|
97
|
+
"spec/images/youtube_light_4.bmp",
|
98
|
+
"spec/images/youtube_light_4_3.bmp",
|
99
|
+
"spec/images/youtube_light_5.bmp",
|
100
|
+
"spec/images/youtube_light_5_0.bmp",
|
101
|
+
"spec/images/youtube_light_8.bmp",
|
102
|
+
"spec/images/youtube_light_9.bmp",
|
103
|
+
"spec/images/youtube_small_0.bmp",
|
104
|
+
"spec/images/youtube_small_2.bmp",
|
105
|
+
"spec/images/youtube_small_2_0.bmp",
|
106
|
+
"spec/images/youtube_small_4.bmp",
|
107
|
+
"spec/keyboard_input.spec.rb",
|
108
|
+
"spec/mencoder_wrapper.spec.rb",
|
109
|
+
"spec/mouse.spec.rb",
|
110
|
+
"spec/muter.spec.rb",
|
111
|
+
"spec/ocr.spec.rb",
|
112
|
+
"spec/overlayer.spec.rb",
|
113
|
+
"spec/screen_tracker.spec.rb",
|
114
|
+
"spec/sensible_cinema_gui.spec.rb",
|
115
|
+
"spec/silence.wav",
|
116
|
+
"spec/swing_helpers.spec.rb",
|
117
|
+
"spec/test_yaml.yml",
|
118
|
+
"spec/vlc_programmer.spec.rb",
|
119
|
+
"todo_if_need_speed",
|
120
|
+
"vendor/gocr049.exe",
|
121
|
+
"vendor/unzip.exe",
|
122
|
+
"zamples/edit_decision_lists/category descriptions.txt",
|
123
|
+
"zamples/edit_decision_lists/dvds/bobs_big_plan.txt",
|
124
|
+
"zamples/edit_decision_lists/dvds/happiest baby on the block.txt",
|
125
|
+
"zamples/edit_decision_lists/dvds/old_and_inaccurate/White Christmas.txt",
|
126
|
+
"zamples/edit_decision_lists/dvds/old_and_inaccurate/all_dogs_go_to_heaven.txt",
|
127
|
+
"zamples/edit_decision_lists/dvds/old_and_inaccurate/cars_disney.txt",
|
128
|
+
"zamples/edit_decision_lists/dvds/old_and_inaccurate/happy_feet.txt",
|
129
|
+
"zamples/edit_decision_lists/dvds/old_and_inaccurate/labyrinth.txt",
|
130
|
+
"zamples/edit_decision_lists/dvds/old_and_inaccurate/making marriage work.txt",
|
131
|
+
"zamples/edit_decision_lists/dvds/old_and_inaccurate/star_trek_generations_hulu.txt",
|
132
|
+
"zamples/edit_decision_lists/example_edit_decision_list.txt",
|
133
|
+
"zamples/edit_decision_lists/old_not_yet_update/youtube/gummy_bear_song_youtube.txt",
|
134
|
+
"zamples/edit_decision_lists/old_not_yet_update/youtube/nuki_song_youtube.txt",
|
135
|
+
"zamples/players/how_to_create_more_players.txt",
|
136
|
+
"zamples/players/hulu/total_length_over_an_hour.txt",
|
137
|
+
"zamples/players/vlc/full_screened_total_length_over_an_hour.txt",
|
138
|
+
"zamples/players/vlc/windowed_total_length_over_an_hour.txt",
|
139
|
+
"zamples/players/vlc/windowed_total_length_under_an_hour.txt",
|
140
|
+
"zamples/players/youtube/full_screened_1024x768.txt",
|
141
|
+
"zamples/players/youtube/full_screened_1152x864.txt",
|
142
|
+
"zamples/players/youtube/full_screened_1680x1050.txt",
|
143
|
+
"zamples/players/youtube/normal_in_youtube.com.chrome.txt",
|
144
|
+
"zamples/players/youtube/note_these_assume_less_than_10_minutes_length.txt"
|
140
145
|
]
|
141
146
|
s.homepage = %q{http://github.com/rdp}
|
142
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
143
147
|
s.require_paths = ["lib"]
|
144
148
|
s.rubygems_version = %q{1.3.6}
|
145
149
|
s.summary = %q{an EDL scene-selector/bleeper that works with online players like hulu}
|
146
150
|
s.test_files = [
|
147
151
|
"spec/blanker.spec.rb",
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
152
|
+
"spec/common.rb",
|
153
|
+
"spec/convert_image.rb",
|
154
|
+
"spec/drive_info.spec.rb",
|
155
|
+
"spec/edl_parser.spec.rb",
|
156
|
+
"spec/keyboard_input.spec.rb",
|
157
|
+
"spec/mencoder_wrapper.spec.rb",
|
158
|
+
"spec/mouse.spec.rb",
|
159
|
+
"spec/muter.spec.rb",
|
160
|
+
"spec/ocr.spec.rb",
|
161
|
+
"spec/overlayer.spec.rb",
|
162
|
+
"spec/screen_tracker.spec.rb",
|
163
|
+
"spec/sensible_cinema_gui.spec.rb",
|
164
|
+
"spec/swing_helpers.spec.rb",
|
165
|
+
"spec/vlc_programmer.spec.rb"
|
161
166
|
]
|
162
167
|
|
163
168
|
if s.respond_to? :specification_version then
|