sensible-cinema 0.25.4 → 0.26.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +6 -0
- data/Rakefile +1 -0
- data/TODO +82 -176
- data/VERSION +1 -1
- data/also_see_rogerdpack_youtube_account_and_sourceforge_files_movies_account +0 -0
- data/bin/sensible-cinema +3 -6
- data/bin/sensible-cinema-cli +2 -10
- data/change_log_with_feature_list.txt +31 -1
- data/lib/convert_thirty_fps.rb +11 -3
- data/lib/edl_parser.rb +62 -1
- data/{bin → lib}/sensible-cinema-dependencies.rb +12 -0
- data/spec/edl_parser.spec.rb +17 -3
- data/todo.inventionzy.txt +33 -27
- data/todo.upconvert +3 -0
- data/www/content_editor.html +91 -0
- data/www/index.html +55 -93
- data/www/upconverting_movie_player.html +52 -0
- data/www/video reel.jpg +0 -0
- data/zamples/edit_decision_lists/youtube/nuki_song_youtube_pointer.txt +2 -1
- metadata +7 -5
- data/spec/files/edls/edls_being_edited/edl_for_unit_tests.txt +0 -19
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.26.0
|
File without changes
|
data/bin/sensible-cinema
CHANGED
@@ -79,7 +79,7 @@ else
|
|
79
79
|
end
|
80
80
|
|
81
81
|
import 'javax.swing.ImageIcon'
|
82
|
-
require_relative 'sensible-cinema-dependencies'
|
82
|
+
require_relative '../lib/sensible-cinema-dependencies'
|
83
83
|
|
84
84
|
module SensibleSwing
|
85
85
|
VERSION = File.read(File.dirname(__FILE__) + "/../VERSION").strip
|
@@ -329,7 +329,7 @@ module SensibleSwing
|
|
329
329
|
out = "Upconvert options currently #{ settings ? "are set to #{settings} style" : "are NOT SET"}"
|
330
330
|
if settings
|
331
331
|
multiple = LocalStorage[ScreenMultipleFactor]
|
332
|
-
out += " (screen multiplier #{multiple} = #{(multiple * get_current_max_width_resolution).to_i}px)."
|
332
|
+
out += " (screen multiplier #{get_current_max_width_resolution}*#{multiple} = #{(multiple * get_current_max_width_resolution).to_i}px)."
|
333
333
|
end
|
334
334
|
out
|
335
335
|
end
|
@@ -621,11 +621,8 @@ module SensibleSwing
|
|
621
621
|
if just_create_dot_edl_file_instead_of_play
|
622
622
|
descriptors = EdlParser.parse_file edl_filename
|
623
623
|
# LODO these timings...DRY up...plus is XBMC the same? what about on a slower computer?
|
624
|
-
# NB these are just for the
|
624
|
+
# NB these are just for the Side by side EDL's!
|
625
625
|
|
626
|
-
#add_secs_end = 0
|
627
|
-
#add_secs_beginning = 0.5 # LODO are these accurate for file based, as well? slow cpu versus fast?
|
628
|
-
|
629
626
|
edl_contents = MplayerEdl.convert_to_edl descriptors, add_secs_end = MplayerEndBuffer, MplayerBeginingBuffer, splits = []
|
630
627
|
output_file = filename_mpg.gsub(/\.[^\.]+$/, '') + '.edl' # sanitize...
|
631
628
|
File.write(output_file, edl_contents)
|
data/bin/sensible-cinema-cli
CHANGED
@@ -85,20 +85,12 @@ def go_sc(args)
|
|
85
85
|
auto_found = AutoWindowFinder.search_for_single_url_match
|
86
86
|
if auto_found
|
87
87
|
p 'auto-discovered open window for player x EDL, using it ' + auto_found
|
88
|
-
|
89
|
-
if settings["from_url"]
|
90
|
-
require 'tempfile'
|
91
|
-
to = Tempfile.new 'abc'
|
92
|
-
require_relative 'sensible-cinema-dependencies'
|
93
|
-
SensibleSwing::MainWindow.download(settings["from_url"], to.path)
|
94
|
-
edit_decision_list = to.path
|
95
|
-
else
|
96
|
-
edit_decision_list = auto_found
|
97
|
-
end
|
88
|
+
edit_decision_list = auto_found
|
98
89
|
else
|
99
90
|
puts 'Select Edit Decision List to use'
|
100
91
|
edit_decision_list = FileChooser.choose_file(" SELECT EDIT DECISION LIST", __DIR__ + "/../zamples/edit_decision_lists")
|
101
92
|
end
|
93
|
+
settings = EdlParser.parse_file auto_found
|
102
94
|
|
103
95
|
if !edit_decision_list
|
104
96
|
puts "error: have to specify a scene descriptions file\n or specify \"test\" on the command line if you just want to snapshot your player"
|
@@ -1,4 +1,34 @@
|
|
1
|
-
==
|
1
|
+
== 0.26.0 ==
|
2
|
+
|
3
|
+
It can now parse out (screen scraping), at runtime, EDL information from a user editable online 3rd party wiki
|
4
|
+
(imdb parent guide), including property timestamp conversions and making it easy to read, etc., and doing all the various
|
5
|
+
sections to an appropriate category.
|
6
|
+
So it binds the DVD's unique ID with its imdb database.
|
7
|
+
|
8
|
+
Note that Sensible Cinema can convert timestamps back and forth, using the command line,
|
9
|
+
to convert its own EDL's into a format that is copy and pastable into a wiki page on IMDB. (30 to 29.97 fps)
|
10
|
+
|
11
|
+
Note also that it could just as easily parse from a wiki, parse out timestamps, including +- descriptions,
|
12
|
+
and save that away to be distributable by the program at compile time, as well.
|
13
|
+
|
14
|
+
Note also that it is basically almost a "universal" player at this point, because it has been made to work
|
15
|
+
with demos of already several various online/local program playing video players.
|
16
|
+
Including software blu-ray players etc.
|
17
|
+
|
18
|
+
Note that it already demo'ed being able to have "user customizable" volume level for muted sections
|
19
|
+
(i.e. not mute it all the way, if desired)
|
20
|
+
|
21
|
+
Note also that it can be used by hooking to a projector or from computer -> tv so we have this unofficially
|
22
|
+
in the living room or across several devices or the like.
|
23
|
+
|
24
|
+
Note that the various video screenshots recorded imply that one would be able to
|
25
|
+
readily stream sensible cinema via screenshot capture to any device ready to receive it.
|
26
|
+
See also coupling it with [1] and [2].
|
27
|
+
|
28
|
+
[1] https://github.com/rdp/virtual-audio-capture-grabber-device
|
29
|
+
[2] https://github.com/rdp/screen-capture-recorder-program
|
30
|
+
|
31
|
+
== 0.25.5==
|
2
32
|
|
3
33
|
Cleaned up upconverting options to hopefully cause less confusion. Until somebody complains otherwise.
|
4
34
|
|
data/lib/convert_thirty_fps.rb
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
module ConvertThirtyFps
|
2
|
+
|
2
3
|
def self.from_thirty seconds_float
|
3
|
-
twentyNinePointNineSeven = 30000/1001.0
|
4
|
+
twentyNinePointNineSeven = 30000/1001.0 # 29.97
|
4
5
|
seconds_float * 30/twentyNinePointNineSeven
|
5
6
|
end
|
7
|
+
|
8
|
+
def self.from_twenty_nine_nine_seven seconds_float
|
9
|
+
twentyNinePointNineSeven = 30000/1001.0
|
10
|
+
seconds_float * twentyNinePointNineSeven/30
|
11
|
+
end
|
12
|
+
|
6
13
|
end
|
7
14
|
|
8
15
|
if $0 == __FILE__
|
9
|
-
p 'syntax: second to convert
|
16
|
+
p 'syntax: second to convert '
|
10
17
|
seconds = eval(ARGV[0] || "1000").to_f
|
11
|
-
p 'converted value is', ConvertThirtyFps.from_thirty(seconds) # should
|
18
|
+
p 'converted value from 30 to 29.97 is', ConvertThirtyFps.from_thirty(seconds) # should be bigger...
|
19
|
+
p 'converted value from 29.97 to 30 is', ConvertThirtyFps.from_twenty_nine_nine_seven(seconds)
|
12
20
|
end
|
data/lib/edl_parser.rb
CHANGED
@@ -25,17 +25,75 @@ class EdlParser
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# returns {"mutes" => [["00:00", "00:00", string1, string2, ...], ...], "blank_outs" -> [...], "url" => ...}
|
28
|
-
def self.parse_file filename
|
28
|
+
def self.parse_file filename, expand = true
|
29
29
|
output = parse_string File.read(filename), filename, []
|
30
30
|
if relative = output["take_from_relative_file"]
|
31
31
|
new_filename = File.dirname(filename) + '/' + relative
|
32
32
|
new_input = parse_file new_filename
|
33
33
|
output.merge! new_input
|
34
34
|
end
|
35
|
+
require_relative 'sensible-cinema-dependencies'
|
36
|
+
|
37
|
+
if expand
|
38
|
+
|
39
|
+
if output["from_url"] # replacement
|
40
|
+
downloaded = SensibleSwing::MainWindow.download_to_string(output["from_url"])
|
41
|
+
output = parse_string downloaded # full replacement
|
42
|
+
end
|
43
|
+
|
44
|
+
if imdb_id = output["imdb_id"]
|
45
|
+
require_relative 'convert_thirty_fps'
|
46
|
+
url = "http://www.imdb.com/title/#{imdb_id}/parentalguide"
|
47
|
+
all = SensibleSwing::MainWindow.download_to_string(url)
|
48
|
+
|
49
|
+
header, violence_word, violence_section, profanity_word, profanity_section, alcohol_word, alcohol_section, frightening_word, frightening_section =
|
50
|
+
sections = all.split(/<span>(Violence|Profanity|Alcohol|Frightening)/)
|
51
|
+
header = sections.shift
|
52
|
+
all ={}
|
53
|
+
while(!sections.empty?) # my klugey to_hash method
|
54
|
+
word_type = sections.shift
|
55
|
+
settings = sections.shift
|
56
|
+
assert word_type.in? ['Violence', 'Profanity', 'Alcohol', 'Frightening']
|
57
|
+
all[word_type] = settings
|
58
|
+
end
|
59
|
+
# blank_outs or mutes for each...
|
60
|
+
# TODO make -> optional
|
61
|
+
split_into_timestamps = /([\d:]+(?:\.\d+|))\W*->\W*([\d:]+(?:\.\d+|))([^\d\n]+)/
|
62
|
+
for type, settings in all
|
63
|
+
settings.scan(split_into_timestamps) do |begin_ts, end_ts, description|
|
64
|
+
puts "parsing from wiki imdb entry violence: #{begin_ts} #{end_ts} #{description} #{type}"
|
65
|
+
start_seconds = translate_string_to_seconds begin_ts
|
66
|
+
end_seconds = translate_string_to_seconds end_ts
|
67
|
+
# convert from 30 to 29.97 fps ... we presume ...
|
68
|
+
start_seconds = ConvertThirtyFps.from_twenty_nine_nine_seven start_seconds
|
69
|
+
start_seconds = ("%.02f" % start_seconds).to_f # round
|
70
|
+
start_seconds = translate_time_to_human_readable start_seconds, true
|
71
|
+
end_seconds = ConvertThirtyFps.from_twenty_nine_nine_seven end_seconds
|
72
|
+
end_seconds = ("%.02f" % end_seconds).to_f # round
|
73
|
+
end_seconds = translate_time_to_human_readable end_seconds, true
|
74
|
+
p end_seconds
|
75
|
+
if type == 'Profanity'
|
76
|
+
output['mutes'] << [start_seconds, end_seconds]
|
77
|
+
else
|
78
|
+
output['blank_outs'] << [start_seconds, end_seconds]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
35
86
|
output
|
36
87
|
end
|
37
88
|
|
38
89
|
private
|
90
|
+
|
91
|
+
def self.download full_url, to_here
|
92
|
+
require 'open-uri'
|
93
|
+
writeOut = open(to_here, "wb")
|
94
|
+
writeOut.write(open(full_url).read)
|
95
|
+
writeOut.close
|
96
|
+
end
|
39
97
|
|
40
98
|
# better eye-ball these before letting people run them, eh? TODO
|
41
99
|
# but I couldn't think of any other way to parse the files tho
|
@@ -132,6 +190,7 @@ class EdlParser
|
|
132
190
|
|
133
191
|
public
|
134
192
|
|
193
|
+
# called later, from external
|
135
194
|
# divides up mutes and blanks so that they don't overlap, preferring blanks over mutes
|
136
195
|
# returns it like [[start,end,type], [s,e,t]...] type like either :blank and :mute
|
137
196
|
# [[70.0, 73.0, :blank], [378.0, 379.1, :mute]]
|
@@ -172,6 +231,7 @@ class EdlParser
|
|
172
231
|
combined.compact
|
173
232
|
end
|
174
233
|
|
234
|
+
# its reverse: translate_time_to_human_readable
|
175
235
|
def self.translate_string_to_seconds s
|
176
236
|
# might actually already be a float, or int, depending on the yaml
|
177
237
|
# int for 8 => 9 and also for 1:09 => 1:10
|
@@ -196,6 +256,7 @@ class EdlParser
|
|
196
256
|
total
|
197
257
|
end
|
198
258
|
|
259
|
+
# its reverse: translate_string_to_seconds
|
199
260
|
def self.translate_time_to_human_readable seconds, force_hour_stamp = false
|
200
261
|
# 3600 => "1:00:00"
|
201
262
|
out = ''
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'java'
|
2
2
|
|
3
|
+
require 'sane'
|
4
|
+
|
3
5
|
module SensibleSwing
|
4
6
|
|
5
7
|
class MainWindow < javax.swing.JFrame
|
@@ -11,5 +13,15 @@ module SensibleSwing
|
|
11
13
|
writeOut.write(open(full_url).read)
|
12
14
|
writeOut.close
|
13
15
|
end
|
16
|
+
|
17
|
+
def self.download_to_string full_url
|
18
|
+
require 'tempfile'
|
19
|
+
to = Tempfile.new 'abc'
|
20
|
+
download(full_url, to.path)
|
21
|
+
out = File.binread(to.path)
|
22
|
+
to.delete
|
23
|
+
out
|
24
|
+
end
|
25
|
+
|
14
26
|
end
|
15
27
|
end
|
data/spec/edl_parser.spec.rb
CHANGED
@@ -185,14 +185,16 @@ describe EdlParser do
|
|
185
185
|
english(3660 + 0.1).should == "1:01:00.100"
|
186
186
|
end
|
187
187
|
|
188
|
-
it "should auto-select a EDL if it matches a DVD's
|
188
|
+
it "should auto-select a (nested) EDL if it matches a DVD's id" do
|
189
|
+
FileUtils.mkdir_p 'files/edls/a/b/c'
|
190
|
+
File.write('files/edls/a/b/c/yo.txt', %!"disk_unique_id" => "deadbeef|8b27d001"!)
|
189
191
|
EdlParser.single_edit_list_matches_dvd("deadbeef|8b27d001").should_not be nil
|
190
192
|
end
|
191
193
|
|
192
194
|
it "should not auto-select if you pass it nil" do
|
195
|
+
File.write('files/edls/yo', %!"disk_unique_id" => "deadbeef|8b27d001"!)
|
193
196
|
EdlParser.single_edit_list_matches_dvd(nil).should be nil
|
194
197
|
end
|
195
|
-
|
196
198
|
|
197
199
|
EdlParser::EDL_DIR.gsub!(/^.*$/, 'files/edls')
|
198
200
|
|
@@ -228,6 +230,18 @@ describe EdlParser do
|
|
228
230
|
FileUtils.rm_rf 'files/edls/a.txt'
|
229
231
|
FileUtils.rm_rf 'files/edls/b.txt'
|
230
232
|
end
|
231
|
-
end
|
233
|
+
end
|
234
|
+
|
235
|
+
before do
|
236
|
+
FileUtils.mkdir_p 'files/edls'
|
237
|
+
end
|
238
|
+
after do
|
239
|
+
FileUtils.rm_rf 'files/edls'
|
240
|
+
end
|
241
|
+
|
242
|
+
it "should download from imdb if specified and merge" do
|
243
|
+
File.binwrite('files/edls/a.txt', %!"imdb_id" => "tt1727587"!)
|
244
|
+
EdlParser.parse_file('files/edls/a.txt').should == {"blank_outs" => [["0:00:56", "0:00:57"], ["0:01:05", "0:01:14.500"]], "mutes" => [], "imdb_id" => "tt1727587"}
|
245
|
+
end
|
232
246
|
|
233
247
|
end
|
data/todo.inventionzy.txt
CHANGED
@@ -1,34 +1,39 @@
|
|
1
1
|
=== patentzy yes actually do vaguely ordered ===
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
2
|
+
blu-ray OCR
|
3
|
+
more blu-ray stuff: can ID them, can playback (through...mkv? VLC? powerdvd OCr/scripted?)
|
4
|
+
some blu-ray player descriptor somehow
|
5
|
+
accomodate splits vs. blanks and work
|
6
|
+
|
7
|
+
post a demo of it playing back blu-ray edited local computer, +- projector, +- playon (?)
|
8
|
+
could add dragging since we already control the mouse up and down, and movements etc., for example to skip forward etc.
|
9
|
+
a little robot demo thingy that can "click" your remote (or hardware) to fast forward through certain scenes, et al
|
10
|
+
EDL can say "this exact text was at this exact time" to allow for matching with other videos of same content that may have slightly different timestamps/speeds/start time etc.
|
11
|
+
with several, or start one, end one, etc.
|
12
|
+
allow for extra start time offset for videos, if netflix instant has any
|
13
|
+
a way to integrate with cable TV, ex: "this show we know started at 1:01, and its offsets should be this after that point"
|
14
|
+
a video of "recording to broadcast it" (or save it one by one)
|
15
|
+
can "suck in" a large list of EDL's from imdb at build time,
|
16
|
+
and/or a "resync" button, to re-download just the list of updated EDL's/IMDB wiki settings [?]
|
17
|
+
can handle multiple dvdid's et al (same EDL) (mostly done already)
|
18
|
+
it can pull in a DVD based just on the dvd-id "query id, not local? go get it from online to see if the list has been updated since"
|
13
19
|
control VLC RC to overlay a logo dynamically
|
14
20
|
can control volume *and* play other audio
|
21
|
+
can permanently black out certain coords to keep things prettier...et al
|
22
|
+
remove black when they really move the mouse?
|
15
23
|
can add to to supplement EDL + EDL timestamps
|
16
|
-
can pick specific profanities to avoid
|
24
|
+
can pick specific profanities to avoid (I think I demo'ed this already actually)
|
17
25
|
it can scan "playing" instant streaming titles, and/or OCR or take the audio and look for words, to check for profanity.
|
18
|
-
it can examine "output volume level" to auto-
|
26
|
+
it can examine "output volume level" to auto-detect violence scenes.
|
19
27
|
similarly for "questionable" content
|
20
|
-
|
21
|
-
use multiple filters/complex mapping graphs to overlay just the correct
|
22
|
-
user preference "how many down clicks on volume for profanity"
|
28
|
+
it can detect from subtitles (and/or OCR, same thing), questionable content, or violence, based on words used
|
29
|
+
use multiple filters/complex mapping graphs to overlay just the exactly correct overlay: http://ffmpeg.org/libavfilter.html
|
30
|
+
user preference "how many down clicks on volume for profanity" (already possible)
|
23
31
|
make it so it can suck in from "another wiki" the DL's, at package time, somehow (just one)
|
24
32
|
or even just suck in any web file, for starters
|
25
33
|
space -> advance from pause until next edit item?
|
26
34
|
amazon player descriptor, just in case ;P
|
27
35
|
can jerk mouse only every so often (cheap would be to just arbitrarily have it from x to y, demo that)
|
28
|
-
can scan several player descriptors to "pick the right one" (kind of already showed this one)
|
29
|
-
edited streamer screencast demo (the rumor guy demo, like zediva)
|
30
|
-
incorporate the EDL translator from the BYU-I fella
|
31
|
-
post a demo of it playing back blu-ray edited local computer, +- projector, +- playon (?)
|
36
|
+
can scan several player descriptors to "pick the right one" (kind of already showed/did this one)
|
32
37
|
post some playon.tv demo screencast...this should prove all shouldn't it [?]
|
33
38
|
can "control mouse" to drag it to change location (ex: "move down 10 pixels at beginning of movie" LOL)
|
34
39
|
beep at them/warn when not tracking [?]
|
@@ -40,17 +45,17 @@
|
|
40
45
|
don't mute, just almost mute LOL or almost mute and static-ify
|
41
46
|
or combine the two
|
42
47
|
can suck it in "in realtime" from online, and parse it +- from a user editable wiki
|
43
|
-
a UI to select categories,
|
44
|
-
edited blu ray movie playback screencast, as that's apparently not in the patent...
|
48
|
+
a UI to select categories, save as preference, apply it each time at DVD selection time
|
45
49
|
don't use timecodes, use "% of the movie" and "total length" perhaps?
|
46
|
-
look at
|
47
|
-
just pause it, tell them how far to fast forward at that point :P [somewhat already done]
|
50
|
+
look at patents for other ideas? [+- nissim patents?]
|
51
|
+
just pause it, tell them how far to fast forward at that point :P [somewhat already done/showed actually, thanks to mplayer]
|
48
52
|
|
49
|
-
have the user forced to tell me what each digit is, themselves :P
|
53
|
+
have the user forced to tell me what each digit is, themselves, at runtime, for OCR :P
|
50
54
|
the online edl stuff itself (its todo list)
|
51
55
|
javascript API
|
52
|
-
phase
|
53
|
-
phase
|
56
|
+
phase 1: done
|
57
|
+
phase 2: I can accomodate for pausing, too.
|
58
|
+
phase 3: I can re-train based on events of stoppage (buffering et al)
|
54
59
|
phase 4: I can constantly poll and react appropriately to current timestamp
|
55
60
|
post video demo of it streaming to a console device
|
56
61
|
maybe could just "play from x to y" [no exclude info?] instead of "here are the bad parts"
|
@@ -58,3 +63,4 @@
|
|
58
63
|
stage two: chrome plugin for the same, auto-detect, auto-user, auto-download, auto-watch edited :)
|
59
64
|
can insert deleted scenes et al [even external scenes :P] (already showed it somewhat)
|
60
65
|
many others were already completed and done from this list and removed
|
66
|
+
there are some more ideas in the TODO file itself, and/or on the blog sites where I have posted other ideas too
|
data/todo.upconvert
CHANGED
@@ -0,0 +1,91 @@
|
|
1
|
+
<head>
|
2
|
+
|
3
|
+
<script src="http://code.jquery.com/jquery-1.4.2.min.js" type="text/javascript"></script>
|
4
|
+
|
5
|
+
<script type="text/javascript">
|
6
|
+
|
7
|
+
var _gaq = _gaq || [];
|
8
|
+
_gaq.push(['_setAccount', 'UA-4531218-5']);
|
9
|
+
_gaq.push(['_trackPageview']);
|
10
|
+
|
11
|
+
(function() {
|
12
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
13
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
14
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
15
|
+
})();
|
16
|
+
|
17
|
+
</script>
|
18
|
+
|
19
|
+
</head>
|
20
|
+
|
21
|
+
<body>
|
22
|
+
<html>
|
23
|
+
<div style="float:right; margin-right: 50px; margin-left: 20px;">
|
24
|
+
<img src="source/vendor/profs.png" width=150 />
|
25
|
+
|
26
|
+
<h1>Sensible Cinema</h1></div>
|
27
|
+
<pre>
|
28
|
+
Welcome to the (work in progress) home page of Sensible Cinema, the free video scene skipper/muter.
|
29
|
+
Sensible Cinema allows you watch edited movies by applying edit lists (EDL's)
|
30
|
+
(i.e. "mute out" or "cut out" questionable scenes) to DVD's or movie files.
|
31
|
+
|
32
|
+
A description and history/background of sensible-cinema can be found <a href="https://github.com/rdp/sensible-cinema/blob/master/README">here</a>.
|
33
|
+
Don't forget to come back to this page to download it, though (from the "Download" section).
|
34
|
+
|
35
|
+
<h2 style="margin: 0px;">Download</h2>
|
36
|
+
To download, please check the checkbox if you agree to the terms of the
|
37
|
+
license agreement (<a href="http://www.gnu.org/licenses/gpl.html">gplv3</a>) and wish to download and use sensible cinema.
|
38
|
+
|
39
|
+
<input type="checkbox" class="trigger" onClick="$('#comments').toggle(); $('#comments2').toggle();"/> I have read and agree to the license terms and conditions.
|
40
|
+
|
41
|
+
<div id="comments" style="display:none; border-style:dotted; border-width:1px; border-color: #aaaaaa; padding: 5px;">
|
42
|
+
Please download the latest version of sensible cinema from <a href="https://sourceforge.net/projects/sensible-cinema/files/">sourceforge</a>.
|
43
|
+
</div>
|
44
|
+
After download, unzip it. For windows users, that's like:
|
45
|
+
Reveal the file in explorer -> right click on the file -> Extract all -> Extract.
|
46
|
+
Now open the newly created sensible-cinema-x.x.x folder, and run the file "run sensible cinema.bat"
|
47
|
+
You will be initially prompted to accept the license agreement(s) and also install a few
|
48
|
+
(non included, separate ownership/distribution) dependencies.
|
49
|
+
Now insert a DVD you own, and restart sensible cinema to see available options.
|
50
|
+
Note that you want to download from sourceforge not from github.com (github is just the raw source).
|
51
|
+
There is more usage documentation within the "sensible-cinema/documentation" folder.
|
52
|
+
|
53
|
+
<h3>Mac user prerequisites</h3>Mac users will need to install some programs first.
|
54
|
+
|
55
|
+
If you plan on watching any movies in "realtime" then you'll need to download <a href="http://mplayerx.org/#Download">mplayerx</a>.
|
56
|
+
|
57
|
+
If you plan on doing any auto-video editing/saving then you'll need to install <a href="http://www.macports.org/">macports</a>.
|
58
|
+
Install macports, then afterward open the "terminal" Application and execute the following command:
|
59
|
+
$ sudo port install mencoder ffmpeg gocr
|
60
|
+
After this finishes (it will take awhile) you'll be ready to run Sensible Cinema.
|
61
|
+
Note that by installing these, you're accepting their respective licenses/distributions.
|
62
|
+
|
63
|
+
<h3>Upconverting/upscaling DVD/video player</h3>Sensible Cinema comes with its own upscaling/upconverting software DVD/movie file player. See it and the various other things that sensible cinema does <a href="..">here</a>.
|
64
|
+
|
65
|
+
<h3>Available edited movie lists</h3>You can see the (small) current list of DVD edit lists (EDL's) thus far available <a href="https://github.com/rdp/sensible-cinema/tree/master/zamples/edit_decision_lists/dvds">here</a> (all of them created previously by volunteers like you).
|
66
|
+
If yours is already there, then you might be good to go. Just use it.
|
67
|
+
|
68
|
+
If yours isn't there, then we'd ask you to help us by creating and submitting your own EDL (delete/cut list) for your DVD that doesn't have one yet,
|
69
|
+
see the <a href="https://github.com/rdp/sensible-cinema/blob/master/documentation">how to create</a> file for instructions on creating a new delete list. <!-- this is actually a short line -->
|
70
|
+
Then run the file "advanced-edit or create sensible cinema delete list files.bat" to create and edit your new delete list. Sensible Cinema has a few things to help you there.
|
71
|
+
Don't forget to upload your new file back to us when you're done, so others can benefit from your work (see "contact", below).
|
72
|
+
|
73
|
+
That link is the full list--your help is wanted/needed to help it grow!
|
74
|
+
|
75
|
+
<h2 style="margin: 0px;">Other Resources/Contact/Support</h2>
|
76
|
+
Let me know via the <a href="http://groups.google.com/group/sensible-cinema?pli=1">google group</a> or email rogerdpack@gmail.com if you have feedback or have any other ideas/suggestions.
|
77
|
+
<h3>Source code</h3>Source code is all available <a href="http://github.com/rdp/sensible-cinema">here</a>. Notes for potential source code developers are <a href="https://github.com/rdp/sensible-cinema/blob/master/developer_how_to_contribute_to_the_project.txt">here</a>.
|
78
|
+
For (techy or non-techy) contributions, see the contact info in the README file, or write to the google group, above.
|
79
|
+
|
80
|
+
You can see the <a href="source/change_log_with_feature_list.txt">change log with feature list</a>.
|
81
|
+
|
82
|
+
You can get a list of DVD ISO's (creative commons licensed) <a href="releases/dvd_isos">here</a>, if you want to try them out for experimenting/development/research etc.
|
83
|
+
|
84
|
+
Please click the license agreement checkbox at the top to see a list of some old releases (newer ones are found on sourceforge exclusively, old ones here).
|
85
|
+
<div id="comments2" style="display:none;">You can find an old list of older releases, as well as the MS based C <a href="releases/c_player">DVD player</a> listed <a href="releases">in the archives</a>.
|
86
|
+
|
87
|
+
</div>
|
88
|
+
</pre>
|
89
|
+
</html>
|
90
|
+
</body>
|
91
|
+
|