sensible-cinema 0.23.2 → 0.23.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.TXT +1 -1
- data/README +21 -125
- data/Rakefile +9 -3
- data/TODO +48 -60
- data/VERSION +1 -1
- data/bin/sensible-cinema +134 -93
- data/change_log_with_feature_list.txt +4 -0
- data/{development.txt → developer_how_to_contribute_to_the_project.txt} +11 -11
- data/documentation/how_to_create_your_own_delete_lists.txt +67 -0
- data/documentation/how_to_get_files_from_dvd.txt +30 -0
- data/{is_it_legal_to_copy_dvds.txt → documentation/is_it_legal_to_copy_dvds.txt} +79 -79
- data/{experimental_ocr_readme.txt → experimental_online_player_ocr_readme.txt} +0 -0
- data/history_and_related_works_list.txt +93 -0
- data/lib/convert_thirty_fps.rb +12 -0
- data/lib/edl_parser.rb +2 -2
- data/lib/subtitle_profanity_finder.rb +2 -2
- data/lib/swing_helpers.rb +1 -2
- data/sensible-cinema.gemspec +9 -8
- data/spec/notes +5 -3
- data/spec/sensible_cinema_gui.spec.rb +4 -18
- data/spec/subtitle_profanity_finder.spec.rb +3 -3
- data/todo.build_library.txt +1 -1
- data/todo.propaganda +2 -0
- data/www/index.html +12 -8
- metadata +9 -8
- data/how_to_create_your_own_delete_lists.txt +0 -56
- data/how_to_get_files_from_dvd.txt +0 -24
- data/lib/auto_convert.rb +0 -5
data/LICENSE.TXT
CHANGED
@@ -15,4 +15,4 @@ unzip.exe is herein included, under the info-zip license: http://www.info-zip.or
|
|
15
15
|
|
16
16
|
some binary builds of dvdid are also distributed here. See http://www.srcf.ucam.org/~cjk32/dvdid
|
17
17
|
|
18
|
-
See first also the file "is_it_legal_to_copy_dvds.txt" for more information on legal
|
18
|
+
See first also the file "documentation/is_it_legal_to_copy_dvds.txt" for more information on legal implications in your country.
|
data/README
CHANGED
@@ -45,17 +45,17 @@ Enjoy your movies!
|
|
45
45
|
|
46
46
|
== Installation ==
|
47
47
|
|
48
|
-
Installation instructions available here: http://rogerdpack.t28.net/sensible-cinema
|
49
|
-
NB that you want to download
|
48
|
+
Installation and usage instructions available here: http://rogerdpack.t28.net/sensible-cinema
|
49
|
+
NB that you want to download it sourceforge, not from github downloads.
|
50
50
|
|
51
51
|
== Creating Your Own Delete Lists, or modifying previously existing ones ==
|
52
52
|
|
53
|
-
See the
|
53
|
+
See the accompanying documentation/how_to_create_your_own_delete_lists.txt file.
|
54
54
|
|
55
55
|
== Creating an edited DVD ==
|
56
56
|
|
57
|
-
|
58
|
-
|
57
|
+
I don't actually know how to do this I've never burned a DVD.
|
58
|
+
See also is_it_legal_to_copy_dvds.txt for some caveats you should understand first.
|
59
59
|
Windows DVD Maker might help, http://www.dvdflick.net might help.
|
60
60
|
iDVD might help on mac.
|
61
61
|
DO NOT MAKE ILLEGAL COPIES OF DVD's. See is_it_legal_to_copy_dvds.txt.
|
@@ -148,95 +148,14 @@ See also the "Overly Verbose History" section.
|
|
148
148
|
and they told us the model we got was defective, and that the new one was much better and we could get it at a discount, but
|
149
149
|
the next one just died also."
|
150
150
|
|
151
|
-
==
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
Once I discovered all of these previously existing programs, I knew the right elements were ready for
|
160
|
-
something like sensible cinema.
|
161
|
-
|
162
|
-
See also the "related" section, and "motivation" section.
|
163
|
-
|
164
|
-
Originally the project started as a prototype to "watch hulu (online) and netflix instant movies
|
165
|
-
edited" (it uses/used screen snapshots (of specific locations where the digits are expected, based on windows position)
|
166
|
-
and then tracks, using OCR of the on-screen (convert to timestamp), to monitor it for specific times relative
|
167
|
-
to an EDL, and react appropriately.
|
168
|
-
However, this functionality, though working and available, is disabled currently for potential patent
|
169
|
-
issues. Some older released versions had it enabled, but not the later releases.
|
170
|
-
Then I realized I could basically have the same effect by instructing a video player (VLC) to "play from second x to y"
|
171
|
-
ok "now play from z to q muted" etc. (so kind of a stop and go video player, kind of like controlling the remote for you).
|
172
|
-
It basically was implementing Edit Decision Lists (EDL's) using playlists and
|
173
|
-
VLC.
|
174
|
-
I just passed VLC a playlist, it did all the work for me, without any necessary real-time tracking. This seemed patent friendly,
|
175
|
-
so I went with this. There are a few released versions with this feature enabled.
|
176
|
-
They avoid real-time tracking by specifying "play from here to here"
|
177
|
-
not "skip from here to here" as some other editing players do.
|
178
|
-
|
179
|
-
Then it occurred to me that one could grab the several clean segments
|
180
|
-
off a movie file, and piece them together to create an edited clean version ( a la cleanflix ). This also avoids
|
181
|
-
realtime tracking, so I also included this ability.
|
182
|
-
The playlist option is disabled in later releases, as it was deemed too user-non-friendly, and because VLC timing
|
183
|
-
is "different" than standard DVD players, so I decided to just use standardized timing, though it worked fine
|
184
|
-
for VLC playbacks.
|
185
|
-
I replaced it with support for mplayer's EDL format, which works better, and has consistent timing, though is still a bit buggy.
|
186
|
-
|
187
|
-
You can see a full list of other features that have been published and demonstrated
|
188
|
-
in the accompanying file change_log_with_feature_list.txt. Each feature mentioned works
|
189
|
-
in some released version of sensible-cinema though some features have been removed in subsequent versions
|
190
|
-
(they're all available as rubygems).
|
191
|
-
|
192
|
-
Who knows what the future will hold...
|
193
|
-
|
194
|
-
[1] http://www.oreillynet.com/sysadmin/blog/2005/06/make_your_own_phantom_edit_wit.html
|
195
|
-
|
196
|
-
== Related ==
|
197
|
-
|
198
|
-
The concepts I use aren't novel. Some other previously existing related type examples:
|
199
|
-
|
200
|
-
Edited "airplane edit" style movies.
|
201
|
-
Commercial TV (ABC, NBC) show their own (edited) movies.
|
202
|
-
http://en.wikipedia.org/wiki/Linear_video_editing
|
203
|
-
http://en.wikipedia.org/wiki/Edit_decision_list#Systems_supporting_EDL_playback.2C_not_just_EDL_cutting lists a lot of players that support EDL DVD playback in some form or another.
|
204
|
-
http://imdb.com tends to have reasonably good lists of what occurs in movies (find a movie, click on "parent's guide" on the left). Sometimes it even lists the time signatures for events (ex: "Labyrinth" http://www.imdb.com/title/tt0091369/parentalguide) which you could use to translate into a sensible-cinema compatible list.
|
205
|
-
Normal DVD's versus "directors cut" versions of movies (one is at times preferable, content wise)
|
206
|
-
http://en.wikipedia.org/wiki/Edit_decision_list (it's a linear editing tool, after all--so see the vast list of those)
|
207
|
-
Clean Flicks (used to) sell edited movies
|
208
|
-
http://www.videoredo.com/en/index.htm lets you "cut out" offensive content (commercials et al) and burn DVD's from mpeg's/h264 streams
|
209
|
-
http://www.microsoft.com/windows/windowsmedia/howto/articles/device_control.aspx Windows Media Encoder supports EDL's by timestamp
|
210
|
-
http://www.mplayerhq.hu/DOCS/HTML/en/edl.html
|
211
|
-
http://www.sharewareconnection.com/fast-compress-content-and-anti-profanity.htm replaces profanity in web pages with euphemized content.
|
212
|
-
http://www.oreillynet.com/sysadmin/blog/2005/06/make_your_own_phantom_edit_wit.html (mplayer has had this ability for awhile, with no complaints).
|
213
|
-
http://clearplay.com a commercial "filtering" DVD player See the "motivation" section for a description.
|
214
|
-
It does offer a few features that sensible cinema supports but disables, for patent reasons, like automatic (user flexible) content decisions. Ours are manual, etc.
|
215
|
-
http://en.wikipedia.org/wiki/RiffTrax has an interesting idea of "overlaying" audio over the original video, and synchronizing between the two (their re-player does, anyway).
|
216
|
-
http://forum.bsplayer.com/feature-requests-feedback-suggestions/7157-chapter-playlist-scene-cut-3.html
|
217
|
-
http://www.inmatrix.com zoom player's "scene cut editor"
|
218
|
-
http://wiki.xbmc.org/?title=EDL_(commercial_skipping)_and_SceneMarker_support (XBMC's scene cut supporter--also contains links to some other editors' support for EDL's)
|
219
|
-
http://dvdshrink.info "Re-author" mode: to make "movie-only" backups, compilations, combine "flippers",.... DvdShrink has the ability to "crop or cut parts of a title" etc.
|
220
|
-
The VCR with its record button, coupled with the stop+rewind button.
|
221
|
-
http://kb2.adobe.com/cps/191/tn_19151.html Adobe Director MX 2004 can "script" DVD playback.
|
222
|
-
DVD's themselves allow for "scripted" playback of certain content, allowing controls for jumping from location to location, switching audio/video tracks, etc.
|
223
|
-
http://code.google.com/p/movie-content-editor (player written in Python, controls VLC based on subtitles and user-input, using edit decision lists in realtime)
|
224
|
-
http://forums.gbpvr.com/showthread.php?10606-Automated-Cutting-and-Transcoding-Guide-Using-Mencoder/page45
|
225
|
-
http://www.imdb.com/swiki/special?ParentalGuideHelp (search for "scene description")
|
226
|
-
http://www.mythtv.org/wiki/Removing_Commercials
|
227
|
-
showanalyzer http://www.dragonglobal.biz/showanalyzer.html and comskip analyze videos to look for "segments to cut out" automatically (commercials, in this case, but the principle still applies)
|
228
|
-
Old-school: using the remote control with the pause, mute, stop, fast forward, and play buttons, along with previous knowledge of "questionable" scene locations
|
229
|
-
The scissors and old VHS tapes (Clean Flicks' origin, if I remember correctly). http://www.familysafemedia.com/home_movie_editor.html (was a helper kit for cutting VHS tape)
|
230
|
-
Windows Movie Maker. Allows for users to cut and copy scenes of movies. Really any editor can do this.
|
231
|
-
http://forum.videolan.org/viewtopic.php?f=7&t=56998 VLC Media Player using EDL's via playlists
|
232
|
-
Corel WinDVD has "Quick Clip" settings for capturing from DVD.
|
233
|
-
Microsoft's built-in magnifier basically copies DVD's screen output if mouse is placed over playing DVD.
|
234
|
-
http://superuser.com/questions/85278/how-can-i-cut-scenes-out-of-a-dvd
|
235
|
-
http://blog.josephhall.com/2008/09/command-line-dvd-authoring-part-1.html
|
236
|
-
AviSynth can script dvd playback http://forum.doom9.org/archive/index.php/t-109558.html
|
237
|
-
ps3 media server has edl support: https://github.com/chocolateboy/PMS-EDL maybe would work with DVD's dunno
|
238
|
-
Anydvd HD's "magic file replacement" for DVD's/blu-ray's
|
239
|
-
RiffTrax allows for an audio "overlay" to a DVD playback, have their own player to coordinate the two.
|
151
|
+
== History ==
|
152
|
+
|
153
|
+
See the file history_and_related_works_list.txt for an overly verbose history.
|
154
|
+
Also see the file change_log_with_feature_list.txt.
|
155
|
+
|
156
|
+
== Related Works ==
|
157
|
+
|
158
|
+
See the file history_and_related_works_list.txt
|
240
159
|
|
241
160
|
== License ==
|
242
161
|
|
@@ -249,30 +168,7 @@ See first also the file "is_it_legal_to_copy_dvds.txt" for more information on l
|
|
249
168
|
|
250
169
|
== Troubleshooting ==
|
251
170
|
|
252
|
-
|
253
|
-
Baking soda toothpaste might help with cleaning it.
|
254
|
-
If it still errs, report it, along with a screen snapshot and steps of
|
255
|
-
how to reproduce the problem, preferably. See the feedback section.
|
256
|
-
|
257
|
-
It can fail also because a deletion is past end of DVD, or
|
258
|
-
Also make sure you aren't out of disk space.
|
259
|
-
|
260
|
-
Try playback in "VLC Media Player"
|
261
|
-
|
262
|
-
You try to play back a sensible cinema-ized video file and it plays back without
|
263
|
-
audio or video (example: windows media player)?
|
264
|
-
|
265
|
-
This probably means you're using windows media player, and don't have "codecs" installed
|
266
|
-
to handle this type of audio. Not to fear, just download the "ffdshow tryouts" (google for it)
|
267
|
-
and, when it gives you the option, be sure to check "mpeg2 video" and then
|
268
|
-
it should "just work." You could also optionally just play the file in VLC Media Player or smplayer
|
269
|
-
(there's a button for that). Installing "AC3Filter" may help if you can hear no audio.
|
270
|
-
Really VLC Media Player is your best bet though.
|
271
|
-
|
272
|
-
If the end result picture is too grainy/pixelated or if the overall process is too slow, let me know and I'll work on
|
273
|
-
making it better. No really, I have some ideas, but want to see if there's need first for improvement in those areas.
|
274
|
-
|
275
|
-
Finally, report back! If there are problems that arise, I want to hear about them so we can help you through it.
|
171
|
+
See the file documentation/troubleshooting.txt, or contact (see the feedback/development section).
|
276
172
|
|
277
173
|
== Thanks ==
|
278
174
|
|
@@ -284,21 +180,21 @@ the authors and maintainers of said libraries, and anybody else I forgot to ment
|
|
284
180
|
|
285
181
|
== Feedback/Development ==
|
286
182
|
|
287
|
-
Feedback, including feature requests, comments, etc. welcome:
|
183
|
+
Feedback, including feature requests, comments, etc. all welcome:
|
288
184
|
|
289
|
-
Mailing List: http://groups.google.com/group/sensible-cinema
|
185
|
+
Mailing List: http://groups.google.com/group/sensible-cinema, or just mail to sensible-cinema@googlegroups.com
|
290
186
|
|
291
187
|
If you're a developer and want to help out with programmming or look and feel, etc., please do!
|
292
|
-
See development.txt
|
188
|
+
See development.txt file, and also http://github.com/rdp/sensible-cinema
|
293
189
|
|
294
190
|
If you want to donate something, please consider donating to a charity of your choice.
|
295
|
-
No really.
|
191
|
+
No really.
|
296
192
|
|
297
193
|
== Competition/use of files ==
|
298
194
|
|
299
195
|
Note that competition/use of files from sensible cinema is welcome!
|
300
196
|
|
301
|
-
In fact, the current end goal is to publish the delete lists (EDL's)
|
302
|
-
own API, meaning that even "for profit" users can use them for whatever other use they want, hopefully
|
197
|
+
In fact, the current end goal is to publish the delete lists (EDL's) to a separate repository with its
|
198
|
+
own API under the CC license, meaning that even "for profit" users can use them for whatever other use they want, hopefully
|
303
199
|
good uses :) More direct direct competitors are also welcome here. I only made this because I had to
|
304
|
-
and nothing like it existed, so if something else springs up, I'm happy to use it instead.
|
200
|
+
and nothing like it existed, so if something else springs up, I'm actually happy to use it instead, too.
|
data/Rakefile
CHANGED
@@ -119,17 +119,23 @@ task 'zip' do
|
|
119
119
|
end
|
120
120
|
|
121
121
|
def sys arg
|
122
|
-
|
122
|
+
3.times {
|
123
|
+
if system arg
|
124
|
+
return
|
125
|
+
end
|
126
|
+
}
|
127
|
+
raise arg + ' failed 3x!'
|
123
128
|
end
|
124
129
|
|
125
130
|
task 'deploy' do
|
126
131
|
name = 'sensible-cinema-' + cur_ver + ".zip"
|
127
132
|
p 'copying to ilab'
|
128
133
|
sys "scp #{name} rdp@ilab1.cs.byu.edu:~/incoming"
|
134
|
+
p 'creating sf shell'
|
135
|
+
sys "ssh rdp@ilab1.cs.byu.edu 'ssh rogerdpack,sensible-cinema@shell.sourceforge.net create'" # needed for the next command to be able to work [weird]
|
129
136
|
p 'creating sf dir'
|
130
|
-
sys "ssh rdp@ilab1.cs.byu.edu 'ssh -t rogerdpack,sensible-cinema@shell.sourceforge.net create'" # needed for the next command to work.
|
131
137
|
sys "ssh rdp@ilab1.cs.byu.edu 'ssh rogerdpack,sensible-cinema@shell.sourceforge.net \"mkdir /home/frs/project/s/se/sensible-cinema/#{cur_ver}\"'"
|
132
|
-
p 'copying into sf'
|
138
|
+
p 'copying into sf from ilab'
|
133
139
|
sys "ssh rdp@ilab1.cs.byu.edu 'scp ~/incoming/#{name} rogerdpack,sensible-cinema@frs.sourceforge.net:/home/frs/project/s/se/sensible-cinema/#{cur_ver}/#{name}'"
|
134
140
|
p 'successfully deployed to sf only! ' + cur_ver
|
135
141
|
end
|
data/TODO
CHANGED
@@ -6,13 +6,13 @@
|
|
6
6
|
|
7
7
|
=== loose ordering/eventually ===
|
8
8
|
linearize [?] hmm...
|
9
|
-
re-update todo/all docu
|
9
|
+
re-update todo/all docu/user feedbacks
|
10
10
|
create web site/api-ify
|
11
11
|
LLC
|
12
12
|
if...back off to just the ffmpeg (plus an "[A,B]" viewer) only...but for now stick with just DVD playback [?] until people want more...
|
13
13
|
no propaganda...
|
14
14
|
no auto subtitles...
|
15
|
-
|
15
|
+
fix VLC dvdnav itself +- mplayer DVD EDL
|
16
16
|
|
17
17
|
== high prio like blocking bugs ==
|
18
18
|
|
@@ -25,60 +25,57 @@
|
|
25
25
|
url -> url inference [hopefully this is cake...]
|
26
26
|
fix the failing 9 digit test the fancy shmancy way :P
|
27
27
|
can pass in a profanity command line
|
28
|
-
can handle dual
|
28
|
+
can handle dual dvdid's
|
29
29
|
youtube: use the javascript API somehow, like http://universalsubtitles.org/en does
|
30
30
|
phase 1: does they use inferred timestamp? can I use that generally, too? [do phase 1--publish simple javascript demo of it muting for awhile after startup]
|
31
31
|
just in case youtube takes over the world
|
32
32
|
|
33
|
-
== yes do ordered ==
|
33
|
+
== yes do ordered in conjunction with the above ==
|
34
34
|
try buy delete lists from all x,y,z [?] maybe ask for them for free first? ()
|
35
|
+
http://www.familysafemovies.com
|
36
|
+
cleanflix (earl? that guy [John webster http://www.amazon.com/Make-Edited-Movies-ebook/dp/B004EYT3BU]?)
|
37
|
+
cougar video (that looks tough...)
|
38
|
+
http://www.cleanplaydvds.com
|
39
|
+
cleanfilms.com (now dead) "clean films"
|
40
|
+
that one on state street (John webster?)
|
41
|
+
http://www.edited-movies.com/buy-edited-movies/
|
42
|
+
http://www.clean-edited-movies.com/clean_flicks.htm ray lines ?
|
43
|
+
maybe more listed here: http://www.clean-edited-movies.com/clean_flicks.htm
|
44
|
+
Almost overnight, competitors to CleanFlicks popped up with twists on the CleanFlicks brand -- CleanFilms, Clean Flix, Clean-Flicks, Family Focus Films
|
45
|
+
family flix
|
46
|
+
http://theeditedmovieencyclopedia.blogspot.com/2008/08/clean-play-dvds-grand-opening-e-mail.html has grande list
|
35
47
|
next timing thing (notes file)
|
36
48
|
|
37
|
-
== yes do, un-ordered currently, from the various release options ==
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
if they disdain to choose a filename the whole thing exits.
|
45
|
-
an "advanced" screen for obscure things...
|
46
|
-
maybe after tooltips? I need some user feedback here...
|
47
|
-
note realtime: clearplay
|
48
|
-
tell them "I need it as a raw mpeg file, use makemkv with tsmuxer to transform it to an mpeg, or use mplayer to grab it"
|
49
|
-
"just look at the title track in the EDL, then..."
|
49
|
+
== yes do, un-ordered currently, from the various future release options ==
|
50
|
+
don't use eval!
|
51
|
+
warn/redirect if wrong looking file extension...
|
52
|
+
add the "create .edl file for xbmc et al" button
|
53
|
+
add a "watch edited from file" option...don't *force* too...?
|
54
|
+
check if some other buttons are outdated...
|
55
|
+
unit tests (all)
|
56
|
+
if they disdain to choose a save to filename the whole thing exits.
|
50
57
|
tell them "to edit easily..."
|
51
|
-
|
52
|
-
double check--are my ffmpeg splits really really really the same as mplayer's EDL splits? really?
|
53
|
-
"hardware DVD player/commercial DVD software"
|
58
|
+
double check--are my ffmpeg splits really really really the same as mplayer's EDL DVD splits? really?
|
54
59
|
"you could watch it under mplayer with the OSD turned on"
|
55
60
|
[+ button for same?]
|
56
|
-
"you could watch it with a normal DVD player (hardware or software, a la powerDDVD et al)"
|
57
|
-
add button for "convert from DVD Player [mplayer OSD, commercial]" to accurate timestamp [single timestamp]
|
58
|
-
"you could edit it in basically any editor--they are usually pretty accurate"
|
59
|
-
"you could edit your file "raw" file "with avidemux, except video will be slightly off, but audio will be on"
|
60
|
-
"VLC [or any GUI] is always slightly off."
|
61
61
|
can I avoid requiring use of tsmuxer first?
|
62
|
+
auto tsmuxer/mediainfo [yikes]?
|
63
|
+
MUXOPT --no-pcr-on-video-pid --new-audio-pes --vbr --vbv-len=500 V_MPEG-2, "G:\Video\c\title00.mkv", fps=23.976, ar=As source, track=1, lang=eng A_AC3, "G:\Video\c\title00.mkv", track=2, lang=eng
|
62
64
|
check with blu-ray...do they match timing-wise? sub-title wise?
|
63
65
|
donate tsmuxer, makemkv, http://ffmpeg.zeranoe.com/builds, mulder [?] smplayer
|
64
|
-
auto tsmuxer/mediainfo [yikes]?
|
65
|
-
MUXOPT --no-pcr-on-video-pid --new-audio-pes --vbr --vbv-len=500 V_MPEG-2, "G:\Video\c\title00.mkv", fps=23.976, ar=As source, track=1, lang=eng A_AC3, "G:\Video\c\title00.mkv", track=2, lang=eng
|
66
|
-
instructions: reference the sintel DVD :) (+download it from my site here)
|
67
66
|
add an mencoder convert with mplayer_breaks button :P
|
68
67
|
can I just use mencoder -hr-edl-seek (off mpeg) to avoid the fulli phase? please? does it work super-accurately, after that?
|
69
68
|
maybe just under an "advanced" window...
|
70
69
|
youtube/hulu timings
|
71
|
-
Watch...unedited smplayer button doesn't play from the right device if you have two :P
|
72
|
-
get LLC before a "real" domain name
|
73
|
-
always force them to have a DVD in the drive :P
|
74
|
-
upconverter
|
75
70
|
split LLC's website+consumer
|
76
|
-
|
77
|
-
|
71
|
+
get LLC before a "real" domain name
|
72
|
+
always force them to have a DVD in the drive :P ?
|
73
|
+
upconverter
|
74
|
+
employee instructions: watch @ realtime after profanity filter first pass :P
|
78
75
|
clear runnings
|
79
76
|
have ben and chris test it out, have it work, then ask about video quality
|
80
|
-
me try
|
81
|
-
try disney digital copy
|
77
|
+
me try
|
78
|
+
try disney digital copy
|
82
79
|
C player:
|
83
80
|
use DVD navigator
|
84
81
|
just use mplayer EDL syntax, plus a title track (or just detect track change, if long enough, assume... :P) :)
|
@@ -94,29 +91,16 @@
|
|
94
91
|
can come out of full screen more easily :P
|
95
92
|
note pay for XP http://windows.microsoft.com/en-US/windows/downloads/windows-media-player/plug-ins search for the cheapest
|
96
93
|
note to them windows vista/7: use ac3filter [?]
|
97
|
-
donate menumeter $
|
98
|
-
|
99
|
-
fix/create the "play previously created edited file for current DVD" button
|
100
|
-
vendorize smplayer * 2
|
101
|
-
test if latest smplayer can work with edl and seek [?]
|
102
|
-
be able to use smplayer, never just mplayer [yikes]
|
103
|
-
apparently just using webdl is like r30369 yipers
|
94
|
+
donate menumeter $ makemkv
|
95
|
+
reate the "play previously created edited file for current DVD" button
|
104
96
|
note better to previewer "you are about to preview these specific edits..." ?
|
105
97
|
ask for more beta testers for use, ask for more beta testers for creation, too
|
106
|
-
|
98
|
+
beta release: rinse and repeat with various ppl
|
107
99
|
youtube videos -> new account name
|
108
|
-
note "pay us/somebody to do it for you on the google group"?
|
109
|
-
note "this is the full list--your help is wanted/needed"
|
110
100
|
create a semi-accurate phantom edit EDL
|
111
101
|
http://www.chefelf.com/forums/index.php?showtopic=6176
|
112
102
|
karlie?
|
113
103
|
inventionzy: blu-ray OCR
|
114
|
-
accomodate 2 disk unique id's...yeah
|
115
|
-
don't exit program if they don't select a disk originally :) e.g. if they cancel out of "Please pick a DVD Delete list file"
|
116
|
-
tell them "you can open the file for more specific editing accuracy of timestamps via microsoft Windows Movie Maker" or whatever it is (try it out first :P)
|
117
|
-
7: Windows Live Movie Maker
|
118
|
-
previous: Windows Movie Maker
|
119
|
-
re-run with several DVD's
|
120
104
|
port to mac OS X--try everything out (all buttons), make sure all works...
|
121
105
|
appears that, for now, have to just use mplayer dvd://
|
122
106
|
ppc dvdid?
|
@@ -124,11 +108,8 @@
|
|
124
108
|
bundle a copy of smplayer locally?
|
125
109
|
typically delete unedited.fulli file automatically
|
126
110
|
except if it's a specific scene run test...
|
127
|
-
the final "edited.avi" really "could/should" be playable in WMP...
|
128
|
-
|
129
|
-
use smplayer with my mplayer always...unless I'm moving away from that...
|
130
|
-
@makemkv: show us the title numbers, and number them *by those*
|
131
|
-
generic EDL run through should be through smplayer...do I need the other way around, even?
|
111
|
+
the final "edited.avi" really "could/should" be playable in WMP...if possible
|
112
|
+
generic/consumer EDL run through should be through smplayer...do I need the other way around, even?
|
132
113
|
|
133
114
|
== other lists ==
|
134
115
|
|
@@ -142,7 +123,8 @@
|
|
142
123
|
canceling from the "dvd id" box exits the whole app LOL
|
143
124
|
|
144
125
|
== DVD-realtime backlog once do, now not do, unordered ==
|
145
|
-
|
126
|
+
investigate boxee edl (just fer fun...maybe possible?) http://getsatisfaction.com/boxee/topics/commercial_skipping_edl_support
|
127
|
+
investigate xbmc dvd edl
|
146
128
|
for mplayer realtime it needs to start early, but end on time
|
147
129
|
mplayer instructions are obscured
|
148
130
|
mplayer EDL allow this:
|
@@ -158,12 +140,17 @@
|
|
158
140
|
can I make playback more smooth by upping mplayer cache? does smplayer pass it a parameter?
|
159
141
|
lua VLC EDL plugin? LOL yeah right.
|
160
142
|
investigate: can I use zoomplayer max?
|
143
|
+
investigate dvdrsbvdl (windows media center edl plugin)
|
161
144
|
|
162
145
|
== DVD/DVD-realtime backlog (totally unordered, some very low prio, basically all never do) ==
|
163
|
-
|
146
|
+
@makemkv: show us the title numbers, and number them *by those*
|
164
147
|
@macports: set notestxt \
|
165
148
|
13 "The MPlayer developers do not believe in making regular releases. \
|
166
149
|
14 You are likely better off using the mplayer-devel port." *before* and after (?) (double check it--would one way work ok? mplayer)
|
150
|
+
can I use mplayer's "-edlout" to simplify something something, or maybe I should slave mode mplayer for my own means of the same?
|
151
|
+
create real plugins for boxee, XBMC et al
|
152
|
+
can "blur out" scenes, or specific pixels on frames, like that guy bleeping out his own profanity just lips plus bleep
|
153
|
+
a new button (maybe just in advanced mode?) "play EDL mplayer from file (no transcoding)" [if anybody ever would want/need it--seems related to the new c-based player kind of...?]
|
167
154
|
if it doesn't parse a file you choose it annoyingly loops *forever* "error pooping" "error pooping" [?]
|
168
155
|
"real" dvdid for blu-ray, can work with them (once I figure out timing info...)
|
169
156
|
accept the "user inputable" profanities, based on the DVD (like "thor" or what not...)
|
@@ -340,7 +327,8 @@ warn when labels both exist and don't match...
|
|
340
327
|
@mplayer warn before overwrite
|
341
328
|
@mplayer you cannot convert mkv files correctly you silly!
|
342
329
|
bounty dvdnav
|
343
|
-
fix dvdnav?
|
330
|
+
fix dvdnav stuffs?
|
331
|
+
ask swank if individuals can rent too?
|
344
332
|
|
345
333
|
== random non-DVD backlog ... or never do DVD. note: just plow forward, to "grab" available ideas...except that for now, just what *I* plan on needing for myself (filters for what I need/want). ==
|
346
334
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.23.
|
1
|
+
0.23.3
|
data/bin/sensible-cinema
CHANGED
@@ -30,12 +30,14 @@ raise 'need jruby' unless OS.java?
|
|
30
30
|
raise 'need newer jruby!' unless RUBY_DESCRIPTION >= 'jruby 1.6.0' # may not need this since we still have to accomodate for so many oddities :P
|
31
31
|
|
32
32
|
alias system_original system
|
33
|
+
require 'fileutils'
|
33
34
|
require_relative '../lib/mencoder_wrapper'
|
34
35
|
require_relative '../lib/storage'
|
35
36
|
require_relative '../lib/edl_parser'
|
36
37
|
require_relative '../lib/mplayer_edl'
|
37
38
|
require_relative '../lib/play_audio'
|
38
39
|
require_relative '../lib/subtitle_profanity_finder'
|
40
|
+
require_relative '../lib/convert_thirty_fps'
|
39
41
|
|
40
42
|
require 'tmpdir'
|
41
43
|
require_relative '../lib/swing_helpers'
|
@@ -79,7 +81,7 @@ module SensibleSwing
|
|
79
81
|
# currently advanced mode only *adds* buttons
|
80
82
|
def new_jbutton title, only_on_create_mode, tooltip = nil
|
81
83
|
button = JButton.new title
|
82
|
-
button.tool_tip= tooltip
|
84
|
+
button.tool_tip = tooltip
|
83
85
|
button.set_bounds(44, @starting_button_y, @button_width, 23)
|
84
86
|
add = true
|
85
87
|
if we_are_in_create_mode
|
@@ -96,19 +98,29 @@ module SensibleSwing
|
|
96
98
|
button
|
97
99
|
end
|
98
100
|
|
99
|
-
def
|
100
|
-
|
101
|
+
def add_text_line line
|
102
|
+
return unless we_are_in_create_mode
|
103
|
+
jlabel = JLabel.new line
|
104
|
+
happy = Font.new("Tahoma", Font::PLAIN, 11)
|
105
|
+
jlabel.setFont(happy)
|
106
|
+
jlabel.set_bounds(44,@starting_button_y ,460,14)
|
107
|
+
@panel.add jlabel
|
108
|
+
increment_button_location 18
|
109
|
+
end
|
110
|
+
|
111
|
+
def increment_button_location how_much = 30
|
112
|
+
@starting_button_y += how_much
|
101
113
|
end
|
102
114
|
|
103
115
|
def force_accept_license_first
|
104
116
|
require_blocking_license_accept_dialog 'Sensible Cinema', 'gplv3', 'http://www.gnu.org/licenses/gpl.html', 'Sensible Cinema license agreement',
|
105
117
|
"Sensible Cinema is distributed under the gplv3.\nBY CLICKING \"accept\" YOU SIGNIFY THAT YOU HAVE READ, UNDERSTOOD AND AGREED TO ABIDE BY THE TERMS OF THIS AGREEMENT"
|
106
|
-
require_blocking_license_accept_dialog 'Sensible Cinema', 'is_it_legal_to_copy_dvds.txt file', File.expand_path(File.dirname(__FILE__) + "/../is_it_legal_to_copy_dvds.txt"),
|
107
|
-
'is_it_legal_to_copy_dvds.txt file', 'I acknowledge that I have read, understand, accept and agree to abide by the implications noted in the is_it_legal_to_copy_dvds.txt file'
|
118
|
+
require_blocking_license_accept_dialog 'Sensible Cinema', 'is_it_legal_to_copy_dvds.txt file', File.expand_path(File.dirname(__FILE__) + "/../documentation/is_it_legal_to_copy_dvds.txt"),
|
119
|
+
'is_it_legal_to_copy_dvds.txt file', 'I acknowledge that I have read, understand, accept and agree to abide by the implications noted in the documentation/is_it_legal_to_copy_dvds.txt file'
|
108
120
|
Storage['main_license_accepted'] = VERSION
|
109
121
|
end
|
110
122
|
|
111
|
-
Storage = Storage.new("
|
123
|
+
Storage = Storage.new("sensible_cinema_storage")
|
112
124
|
|
113
125
|
def initialize
|
114
126
|
super "Sensible-Cinema #{VERSION} (GPL)"
|
@@ -123,10 +135,10 @@ module SensibleSwing
|
|
123
135
|
panel.set_layout nil
|
124
136
|
add panel # why can't I just slap these down?
|
125
137
|
|
126
|
-
jlabel = JLabel.new 'Welcome to Sensible Cinema!' + (we_are_in_create_mode ? " Hover over buttons for descriptions." : "")
|
138
|
+
jlabel = JLabel.new 'Welcome to Sensible Cinema!' + (we_are_in_create_mode ? " Hover over buttons for tooltip \"help\" descriptions." : "")
|
127
139
|
happy = Font.new("Tahoma", Font::PLAIN, 11)
|
128
140
|
jlabel.setFont(happy)
|
129
|
-
jlabel.set_bounds(44,44,
|
141
|
+
jlabel.set_bounds(44,44,460,14)
|
130
142
|
panel.add jlabel
|
131
143
|
@starting_button_y = 120
|
132
144
|
@button_width = 400
|
@@ -139,7 +151,7 @@ module SensibleSwing
|
|
139
151
|
do_mplayer_edl
|
140
152
|
}
|
141
153
|
|
142
|
-
@create = new_jbutton( "Create edited copy of DVD on Your Hard Drive
|
154
|
+
@create = new_jbutton( "Create edited copy of a DVD file on Your Hard Drive", false)
|
143
155
|
@create.tool_tip = <<-EOL
|
144
156
|
This grabs from your DVD and creates a new file on your hard disk like dvd_name_edited.mpg for you to watch later.
|
145
157
|
The file you create will contain the whole movie edited.
|
@@ -149,17 +161,19 @@ module SensibleSwing
|
|
149
161
|
do_copy_dvd_to_hard_drive false
|
150
162
|
}
|
151
163
|
|
152
|
-
@create_new_edl_for_current_dvd = new_jbutton("Create new Delete List for a
|
153
|
-
"If your DVD doesn't have an EDL created for it, this will be your first step--create
|
164
|
+
@create_new_edl_for_current_dvd = new_jbutton("Create new Delete List for a DVD", true,
|
165
|
+
"If your DVD doesn't have an EDL created for it, this will be your first step--create an EDL file for it.")
|
154
166
|
@create_new_edl_for_current_dvd.on_clicked do
|
155
167
|
create_brand_new_edl
|
156
168
|
end
|
157
169
|
|
158
|
-
@open_help_file = new_jbutton("
|
159
|
-
|
170
|
+
@open_help_file = new_jbutton("View Sensible Cinema Documentation", false).on_clicked do
|
171
|
+
system_blocking("explorer \"#{__DIR__.to_filename}..\\documentation\"") rescue nil # says it fails in error...
|
160
172
|
end
|
161
173
|
|
162
|
-
|
174
|
+
add_text_line 'Realtime create Options:'
|
175
|
+
|
176
|
+
@open_list = new_jbutton("Open/Edit a previously created Delete List", true, "If your DVD has a previously existing EDL for it, you can open it to edit it with this button.")
|
163
177
|
@open_list.on_clicked {
|
164
178
|
dialog = FileDialog.new(self, "Pick file to edit")
|
165
179
|
dialog.set_directory EDL_DIR
|
@@ -175,7 +189,7 @@ module SensibleSwing
|
|
175
189
|
This is useful if you want to just kind of watch the movie to enjoy it, and look for scenes to cut out.
|
176
190
|
You can use the built-in OSD (on-screen-display) to see what time frame the questionable scenes are at
|
177
191
|
(type "o" to toggle it). However, just realize that the OSD is in 30 fps, and our time stamps are all in 29.97
|
178
|
-
fps, so you'll need to convert it to be able to use it in a file.
|
192
|
+
fps, so you'll need to convert it (the convert timestamp button) to be able to use it in a file.
|
179
193
|
EOL
|
180
194
|
@play_smplayer.on_clicked {
|
181
195
|
play_dvd_smplayer_unedited
|
@@ -183,21 +197,79 @@ module SensibleSwing
|
|
183
197
|
|
184
198
|
@play_mplayer_raw = new_jbutton( "Watch full DVD unedited (realtime mplayer)", true)
|
185
199
|
@play_mplayer_raw.tool_tip = <<-EOL
|
186
|
-
This is also useful for comparing subtitle files to see
|
187
|
-
|
188
|
-
If you turn on subtitles (v button), then compare your file at say, the 1 hour mark, or 2 hour mark,
|
200
|
+
This is also useful for comparing subtitle files to see if they have accurate timings.
|
201
|
+
If you turn on subtitles (use the v button), then compare your srt file at say, the 1 hour mark, or 2 hour mark,
|
189
202
|
with the subtitles that mplayer displays, it *should* match exactly with the output in the command line,
|
190
|
-
like "
|
203
|
+
like "V: 3600.0" should match your subtitle line "01:00:00,000 --> ..."
|
191
204
|
EOL
|
192
205
|
@play_mplayer_raw.on_clicked {
|
193
206
|
play_dvd_smplayer_unedited true
|
194
207
|
}
|
195
208
|
|
196
|
-
# @watch_created_file = new_jbutton( "Watch edited file
|
209
|
+
# @watch_created_file = new_jbutton( "Watch the edited file version of DVD", false).on_clicked {
|
197
210
|
# raise 'todo' # TODO
|
198
211
|
# }
|
199
212
|
|
200
|
-
|
213
|
+
# TODO "Watch a file using an EDL on it"
|
214
|
+
|
215
|
+
|
216
|
+
@display_unique = new_jbutton( "Display current DVD's unique ID", true )
|
217
|
+
@display_unique.tool_tip = "This is useful to setup a DVD's 'unique ID' within an EDL for it. \nIf your EDL doesn't have a line like disk_unique_id => \"...\" then you will want to run this to be able to add that line in."
|
218
|
+
@display_unique.on_clicked {
|
219
|
+
drive, volume, dvd_id = choose_dvd_drive
|
220
|
+
# display it, allow them to copy and paste it out
|
221
|
+
show_copy_pastable_string("#{drive} #{volume} for your copying+pasting pleasure (highlight, then ctrl+c to copy)\n
|
222
|
+
This is USED to identify a disk to match it to its EDL, later.", "\"disk_unique_id\" => \"#{dvd_id}\",")
|
223
|
+
}
|
224
|
+
|
225
|
+
@convert_timestamp = new_jbutton( "Convert timestamp from DVD player time to EDL time", true)
|
226
|
+
@convert_timestamp.tool_tip=<<-EOL
|
227
|
+
Our EDL's assume 29.97 fps (which is what a DVD is). Unfortunately most hardware/commercial DVD players
|
228
|
+
assume that the DVD is 30 fps, which means that if you watch a movie with them, then use those timestamps
|
229
|
+
for your EDL file, you will be off, at the end of a 2 hour film, by 8 seconds. So all your edits will be wrong.
|
230
|
+
How to fix: convert your times from "DVD player" time to "EDL accurate" time by using this button.
|
231
|
+
This is necessary for hardware DVD player timestamps, PowerDVD, Windows Media Player (playing a DVD),
|
232
|
+
but not necessary for smplayer timestamps (or mplayer's "V: 3600" in the command line), which are already 29.97.
|
233
|
+
smplayer's on-screen-display (the 'o' key) is accurate (and doesn't suffer from dvd_mplayer_splits)
|
234
|
+
but is 30 fps, so timestamps would need to be converted.
|
235
|
+
Dont use VLC for DVD timestamps at all--it can get up to 30s off! VLC playing back a file is usually pretty accurate to 29.97.
|
236
|
+
In general, GUI's like VLC or smplayer are always a tidge off (maybe 0.3s) from the right timestamp, so take that into consideration.
|
237
|
+
Mplayers "V: 3600" is usually right on, however.
|
238
|
+
EOL
|
239
|
+
@convert_timestamp.on_clicked {
|
240
|
+
thirty_fps = get_user_input("Enter your DVD (30 fps) timestamp, I'll convert it to 29.97 (usable in EDL's):", "1:00:00.1")
|
241
|
+
thirty_fps_in_seconds = EdlParser.translate_string_to_seconds thirty_fps
|
242
|
+
twenty_nine_seven_fps = ConvertThirtyFps.from_thirty(thirty_fps_in_seconds)
|
243
|
+
human_twenty_nine_seven = EdlParser.translate_time_to_human_readable twenty_nine_seven_fps, true
|
244
|
+
show_copy_pastable_string("29.97 (sensible cinema usable) value would be: ", human_twenty_nine_seven)
|
245
|
+
}
|
246
|
+
|
247
|
+
@parse_srt = new_jbutton("Parse a subtitle file (.srt) to detect profanities", true)
|
248
|
+
@parse_srt.tool_tip = <<-EOL
|
249
|
+
You can download a .srt file and parse it to automaticaly search for profanities.
|
250
|
+
Basically download it from opensubtitles.org (possibly from other places, too),
|
251
|
+
(enter dvd name in the search box, click a result, click one from the list with an English flag, then click 'Download(zip)')
|
252
|
+
Once you download the zip, unzip it, and then compare the timestamps in it with those on the DVD (see the button "Watch DVD unedited (realtime mplayer)")
|
253
|
+
EOL
|
254
|
+
@parse_srt.on_clicked {
|
255
|
+
fc = new_filechooser
|
256
|
+
fc.set_title "Pick srt file:"
|
257
|
+
if old_dir = Storage['old_srt_dir']
|
258
|
+
fc.set_current_directory JFile.new(old_dir)
|
259
|
+
end
|
260
|
+
filename = fc.go
|
261
|
+
Storage['old_srt_dir'] = fc.get_current_directory.to_s
|
262
|
+
Storage['start_time']
|
263
|
+
|
264
|
+
parsed = SubtitleProfanityFinder.edl_output [filename]
|
265
|
+
File.write(EdlTempFile, "# add these into your mute section if they apply\n" + parsed)
|
266
|
+
open_file_to_edit_it EdlTempFile
|
267
|
+
}
|
268
|
+
|
269
|
+
|
270
|
+
add_text_line 'Create Options that first create a local intermediary file unless it already exists:'
|
271
|
+
|
272
|
+
@preview_section = new_jbutton( "Preview a certain time frame from fulli file (edited)", true )
|
201
273
|
@preview_section.tool_tip = <<-EOL
|
202
274
|
This allows you to preview an edit easily.
|
203
275
|
It is the equivalent of saying \"watch this file edited from exactly minute x second y to minute z second q"
|
@@ -207,28 +279,34 @@ module SensibleSwing
|
|
207
279
|
do_copy_dvd_to_hard_drive true
|
208
280
|
}
|
209
281
|
|
210
|
-
@preview_section_unedited = new_jbutton("Preview a certain time frame (unedited)", true)
|
282
|
+
@preview_section_unedited = new_jbutton("Preview a certain time frame from fulli file (unedited)", true)
|
211
283
|
@preview_section.tool_tip = "Allows you to view a certain time frame unedited (ex: 10:00 to 10:05), so you can narrow down to pinpoint where questionable scenes are, etc. This is the only way to view a specific scene if there are not cuts within that scene yet."
|
212
284
|
@preview_section_unedited.on_clicked {
|
213
285
|
do_copy_dvd_to_hard_drive true, false, true
|
214
286
|
}
|
215
287
|
|
216
|
-
@rerun_preview = new_jbutton( "Re-run most recently watched preview time frame", true )
|
288
|
+
@rerun_preview = new_jbutton( "Re-run most recently watched preview time frame from fulli file", true )
|
217
289
|
@rerun_preview.tool_tip = "This will re-run the preview that you most recently performed. Great for checking to see if you last edits were successful or not."
|
218
290
|
@rerun_preview.on_clicked {
|
219
291
|
repeat_last_copy_dvd_to_hard_drive
|
220
292
|
}
|
221
293
|
|
222
|
-
|
223
|
-
@fast_preview
|
294
|
+
# Maybe this button should go too...
|
295
|
+
@fast_preview = new_jbutton("fast preview all from fulli file (smplayer EDL)", true)
|
296
|
+
@fast_preview.tool_tip = <<-EOL
|
297
|
+
Plays smplayer on a file with an EDL.
|
298
|
+
This gives you a rough estimate to see if your edits are accurate, and is really fast to seek, etc.
|
299
|
+
This is useful because you can't use mplayer on a DVD for accurate timestamps if it has any
|
300
|
+
timestamp splits in it [because some DVD's are buggy]
|
301
|
+
EOL
|
224
302
|
@fast_preview.on_clicked {
|
225
303
|
success, wrote_to_here_fulli = do_copy_dvd_to_hard_drive false, true
|
226
304
|
sleep 0.5 # lodo take out ???
|
227
305
|
background_thread.join if background_thread # let it write out the original fulli, if necessary [?]
|
228
306
|
nice_file = wrote_to_here_fulli #+ ".fast.mpg"
|
229
307
|
if false#!File.exist?(nice_file)
|
230
|
-
p = show_non_blocking_message_dialog("Creating quick lookup file--NB that for each changed deletion,
|
231
|
-
you'll need to restart the fast preview SMplayer
|
308
|
+
p = show_non_blocking_message_dialog("Creating quick lookup file--NB that for each changed deletion setting,
|
309
|
+
you'll need to save your file and restart the fast preview SMplayer instance.
|
232
310
|
Also note that the start and end times will be slightly off if reality [delayed]
|
233
311
|
Also note that while doing fast preview, it can be doing a normal preview as well
|
234
312
|
in the background, simultaneously.")
|
@@ -241,54 +319,16 @@ module SensibleSwing
|
|
241
319
|
set_smplayer_opts "-edl #{EdlTempFile}"
|
242
320
|
thread = do_mplayer_edl( "smplayer_portable #{nice_file}") # note the smplayer, but it's for the fast file...
|
243
321
|
}
|
244
|
-
|
245
|
-
# TODO remove me...
|
246
|
-
@watch_unedited = new_jbutton("Watch full DVD unedited (while simultaneously grabbing file to hard drive)", true)
|
247
|
-
@watch_unedited.on_clicked {
|
248
|
-
success_no_run, wrote_to_here_fulli = do_copy_dvd_to_hard_drive false, true, true
|
249
|
-
sleep 5 unless success_no_run
|
250
|
-
command = "smplayer_portable #{wrote_to_here_fulli}"
|
251
|
-
system_non_blocking command
|
252
|
-
}
|
253
|
-
|
254
|
-
# until I can let them know *why* they would ever need this button...
|
255
|
-
@display_unique = new_jbutton( "Calculate DVD's unique ID", true )
|
256
|
-
@display_unique.tool_tip = "This is useful to setup a DVD's 'unique ID' within an EDL for it. If your EDL doesn't have a line like disk_unique_id => \"...\" then you will want to run this to add it in."
|
257
|
-
@display_unique.on_clicked {
|
258
|
-
drive, volume, dvd_id = choose_dvd_drive
|
259
|
-
# display it, allow them to copy and paste it out
|
260
|
-
get_user_input("#{drive} #{volume} for your copying+pasting pleasure (highlight, then ctrl+c to copy)\n
|
261
|
-
This is USED to identify a disk to match it to its EDL, later.", "\"disk_unique_id\" => \"#{dvd_id}\",")
|
262
|
-
}
|
263
322
|
|
264
|
-
|
323
|
+
add_text_line 'Contact:'
|
324
|
+
|
325
|
+
@upload = new_jbutton("Upload/E-mail suggestion/Contact/Submit anything", true) # keep this one last! :)
|
265
326
|
@upload.tool_tip = "We welcome all feedback! For example if you create a new DVD EDL, please submit it back to us so that others can benefit from it!"
|
266
327
|
@upload.on_clicked {
|
267
328
|
system_non_blocking("start mailto:sensible-cinema@googlegroups.com")
|
268
329
|
system_non_blocking("start http://groups.google.com/group/sensible-cinema")
|
269
330
|
}
|
270
331
|
|
271
|
-
@parse_srt = new_jbutton("Parse a subtitle file (.srt) to detect profanities", true)
|
272
|
-
@parse_srt.tool_tip = <<-EOL
|
273
|
-
You can download a .srt file and parse it to automaticaly search for profanities.
|
274
|
-
Basically download it from opensubtitles.org (possibly from other places, too),
|
275
|
-
(enter dvd name in the search box, click a result, click one from the list with an English flag, then click 'Download(zip)')
|
276
|
-
Once you download the zip, unzip it, and then compare the timestamps in it with those on the DVD (see the button "Watch DVD unedited (realtime mplayer)")
|
277
|
-
EOL
|
278
|
-
@parse_srt.on_clicked {
|
279
|
-
fc = new_filechooser
|
280
|
-
fc.set_title "Pick srt file:"
|
281
|
-
if old_dir = Storage['old_srt_dir']
|
282
|
-
fc.set_current_directory JFile.new(old_dir)
|
283
|
-
end
|
284
|
-
filename = fc.go
|
285
|
-
Storage['old_srt_dir'] = fc.get_current_directory.to_s
|
286
|
-
Storage['start_time']
|
287
|
-
|
288
|
-
parsed = SubtitleProfanityFinder.edl_output [filename]
|
289
|
-
File.write(EdlTempFile, "# add these into your mute section if they apply\n" + parsed)
|
290
|
-
open_file_to_edit_it EdlTempFile
|
291
|
-
}
|
292
332
|
|
293
333
|
@progress_bar = JProgressBar.new(0, 100)
|
294
334
|
@progress_bar.set_bounds(44,@starting_button_y,@button_width,23)
|
@@ -314,18 +354,16 @@ module SensibleSwing
|
|
314
354
|
check_for_dependencies
|
315
355
|
end
|
316
356
|
|
317
|
-
require 'fileutils'
|
318
|
-
|
319
357
|
def set_smplayer_opts to_this
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
358
|
+
smplayer_prefs_file = File.expand_path("~/.smplayer/smplayer.ini")
|
359
|
+
old_prefs = File.read(smplayer_prefs_file) rescue ''
|
360
|
+
old_prefs = "[advanced]\nmplayer_additional_options=" unless old_prefs.contain? 'mplayer_additional_options='
|
361
|
+
new_prefs = old_prefs.gsub(/mplayer_additional_options=.*/, "mplayer_additional_options=#{to_this}")
|
362
|
+
FileUtils.mkdir_p File.dirname(smplayer_prefs_file) # case it doesn't exist'
|
363
|
+
File.write(smplayer_prefs_file, new_prefs)
|
364
|
+
p 'wrote', new_prefs.length, smplayer_prefs_file, to_this
|
365
|
+
# no worky doze File.write(File.expand_path('~/.mplayer/config'), to_this)
|
366
|
+
smplayer_prefs_file
|
329
367
|
end
|
330
368
|
|
331
369
|
def create_brand_new_edl
|
@@ -431,7 +469,7 @@ module SensibleSwing
|
|
431
469
|
command = "#{exe} dvdnav://#{title_track_maybe_nil}/#{drive} -osd-fractions 2 -nocache "
|
432
470
|
p command
|
433
471
|
@play_smplayer_warn ||= show_non_blocking_message_dialog "Directions:
|
434
|
-
'o' key: turn on on-screen
|
472
|
+
'o' key: turn on on-screen-display timestamps (note: these are 30 fps timestamps so will need to be converted to use).
|
435
473
|
'v' key: turn off subtitles.
|
436
474
|
'.' key: step one frame.
|
437
475
|
'f' for full screen."
|
@@ -480,11 +518,11 @@ module SensibleSwing
|
|
480
518
|
puts 'Please confirm license agreement in open window.'
|
481
519
|
old = ['no', 'yes', 'ok'].map{|name| 'OptionPane.' + name + 'ButtonText'}.map{|name| [name, UIManager.get(name)]}
|
482
520
|
UIManager.put("OptionPane.yesButtonText", 'Accept')
|
483
|
-
UIManager.put("OptionPane.noButtonText", "View
|
521
|
+
UIManager.put("OptionPane.noButtonText", "View File (#{license_name})")
|
484
522
|
# cancel button stays the same...
|
485
523
|
|
486
524
|
message ||= "Sensible Cinema requires a separately installed program (#{program}). You can install this program
|
487
|
-
separately, or Sensible Cinema can download it for you.
|
525
|
+
separately to the vendor/cache directory, or Sensible Cinema can download it for you.
|
488
526
|
By clicking accept, below, you are confirming that you have read and agree to be bound by the
|
489
527
|
terms of its license (the #{license_name}), located at #{license_url_should_also_be_embedded_by_you_in_message}.
|
490
528
|
Click 'View License' to view it. If you do not agree to these terms, click 'Cancel'. You also agree that this is a
|
@@ -497,6 +535,7 @@ module SensibleSwing
|
|
497
535
|
# 2 is cancel
|
498
536
|
if returned == 1
|
499
537
|
system_non_blocking("start #{license_url_should_also_be_embedded_by_you_in_message}")
|
538
|
+
puts "Please restart after reading license agreement, to be able to then accept it."
|
500
539
|
System.exit 1
|
501
540
|
end
|
502
541
|
if returned == 2
|
@@ -639,12 +678,16 @@ module SensibleSwing
|
|
639
678
|
|
640
679
|
include_class javax.swing.UIManager
|
641
680
|
|
642
|
-
def get_user_input(message, default = '')
|
681
|
+
def get_user_input(message, default = '', cancel_ok = false)
|
643
682
|
received = JOptionPane.showInputDialog(message, default)
|
644
|
-
raise 'user canceled' unless received
|
683
|
+
raise 'user canceled' unless received unless cancel_ok
|
645
684
|
received
|
646
685
|
end
|
647
686
|
|
687
|
+
def show_copy_pastable_string(message, value)
|
688
|
+
get_user_input message, value, true
|
689
|
+
end
|
690
|
+
|
648
691
|
def parse_edl path
|
649
692
|
EdlParser.parse_file path
|
650
693
|
end
|
@@ -659,10 +702,10 @@ module SensibleSwing
|
|
659
702
|
edit_list_path = single_edit_list_matches_dvd(dvd_id)
|
660
703
|
if !edit_list_path && choose_file
|
661
704
|
fc = FileDialog.new(self)
|
662
|
-
fc.set_title "Please pick a DVD Delete List File (
|
705
|
+
fc.set_title "Please pick a DVD Delete List File (none found that seem to match #{dvd_volume_name})--or create one for it"
|
663
706
|
fc.set_directory EDL_DIR
|
664
707
|
edit_list_path = fc.go
|
665
|
-
raise 'cancelled' unless edit_list_path
|
708
|
+
raise 'cancelled choosing an EDL' unless edit_list_path
|
666
709
|
end
|
667
710
|
@_edit_list_path = edit_list_path
|
668
711
|
end
|
@@ -692,7 +735,7 @@ module SensibleSwing
|
|
692
735
|
@_get_import_from_filename ||=
|
693
736
|
begin
|
694
737
|
file_from_chooser = new_filechooser Storage['get_import_from_filename_dir']
|
695
|
-
file_from_chooser.set_title "Please choose the file that is your ripped version of #{dvd_title} title ##{dvd_title_track} (.mpg or .ts--see
|
738
|
+
file_from_chooser.set_title "Please choose the file that is your ripped version of #{dvd_title} title ##{dvd_title_track} (.mpg or .ts--see documentation/how_to_get_files_from_dvd.txt file)"
|
696
739
|
outgoing = file_from_chooser.go
|
697
740
|
Storage['get_import_from_filename_dir'] = File.dirname(outgoing)
|
698
741
|
outgoing
|
@@ -763,7 +806,7 @@ module SensibleSwing
|
|
763
806
|
save_to_edited = get_save_to_filename dvd_friendly_name
|
764
807
|
fulli = MencoderWrapper.calculate_fulli_filename save_to_edited
|
765
808
|
if exit_early_if_fulli_exists
|
766
|
-
if fulli_dot_done_file_exists
|
809
|
+
if fulli_dot_done_file_exists? save_to_edited
|
767
810
|
return [true, fulli]
|
768
811
|
end
|
769
812
|
# make it create a dummy response file for us :)
|
@@ -811,16 +854,15 @@ module SensibleSwing
|
|
811
854
|
to #{file_from} (#{dvd_title}).
|
812
855
|
Copying to #{save_to}.
|
813
856
|
EOL
|
814
|
-
if !fulli_dot_done_file_exists save_to
|
857
|
+
if !fulli_dot_done_file_exists? save_to
|
815
858
|
popup_message += "This could take quite awhile (several hours), and will prompt you with a chime noise when it is done.\n
|
816
859
|
You can close this window and minimize sensible cinema and continue using your computer while it runs in the background."
|
817
860
|
end
|
818
861
|
|
819
862
|
if !start_time
|
820
863
|
# assume a full run..
|
821
|
-
popup_message += "
|
864
|
+
popup_message += "NB that the created file will be playable only with VLC (possibly also with smplayer), but probably not with windows media player."
|
822
865
|
end
|
823
|
-
|
824
866
|
|
825
867
|
popup = show_non_blocking_message_dialog(popup_message, "OK")
|
826
868
|
|
@@ -910,8 +952,7 @@ module SensibleSwing
|
|
910
952
|
@saved_opticals = opticals # since we force them to have their disc already in there...guess this is ok for os x :)
|
911
953
|
return @_choose_dvd_drive
|
912
954
|
else
|
913
|
-
|
914
|
-
java.lang.System.exit 1
|
955
|
+
raise 'did not select a drive...'
|
915
956
|
end
|
916
957
|
end
|
917
958
|
|