sensible-cinema 0.24.1 → 0.24.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/README +22 -16
  2. data/Rakefile +5 -1
  3. data/TODO +43 -62
  4. data/VERSION +1 -1
  5. data/bin/sensible-cinema +146 -73
  6. data/bin/sensible-cinema-cli +5 -2
  7. data/change_log_with_feature_list.txt +22 -0
  8. data/history_and_related_works_list.txt +1 -0
  9. data/legal/control_youtube.html +135 -0
  10. data/legal/md5s.txt +3 -0
  11. data/legal/serve.rb +6 -0
  12. data/lib/add_any_bundled_gems_to_load_path.rb +1 -1
  13. data/lib/blanker.rb +2 -2
  14. data/lib/count_down_timer_jruby_swing.rb +20 -4
  15. data/lib/edl_parser.rb +4 -3
  16. data/lib/keyboard_input.rb +1 -1
  17. data/lib/muter.rb +29 -9
  18. data/lib/ocr.rb +12 -2
  19. data/lib/ocr_seed/netflix_b9.bmp +0 -0
  20. data/lib/play_audio.rb +44 -2
  21. data/lib/ruby_clip.rb +26 -0
  22. data/lib/subtitle_profanity_finder.rb +111 -92
  23. data/lib/swing_helpers.rb +2 -2
  24. data/spec/notes +70 -8
  25. data/spec/ocr.spec.rb +9 -11
  26. data/spec/screen_tracker.spec.rb +1 -1
  27. data/spec/sensible_cinema_gui.spec.rb +2 -2
  28. data/spec/subtitle_profanity_finder.spec.rb +10 -0
  29. data/template_bats/{run-upconverting-video-player.bat → advanced--run-upconverting-video-player.bat} +0 -0
  30. data/todo.inventionzy.txt +2 -1
  31. data/todo.subtitle +1 -3
  32. data/todo.upconvert +15 -3
  33. data/zamples/edit_decision_lists/dvds/edls_being_edited/test_delete_list_for_experimenting_with.txt +10 -0
  34. metadata +8 -6
  35. data/zamples/edit_decision_lists/dvds/edls_being_edited/airplane_edited.txt +0 -19
  36. data/zamples/edit_decision_lists/dvds/example_delete_list.txt +0 -10
  37. data/zamples/edit_decision_lists/dvds/snow_white_and_the_seven_dwarfs.txt +0 -18
data/README CHANGED
@@ -1,47 +1,53 @@
1
1
  Sensible-cinema [5] allows you to apply pre-programmed edit lists
2
- (e.g. Edit Decision Lists [2]) to DVD's you own.
3
- I.e. you can edit a DVD to "mute out" or skip certain scenes.
2
+ (e.g. Edit Decision Lists [2]) to the DVD's you own.
3
+ I.e. you can edit a DVD to "mute out" or skip certain scenes, deemed objectionable.
4
4
  This allows you to sit back and relax as you watch a more "sensiblized" showing of your DVD.
5
5
 
6
- It is currently in alpha/beta, though will always be free software, even after releases.
7
- It also includes a library of EDL's that go along with various DVD's, we need volunteers
8
- to help it to grow!
6
+ It is currently in alpha/beta, and is free (probably forever, as it is gplv3 currently).
7
+ It also includes a library of EDL's that go along with various DVD's. We need volunteers/contributors
8
+ to help it grow!
9
9
 
10
10
  To use, basically install, then insert an original DVD that you want to edited, then run sensible cinema.
11
11
  It will pop up some windows where you choose what to do.
12
12
 
13
13
  Note: please install from the zip files at https://sourceforge.net/projects/sensible-cinema/files/
14
- and not from github's "download" button. See the "install" section, below, for finer grained details.
14
+ and not from github's "download" button. See the "install" section, below, for fine-grained install details.
15
15
 
16
- Sensible cinema basically allows you to create an edited video version of the DVD, onto your hard drive,
17
- and you can watch it there. It also has some realtime playback support via the use of EDL playback in some
18
- popular video players.
16
+ Sensible cinema basically allows you to either create an edited video version of the DVD, onto your hard drive,
17
+ and watch it there, or to playback a DVD or file (edited) via the use of EDL playback in some
18
+ pre-existing popular video players.
19
19
 
20
20
  How? Sensible cinema basically takes the original DVD, slices out the bad parts, then combines it back
21
21
  into a new file and gives you the result.
22
22
  It is essentially a linear editor [1] that applies Edit Decision Lists [2] to videos. It wraps
23
23
  a few freely available open source programs [3] to accomplish the editing for you.
24
24
  Note that the process can take several hours, so budget some time for it.
25
- It also has a few "realtime viewing" options available, again based on some freely available
26
- open source software [3].
27
25
 
28
- On a more moral note, just because an edited video lacks profanity/sex scenes...does not immediately make it an inspiring experience.
29
- I'd suggest carefully evaluating your real values/motives, and going with those.
30
- Sensible cinema does not a clean movie make of a dirty one. Don't watch it if it's not uplifting! Be nice to yourself!
26
+ It also has a few "realtime viewing" options available, based on some freely available
27
+ open source popular video players [3]. These don't have any startup time to wait at all.
28
+
29
+ On a more moral note, just because an edited video lacks profanity/sex scenes...does not
30
+ automatically make it a wholesome experience.
31
+ Sensible cinema does not a clean movie make of a dirty one, even without profanity.
32
+ Don't watch it if it's not uplifting! Be nice to yourself!
31
33
 
32
34
  dove.org and common sense media are good references for discovering the "uplifting" level of movies [4].
33
35
  kids-in-mind.com is also a good reference for profanity levels, though sometimes it misses profanities,
34
- and it also lacks timestamps to know when the profanities occur. Hence this project.
36
+ and it also lacks timestamps to know when the profanities occur, and doesn't allow for community
37
+ contribution. Hence this project existing.
35
38
  Also note that even if you happen to have an edited copy of a DVD floating around, if you have kids, chances are they
36
39
  will eventually find (and watch) the unedited originals, so be careful there.
37
40
 
41
+ That being said, some videos are quite enjoyable once you strip out profanity/questionable content.
42
+ It's your call.
43
+
38
44
  Enjoy your movies!
39
45
 
40
46
  [1] http://en.wikipedia.org/wiki/Linear_video_editing
41
47
  [2] http://en.wikipedia.org/wiki/Edit_decision_list
42
48
  [3] mostly GPL programs, see http://www.gnu.org/licenses/ VLC Media Player, Mplayer/mencoder, ffmpeg, et al.
43
49
  [4] http://lds.org/library/display/0,4945,161-1-11-1,00.html search for the word "wholesome"
44
- [5] Also known to us as "paranoid cinema" (just an joke :).
50
+ [5] Also known to us as "paranoid cinema" (just an joke :)
45
51
 
46
52
  == Installation ==
47
53
 
data/Rakefile CHANGED
@@ -137,7 +137,11 @@ task 'deploy' do
137
137
  p 'creating sf shell'
138
138
  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]
139
139
  p 'creating sf dir'
140
- sys "ssh rdp@ilab1.cs.byu.edu 'ssh rogerdpack,sensible-cinema@shell.sourceforge.net \"mkdir /home/frs/project/s/se/sensible-cinema/#{cur_ver}\"'"
140
+ begin
141
+ sys "ssh rdp@ilab1.cs.byu.edu 'ssh rogerdpack,sensible-cinema@shell.sourceforge.net \"mkdir /home/frs/project/s/se/sensible-cinema/#{cur_ver}\"'"
142
+ rescue => ok_if_dir_already_existing
143
+ puts 'warning--dir already existing?' + ok_if_dir_already_existing.to_s
144
+ end
141
145
  p 'copying into sf from ilab'
142
146
  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}'"
143
147
  p 'successfully deployed to sf only! ' + cur_ver
data/TODO CHANGED
@@ -17,26 +17,17 @@
17
17
  == high prio like blocking bugs ==
18
18
 
19
19
  == under next release specific items: ==
20
- cheap minimize demo "fake auto" :)
21
- friday 2: http://www.youtube.com/watch?v=SDeLjcTxMaM&feature=player_profilepage
22
- cheap static-ify demo for mutes
23
- also a straight "half mute" demo, using volume downs/ups
24
- cheap minimize via (probably foreground window + API real windows API)
20
+ a "half mute" demo, using volume downs/ups
21
+ cheap minimize via (probably minimize foreground window/windows API)
25
22
  url -> url inference [hopefully this is cake...]
26
- fix the failing 9 digit test the fancy shmancy way :P
27
- can pass in a profanity command line
28
23
  can handle multiple dvdid's et al
29
- youtube: use the javascript API somehow, like http://universalsubtitles.org/en does
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
- just in case youtube takes over the world
32
24
 
33
25
  == yes do ordered in conjunction with the above probably ==
26
+ C player
34
27
  unit tests
35
-
36
- always use -dvd-device [yikes]
37
- fullscreen now
38
- subtitles 2 phase
39
- auto-paste
28
+ release at some point...
29
+
30
+ consistency for flight of nav. srt? huh?
40
31
  lightning strike from various outlets...
41
32
  try buy edit lists from all x,y,z [?] maybe ask for them for free first? ()
42
33
  http://www.familysafemovies.com
@@ -52,23 +43,23 @@
52
43
  family flix
53
44
  http://theeditedmovieencyclopedia.blogspot.com/2008/08/clean-play-dvds-grand-opening-e-mail.html has grande list
54
45
  movie mask wayback machine
46
+ make it load faster! this is cuh-razy! or splash screen! yes!
55
47
 
56
48
  == yes do, un-ordered currently, from the various future release options ==
57
- play unedited doesn't use known title tracks
58
- add a "scan for expected title, times" (basically all titles, times...)
49
+ if 2 EDL's, still choose title track
50
+ add an auto "scan for expected title, times"
51
+ add time to the generator EDL
59
52
  complain if times looks wrong...
60
- complain [accomodate option] if start time looks off...600
53
+ complain [accomodate option] if start time looks off...600
61
54
  "1:07:5.718" , "1:07:10.447", "profanity", "ba.....", "Faraday that [ba.....] That ba He's gonna wish he never met us",
62
- don't cache selections if they choose a local file...hmm...
63
55
  tighten splits
64
56
  "save to" -> same dir as "get from" yeah
57
+ open EDL can have a rememberable DIR
65
58
  @instructions "this is great for comparing srt's, except...when it isn't, then you have to..."
66
59
  @instructions: full srt how-to
67
- test with cars-ws (at work), mac (to make sure volume name doesn't have spaces)
68
60
  can I just use ffmpeg for an initial -> ts ? http://eotmsnotes.wordpress.com/2011/04/25/tsmuxer-notes/
69
61
  add dvd_title_time option
70
62
  volume_name => dvd_volume_name
71
- make it load faster! this is cuh-razy! or splash screen! yes!
72
63
  why is the Sintel's EDL seemingly off?
73
64
  ascertain how accurate mplayer EDL is...I guess compared to...umm...something?
74
65
  fix discrepancy between EDL mplayer and ffmpeg...maybe a new button "accurate EDL playback"?
@@ -84,7 +75,7 @@
84
75
  mac just die with instructions to use tsmuxer first...
85
76
  check if some other buttons are now outdated...
86
77
  unit tests (all pass)
87
- auto-copy to clipboard...should be cake, right?
78
+ upconvert: a file
88
79
  can I avoid requiring use of tsmuxer first? hmm...
89
80
  check with blu-ray...do they match timing-wise? sub-title wise?
90
81
  donate tsmuxer, makemkv, http://ffmpeg.zeranoe.com/builds, mulder [?] smplayer menumeter
@@ -102,6 +93,7 @@
102
93
  me try
103
94
  try disney digital copy
104
95
  C player:
96
+ folder, look for title.edl
105
97
  use DVD navigator
106
98
  just use mplayer EDL syntax, plus a title track (or just detect track change, if long enough, assume... :P) :)
107
99
  http://msdn.microsoft.com/en-us/library/ms787412(VS.85).aspx
@@ -124,7 +116,8 @@
124
116
  create a semi-accurate phantom edit EDL
125
117
  http://www.chefelf.com/forums/index.php?showtopic=6176
126
118
  karlie?
127
- inventionzy: blu-ray OCR
119
+ inventionzy: blu-ray stuff from todo.inventionzy
120
+
128
121
  port to mac OS X--try everything out (all buttons), make sure all works...
129
122
  ppc dvdid?
130
123
  use mplayerx well [?] like wrap it...
@@ -132,6 +125,8 @@
132
125
  do I need tsmuxer?
133
126
  auto-"guess" the best title...
134
127
  add button "fast preview segment" (from dvd)
128
+ upconvert research/compare various options
129
+ investigate WMC "call out to smplayer EDL" or the like...
135
130
 
136
131
  == other lists ==
137
132
 
@@ -146,32 +141,32 @@
146
141
  add button "fast preview one" (from file)
147
142
 
148
143
  == DVD-realtime backlog once yes do, now not do, unordered ==
149
- @makemkv: show us drive letters, labels over hardware type, also an option to "ignore failure"
150
- slow cpu: mater tall tales: are my av sync values better or worse than smplayer defaults, with/without upsampling, blacky?
151
- upconvert research/compare options
152
- investigate boxee edl (just fer fun...maybe possible?) http://getsatisfaction.com/boxee/topics/commercial_skipping_edl_support
153
- investigate xbmc dvd edl how do you do that?
154
- investigate WMC "call out to mplayer EDL" or the like...
155
- for mplayer realtime it needs to start early, but end on time
156
- mplayer instructions are obscured
157
- mplayer EDL allow this:
158
- got fatal exception in button
159
- detected an overlap 1397.51 1401.275 mute 1395.474 1397.874 mute
160
- SyntaxError
161
- accept "mplayer_dvd_splits" => ["4749"] [large second integers...hmm...]
144
+ investigate xbmc dvd edl how do you do that? [+- real dvd]
162
145
  fast preview: change it to be aggressive sometimes yes, other times no
163
146
  fast preview mode: watch for modifications to file, kill mplayer instances for them on change :)
164
147
  fast preview tends to "go too far" [like the end of profanity is still there when played via the "real way"]
165
148
  mplayer EDL while grabbing, from grabbed :P
166
149
  note to them [in how_to_create]: can do the two types of preview at same time...concurrently...to save time...
167
150
  can I make playback more smooth by upping mplayer cache? does smplayer pass it a parameter?
168
- lua VLC EDL plugin? LOL yeah right.
169
151
  investigate: can I use zoomplayer max?
170
- investigate dvdrsbvdl (windows media center edl plugin)
171
152
 
172
153
  == DVD+-DVD-realtime backlog (totally unordered, some very low prio, basically all never do) ==
154
+ subtitle idio
155
+ slow cpu: mater tall tales: are my av sync values better or worse than smplayer defaults, with/without upsampling, blacky?
156
+ investigate boxee edl (just fer fun...maybe possible?) http://getsatisfaction.com/boxee/topics/commercial_skipping_edl_support
157
+ mplayer EDL allow this:
158
+ got fatal exception in button
159
+ detected an overlap 1397.51 1401.275 mute 1395.474 1397.874 mute
160
+ SyntaxError
161
+ lua VLC EDL plugin? LOL yeah right.
162
+ test with cars-ws (at work), mac (to make sure volume name doesn't have spaces)
163
+ investigate dvdrsbvdl (windows media center edl plugin)
164
+ the distro could be made smaller yet [at least not as many gem deps needed...maybe more possible...]
173
165
  @mplayer: crash IQ nav, keys dont' work in windows, prolly dvdcss doesn't cache in windows, can't pass parameter in windows LOL
166
+ @mplayer: could you umm...go ahead and support avisynth input pleaz, assuming you don't?
174
167
  @mplayer: dvdnav:///e: should play the *menu* please? please? [???]
168
+ @mplayer: that one [IQ? hitchhikers'?] fail fail fail until I used -dvd-device [?] huh?
169
+ try to reproduce...
175
170
  @mplayer: do I need -zoom ?
176
171
  @smplayer: you don't capture stderr [?] ex -vf scale:1280.0
177
172
  @mplayer: http://www.infognition.com/VideoEnhancer/ can I do that through any means LOL?
@@ -217,32 +212,23 @@
217
212
  allow for filter subtitles, a la "always skip" [?]
218
213
  allow for AAF or OMF export, as well as EDL (?)
219
214
  C specific portion [A,B] player
220
- also edit the trailers et al [?] hmm...
215
+ also edit the playback of trailers et al [?] hmm...
221
216
  @mplayer: double click default to full screen! :) and enter default to dvdnav select!
222
217
  add button "play from exactly here to here" in [mplayer uh guess?] :P
223
218
  what does mplayer do with -ss big_number past the end of an end [monster's inc]?
224
219
  fix ffmpeg's Application provided invalid, non monotonically increasing dts to muxer in stream 0: 5940 >= 5940
225
220
  @makemkv: wrong title no:Title #0 was added (7 cell(s), 0:14:58)
226
221
  Title #1 was added (8 cell(s), 0:14:57), also give us title no's in the dialog :P
227
- @mencoder: you don't rip DVD's quite right. But you try. Oh how you try.
228
- @mpc: easier upconvert
222
+ @mencoder you lop off the end somehow (dvd rip)
229
223
  @VLC: plugin for EDL maybe? [when opening file/DVD look for .edl file?]
230
224
  blu ray timing
231
225
  my one, others. Are they the same as DVD's? They seem really close...
232
- can I accomodate for m4v somehow? Is it consistent?
233
226
  pull in information from thetvdb to the GUI app
234
227
  create the following EDL: 10 commandments DVD to skip the intro music LOL
235
- todo.subtitle
236
228
  @VLC you lop off the end, somehow, I guess...
237
- make it not die if you have no DVD in there yet when you choose a drive...
238
- the "frame accurate" splitter
229
+ create the "ffmpeg frame accurate" splitter
239
230
  sounds like I want to move in that direction, esp. if handbrake ends up being sane
240
- @mencoder you lop off the end somehow
241
- @VLC convert -> dump raw always displays--expected? also saves nothing?
242
231
  research the gplv3, add terms. Maybe want real lawyer, even?
243
- note "others are released under this license, that license"
244
- note/include jruby license, include gplv1 et al, note "also included locally"
245
- disallow choosing empty drive? fail more gracefully when they do?
246
232
  sons of provo "music video" EDL
247
233
  it can "slow certain sections down" that might look way cool! LOL
248
234
  how does this one download subtitles? http://www.pcworld.com/article/227465/freebie_splayer_plays_almost_any_video_fileand_looks_good_doing_it.html
@@ -255,7 +241,6 @@
255
241
  "release" it to more developers
256
242
  plug.org, more rubyists than urug?
257
243
  after OS X confidence :)
258
- @VLC also tell them to tell people how to play hi-def better, when they try [?] if it shtinks
259
244
  an all online EDL editor
260
245
  flash canvas
261
246
  OCR?
@@ -272,14 +257,14 @@
272
257
  take out the extra console window box output :) [scary, and closing it closes SC!]
273
258
  auto-feedback on crashes [?]
274
259
  publish new version of rdp-win32screenshot, if it ever existed
275
- script avidemux, as a demo?
260
+ script avidemux, virtualdub, as a demo?
276
261
  accomodate failed deletes [files in use] better than dying with a backtrace
277
262
  vendorize ffmpeg, to avoid "scary" warning on install of imagemagick/scary active x
278
263
  machine learning for video analysis [?]
279
264
  figure out how to auto-crop after grab?
280
265
  figure out some way to work with cable providers/iphones/gphones?
281
266
  @smplayer: why do you sometimes start with subtitles enabled?
282
- don't need to package rdp-win32screenshot et al for just DVD work...
267
+ don't need to include in package rdp-win32screenshot et al for just DVD work...
283
268
  bring in batch file mplayer :)
284
269
  make my website slightly more "pictures-zy"
285
270
  check why out of sync my turn on earth on blacky MPH-HC
@@ -305,7 +290,6 @@
305
290
  re-look through all my old "thoughts" notes/blogs
306
291
  mplayer playlist mode possible, like real playlist?
307
292
  add button start EDL playback from dvd here [?] (for create mode)
308
- re-play as EDL button for both modes--describe on the how to better
309
293
  fix prio for first ffmpeg instance not being settable [huh?]
310
294
  check if a newer version of smplayer (+- forum links) can replace raw usage of mplayer now?
311
295
  integrate sub-titles-zy-er auto-download
@@ -319,7 +303,7 @@
319
303
  can watch conference like a music video :)
320
304
  can play "this section then that, with this one's audio [wow that is fringey]
321
305
  speedify things (the whole process takes approximately...eternity?)
322
- can overlay with an arbitrary image
306
+ can overlay with an arbitrary image (I think mencoder can actually do this...)
323
307
  ffmpeg handle 3F2R audio [sigh] [cars, should work with temple at lavc, too, bob dvd's are dual, I think...hmm...]
324
308
  an 'always blank not skip the mutes' option for paranoid
325
309
  video on how to use imdb wiki
@@ -347,16 +331,14 @@
347
331
  instructions on how to do their own (private) DL or do one and submit it (public), or email their friends :P
348
332
  add an option "just save full disk (unedited) to hard drive..."
349
333
  note to people: can edit these to your liking, resubmit
350
- DRY up dependency installation' code
351
334
  "Re-run most recent" disabled when there isn't one [?]
352
335
  can rip from a DVD-like local folder (would anybody ever need this?)
353
- can parse IMDB
336
+ can parse IMDB parental guide
354
337
  add stuffs to imdb hmmm
355
338
  IMDB easy DVD mapping...
356
339
  can blank out the video, with audio continuing through...
357
- @VLC: hard crash when ripping that one DVD...long one, about the constitution...
358
- can use a fast temp drive, save through it to another :P
359
- (when they have two...)
340
+ can use a fast temp drive, save through it to another :P
341
+ (when they have two...)
360
342
  blu-ray support somehow (OCR maybe)
361
343
  double buffering hard drive/incoming copying from DVD might speed things, if your HD is fast.
362
344
  might not work for all modes tho...
@@ -377,9 +359,8 @@ warn when labels both exist and don't match...
377
359
  @mplayer you cannot convert mkv files correctly you silly!
378
360
  bounty dvdnav
379
361
  fix dvdnav stuffs?
380
- ask swank if individuals can rent too?
381
362
 
382
- == random non-DVD backlog ... or never do DVD. ==
363
+ == random non-DVD/OCR backlog ... or never do DVD. ==
383
364
 
384
365
  @mplayer: you return the wrong return code, sillys! https://gist.github.com/1056292
385
366
  @smplayer: bounty or me fix: their for their display [if they use get_time_pos isn't that enough ?]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.24.1
1
+ 0.24.2
data/bin/sensible-cinema CHANGED
@@ -38,6 +38,7 @@ require_relative '../lib/mplayer_edl'
38
38
  require_relative '../lib/play_audio'
39
39
  require_relative '../lib/subtitle_profanity_finder'
40
40
  require_relative '../lib/convert_thirty_fps'
41
+ require_relative '../lib/ruby_clip'
41
42
 
42
43
  require 'tmpdir'
43
44
  require_relative '../lib/swing_helpers'
@@ -116,9 +117,10 @@ module SensibleSwing
116
117
  end
117
118
 
118
119
  LocalStorage = Storage.new("sensible_cinema_storage")
120
+ LocalStorage.set_default('multiple_half_screens', 4)
121
+
119
122
 
120
123
  def setup_upconvert_buttons
121
-
122
124
 
123
125
  @watch_file_upconvert = new_jbutton( "Watch a file upconverted (unedited)") do
124
126
  # ?? drive, volume, dvd_id = choose_dvd_drive_or_file true
@@ -128,78 +130,105 @@ module SensibleSwing
128
130
  end
129
131
 
130
132
  @watch_file_upconvert = new_jbutton( "Watch a DVD upconverted (unedited)") do
131
- # this way wurx...
132
- #drive, volume, dvd_id = choose_dvd_drive_or_file false # will choose a DVD if mounted...
133
- #run_smplayer_blocking "dvdnav:///#{drive}", "-nocache" # TODO dvdnav://1-60 is summarily ignored...sniff...
134
- # LODO mplayer dvdnav:///e: seems really really hosed LOL, and also dvdnav input what the...
135
- # plush crash smplayer "normal" selecting IQ Menu (ok snow white tho...odd...)
136
133
  warn_if_no_upconvert_options_currently_selected
137
- play_dvd_smplayer_unedited
134
+ play_dvd_smplayer_unedited false, false
138
135
  end
139
136
 
140
- add_set_upconvert_options_button
137
+ @upconv_line = add_text_line ''
138
+ change_upconvert_line_to_current
139
+
140
+ @show_upconvert_options = new_jbutton( "Change upconvert options" ) do
141
+ add_setup_upconvert_options
142
+ end
141
143
 
142
144
  end
143
145
 
144
146
  def warn_if_no_upconvert_options_currently_selected
145
147
  if !LocalStorage[UpConvertEnglish]
146
- show_blocking_message_dialog "Warning: upconvert options have not been set yet--please change upconvert options first, if desired."
148
+ show_blocking_message_dialog "Warning: upconvert options have not been set yet--set upconvert options first and restart, if desired."
147
149
  end
148
150
  end
149
151
 
150
- def add_set_upconvert_options_button
151
- @show_upconvert_options = new_jbutton( "Change upconvert options (started as #{LocalStorage[UpConvertEnglish] || 'not set'})" ) do
152
- setup_upconvert_options
153
- end
154
-
152
+ def change_upconvert_line_to_current
153
+ @upconv_line.set_text get_current_upconvert_as_phrase
155
154
  end
156
-
155
+
157
156
  UpConvertKey = 'upconvert_setting'
158
157
  UpConvertKeyExtra = 'upconvert_setting_extra'
159
158
  UpConvertEnglish = 'upconvert_english_name'
160
159
 
161
- def setup_upconvert_options
160
+ def add_setup_upconvert_options
162
161
  none = new_jbutton("reset upconvert options to default (none)")
163
- none.tool_tip = "Having no upconvert options is reasonably good, uses directx for scaling, nice for slow cpu's"
164
- p 'upconvert options started as:', LocalStorage[UpConvertKey]
162
+ none.tool_tip = "Having no upconvert options is reasonably good, might use directx for scaling, nice for slow cpu's"
165
163
  none.on_clicked {
166
164
  LocalStorage[UpConvertKey] = nil
167
165
  LocalStorage[UpConvertKeyExtra] = nil
168
166
  LocalStorage[UpConvertEnglish] = nil
167
+ display_current_upconvert_setting
169
168
  }
170
- medium_dvd = new_jbutton("set upconvert options to DVD-style input (high-quality input)") {
171
- LocalStorage[UpConvertKey] = "hqdn3d=2:1.5:3,scale=SCREEN_X:-1:0:0:3"
172
- LocalStorage[UpConvertKeyExtra] = "-sws 9 -ssf ls=75.0 -ssf cs=50.0"
173
- LocalStorage[UpConvertEnglish] = "DVD/HQ"
169
+ medium_dvd = new_jbutton("set upconvert options to DVD-style input") {
170
+ LocalStorage[UpConvertKey] = "pullup,softskip,hqdn3d=0:1:4:4,scale=SCREEN_X:-10:0:0:2"
171
+ # hqdn3d[=luma_spatial:chroma_spatial:luma_tmp:chroma_tmp]
172
+ LocalStorage[UpConvertKeyExtra] = "-sws 9 -ssf ls=75.0 -ssf cs=7.0"
173
+ LocalStorage[UpConvertEnglish] = "DVD"
174
174
  display_current_upconvert_setting
175
175
  }
176
176
  high_compression = new_jbutton("set upconvert options for playing back highly compressed video") {
177
177
  # -autoq 6 -vf pp [?]
178
- LocalStorage[UpConvertEnglish] = "high compress"
179
- LocalStorage[UpConvertKey] = "hqdn3d=7:7:5,pp=hb:y/vb:y,scale=SCREEN_X:-1:0:0:5"
180
- LocalStorage[UpConvertKeyExtra] = "-sws 9 -ssf ls=75.0 -ssf cs=75.0"
178
+ LocalStorage[UpConvertEnglish] = "high compressed"
179
+ LocalStorage[UpConvertKey] = "pullup,softskip,hqdn3d=0:1:4:4,pp=hb:y/vb:y,scale=SCREEN_X:-10:0:0:3" # ordering?
180
+ LocalStorage[UpConvertKeyExtra] = "-sws 9 -ssf ls=75.0 -ssf cs=25.0"
181
181
  display_current_upconvert_setting
182
+ # -Processing method: mplayer with accurate deblocking ??
182
183
  }
183
- new_jbutton("set upconvert options to aggressive DVD/HQ-style playback") {
184
- LocalStorage[UpConvertKey] = "hqdn3d=7:7:5,scale=SCREEN_X:-1:0:0:10"
184
+ new_jbutton("set upconvert options to experimental DVD/HQ-style playback") {
185
+ LocalStorage[UpConvertKey] = "pullup,softskip,hqdn3d=7:7:5,scale=SCREEN_X:-10:0:0:10"
185
186
  LocalStorage[UpConvertKeyExtra] = "-sws 9 -ssf ls=100.0 -ssf cs=75.0"
186
- LocalStorage[UpConvertEnglish] = "Aggressive DVD/HQ"
187
+ LocalStorage[UpConvertEnglish] = "experimental DVD/HQ"
187
188
  display_current_upconvert_setting
188
189
  }
189
- display_current_upconvert_setting
190
+
191
+ slider = JSlider.new
192
+ slider.setBorder(BorderFactory.createTitledBorder("Multiple factor of half screen widths (higher is better, but uses more cpu, default 4)"));
193
+
194
+ slider.maximum=6# LODO non 6 here...
195
+ slider.minimum=0
196
+ slider.setMajorTickSpacing(1)
197
+ slider.setPaintTicks(true)
198
+ slider.setPaintLabels(true)
199
+ slider.snap_to_ticks=true
200
+
201
+ slider.set_value LocalStorage['multiple_half_screens']
202
+
203
+ slider.add_change_listener { |event|
204
+ if slider.value >= 2
205
+ LocalStorage['multiple_half_screens'] = slider.value
206
+ else
207
+ show_blocking_message_dialog "you can't set it lower than 2 that wouldn't make any sense, since that's screen width"
208
+ end
209
+ }
210
+ slider.set_bounds(44, @starting_button_y, @button_width, 56)
211
+ 2.times {increment_button_location}
212
+ @panel.add(slider); #// content.add(slider, BorderLayout::SOUTH);
190
213
  end
191
214
 
192
215
  def display_current_upconvert_setting
193
- show_blocking_message_dialog "Upconvert options are set to #{LocalStorage[UpConvertEnglish] || 'none'}"
216
+ change_upconvert_line_to_current
217
+ show_blocking_message_dialog get_current_upconvert_as_phrase
218
+ end
219
+
220
+ def get_current_upconvert_as_phrase
221
+ settings = LocalStorage[UpConvertEnglish]
222
+ "Upconvert options #{ settings ? "are set to #{settings}" : "not currently set"}"
194
223
  end
195
224
 
196
225
  def get_upconvert_vf_settings
197
226
  template = LocalStorage[UpConvertKey]
198
227
  if template
199
228
  # choose width of widest monitor (why would they display it on the other?)
200
- x = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment.getScreenDevices.map{|gd| gd.display_mode.width}.max
201
- outgoing = template.gsub('SCREEN_X', x.to_i.to_s) # has to be an integer...
202
- outgoing
229
+ screen_x = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment.getScreenDevices.map{|gd| gd.display_mode.width}.max.to_i
230
+ screen_multiple = LocalStorage['multiple_half_screens']/2
231
+ template.gsub('SCREEN_X', (screen_x*screen_multiple).to_i.to_s) # has to be an integer...
203
232
  else
204
233
  nil
205
234
  end
@@ -269,7 +298,7 @@ module SensibleSwing
269
298
  drive, volume_name, dvd_id = choose_dvd_drive_or_file true
270
299
  # display it, allow them to copy and paste it out
271
300
  out = nil
272
- t = Thread.new {out= `mplayer dvdnav:///#{drive} -identify -frames 0 2>&1| grep LENGTH`}
301
+ t = Thread.new {out= `mplayer dvdnav:// -dvd-device #{drive} -identify -frames 0 2>&1| grep LENGTH`}
273
302
  id_string = "\"disk_unique_id\" => \"#{dvd_id}\", # #{volume_name}"
274
303
  show_copy_pastable_string "#{drive} #{volume_name} for your copying+pasting pleasure (highlight, then ctrl+c to copy)\n
275
304
  This is USED eventually to identify a disk to match it to its EDL, later.", id_string
@@ -320,14 +349,12 @@ module SensibleSwing
320
349
  EOL
321
350
  @parse_srt.on_clicked do
322
351
  filename = new_existing_file_selector_and_select_file("Pick srt file:")
323
- parsed = SubtitleProfanityFinder.edl_output filename, {}, 0.35, 0.25 # PUT MOVIE SPECIFIC OFFSET TIMINGS HERE
352
+ parsed = SubtitleProfanityFinder.edl_output filename, {}, 0, 0 # 0.35, 0.25 # PUT MOVIE SPECIFIC OFFSET SUBTITLE TIMINGS HERE LODO prompt :P
324
353
  File.write(EdlTempFile, "# add these into your mute section if they are offensive\n" + parsed)
325
- open_file_to_edit_it filename
354
+ open_file_to_edit_it filename, true
326
355
  open_file_to_edit_it EdlTempFile
327
356
  end
328
357
 
329
- add_set_upconvert_options_button
330
-
331
358
  add_text_line 'Create Options that first create/use a local intermediary file:'
332
359
 
333
360
  @preview_section = new_jbutton( "Preview a certain time frame from fulli file (edited)" )
@@ -451,7 +478,11 @@ module SensibleSwing
451
478
  add_text_line "Welcome to Sensible Cinema!"
452
479
  @starting_button_y += 10 # kinder ugly...
453
480
  add_text_line " Rest mouse over buttons for \"help\" type descriptions (tooltips)."
454
- add_text_line ""
481
+ if LocalStorage[UpConvertEnglish]
482
+ add_text_line " Upconvert settings are at:" + LocalStorage[UpConvertEnglish]
483
+ else
484
+ add_text_line ""
485
+ end
455
486
  add_text_line ""
456
487
 
457
488
  if we_are_in_upconvert_mode
@@ -493,9 +524,16 @@ module SensibleSwing
493
524
  setIconImage(ImageIcon.new(__DIR__ + "/../vendor/monkey.png").getImage())
494
525
  check_for_various_dependencies
495
526
  end
527
+
528
+ def run_smplayer_non_blocking *args
529
+ @background_thread = Thread.new {
530
+ run_smplayer_blocking *args
531
+ }
532
+ end
496
533
 
497
534
  def run_smplayer_blocking play_this, extra_options, force_use_mplayer
498
535
  extra_options += " -mouse-movements #{get_upconvert_secondary_settings} " # just in case smplayer also needs -mouse-movements... :)
536
+ extra_options += " -lavdopts threads=#{OS.cpu_count} " # just in case this helps [supposed to with H.264] :)
499
537
  if OS.mac? || force_use_mplayer
500
538
  @_run_smplayer_instructions ||= show_mplayer_instructions
501
539
  conf_file = File.expand_path './mplayer_input_conf'
@@ -507,26 +545,33 @@ module SensibleSwing
507
545
  extra_options += " -font #{ENV['SystemRoot']}\\fonts\\ARIAL.TTF " # would need EXTRA ESCAPING FOR SMPLAYER USE
508
546
  conf_file = conf_file[2..-1] # strip off drive letter, which it doesn't like no sir
509
547
  end
548
+ extra_options += " -fs " # full screen
510
549
  c = "mplayer #{extra_options} #{"-vf " + get_upconvert_vf_settings if get_upconvert_vf_settings} -input conf=\"#{conf_file}\" -mouse-movements \"#{play_this}\" "
511
550
  else
512
551
  if OS.windows?
513
552
  extra_options += " -vo direct3d " # more light nvidia...should be ok...
514
553
  end
515
554
  config_path = set_smplayer_opts extra_options
516
- c = "smplayer_portable \"#{play_this}\" -config-path \"#{File.dirname config_path}\" -close-at-end "
555
+ c = "smplayer_portable \"#{play_this}\" -fullscreen -config-path \"#{File.dirname config_path}\" -close-at-end "
517
556
  end
518
557
  puts c
519
558
  system_blocking c
520
559
  end
521
560
 
522
561
  def set_smplayer_opts to_this, show_subs = false
562
+ p 'set smplayer opts to this:' + to_this
523
563
  smplayer_prefs_file = File.expand_path("~/.smplayer/smplayer.ini")
524
564
  old_prefs = File.read(smplayer_prefs_file) rescue ''
525
565
  old_prefs = "[advanced]\nmplayer_additional_options=\nmplayer_additional_video_filters=\n[subtitles]\nautoload_sub=false\n[performance]\npriority=3" unless old_prefs.contain? 'mplayer_additional_options='
526
566
  new_prefs = old_prefs.gsub(/mplayer_additional_options=.*/, "mplayer_additional_options=#{to_this}")
527
567
  new_prefs.gsub!(/autoload_sub=.*$/, "autoload_sub=#{show_subs.to_s}")
528
- p 'put upconvert options in as vf', get_upconvert_vf_settings
529
- new_prefs.gsub!(/mplayer_additional_video_filters=.*$/, "mplayer_additional_video_filters=\"#{get_upconvert_vf_settings}\"")
568
+ upconvert_settings = get_upconvert_vf_settings
569
+ if upconvert_settings.present?
570
+ p 'put upconvert options in as vf', upconvert_settings
571
+ else
572
+ p 'not using upconvert'
573
+ end
574
+ new_prefs.gsub!(/mplayer_additional_video_filters=.*$/, "mplayer_additional_video_filters=\"#{upconvert_settings}\"")
530
575
  new_prefs.gsub!(/priority=.*$/, "priority=3") # normal priority...scary otherwise! lodo tell smplayer...
531
576
  FileUtils.mkdir_p File.dirname(smplayer_prefs_file) # case it doesn't exist'
532
577
  File.write(smplayer_prefs_file, new_prefs)
@@ -562,8 +607,7 @@ module SensibleSwing
562
607
  filename.downcase!
563
608
  File.write(filename, input) unless File.exist?(filename) # lodo let them choose name (?)
564
609
  open_file_to_edit_it filename
565
- end
566
-
610
+ end
567
611
 
568
612
  def system_blocking command, low_prio = false
569
613
  return true if command =~ /^@rem/ # jruby+MRI bug, I think...
@@ -582,13 +626,13 @@ module SensibleSwing
582
626
  if piddy
583
627
  # piddy.SetPriority low_prio # this call can seg fault at times...yikes...JRUBY-5422
584
628
  pid = piddy.ProcessId # this doesn't seg fault, tho
585
- system_original("vendor\\setpriority -lowest #{pid}") # be able to use the PID on the command line
629
+ system_original("vendor\\setpriority -lowest #{pid}") # use the PID on the command line
586
630
  else
587
631
  # XXXX first one always fails [?] huh?
588
632
  p 'unable to find to set priority ' + exe_name
589
633
  end
590
634
  rescue Exception => e
591
- p 'warning, got exception trying to set priority [jruby? ...]', e
635
+ p 'warning, got exception trying to set priority [jruby prob? ...]', e
592
636
  end
593
637
  end
594
638
  print out.read # let it finish
@@ -600,7 +644,7 @@ module SensibleSwing
600
644
  end
601
645
 
602
646
  def system_non_blocking command
603
- Thread.new { system_original command }
647
+ @background_thread = Thread.new { system_original command }
604
648
  end
605
649
 
606
650
  if respond_to?(:system)
@@ -615,35 +659,35 @@ module SensibleSwing
615
659
  writeOut.close
616
660
  end
617
661
 
618
- def play_dvd_smplayer_unedited use_mplayer_instead = false
619
- # LODO really even if there are 2 it should still pick out the title track...hmm...on demand :P
662
+ def play_dvd_smplayer_unedited use_mplayer_instead = false, show_instructions = true
620
663
  drive, dvd_volume_name, dvd_id, edl_path_maybe_nil, descriptors_maybe_nil = choose_dvd_or_file_and_edl_for_it false
621
664
  if descriptors_maybe_nil
622
665
  title_track_maybe_nil = get_title_track(descriptors_maybe_nil, false)
623
666
  end
624
- file_to_play = "dvdnav://#{title_track_maybe_nil}/#{drive}"
625
- options = " -osd-fractions 2 -nocache "
626
- # want this even with smplayer I guess...
627
- @play_smplayer_warn ||= show_mplayer_instructions <<-EOL
628
- 'o' key: turn on on-screen-display timestamps (note: the OSD timestamps [upper left] are 30 fps so will need to be converted to use).
629
- 'v' key: turn off subtitles.
630
- '.' key: step one frame.
631
- EOL
667
+ file_to_play = "dvdnav://#{title_track_maybe_nil}"
668
+ options = " -osd-fractions 2 -nocache -dvd-device #{drive} "
669
+ if show_instructions
670
+ # want this even with smplayer sometimes I guess...
671
+ @play_smplayer_warn ||= show_mplayer_instructions
672
+ end
632
673
 
633
- Thread.new { run_smplayer_blocking file_to_play, options, use_mplayer_instead }
674
+ run_smplayer_non_blocking file_to_play, options, use_mplayer_instead
634
675
 
635
676
  end
636
677
 
637
678
  EdlTempFile = Dir.tmpdir + '/mplayer.temp.edl'
638
679
 
639
- def show_mplayer_instructions extra = ''
640
- show_non_blocking_message_dialog <<-EOL + extra
680
+ def show_mplayer_instructions
681
+ show_non_blocking_message_dialog <<-EOL
641
682
  About to run mplayer.
642
683
  To control it, use
643
684
  spacebar : pause,
644
- double clicky : toggle full screen,
685
+ double clicky/right click : toggle full screen,
645
686
  arrow keys (left, right, up down) to seek/scan
646
687
  / and * : inc/dec volume.
688
+ 'o' key: turn on on-screen-display timestamps (note: the OSD timestamps [upper left] are 30 fps so will need to be converted to use).
689
+ 'v' key: turn off subtitles.
690
+ '.' key: step one frame.
647
691
  EOL
648
692
  end
649
693
 
@@ -663,8 +707,8 @@ module SensibleSwing
663
707
  else
664
708
  using_dvd = true
665
709
  title_track = get_title_track(descriptors)
666
- extra_mplayer_commands << "-nocache"
667
- play_this = "dvdnav://#{title_track}/#{drive_or_file}"
710
+ extra_mplayer_commands << " -nocache -dvd-device #{drive_or_file} "
711
+ play_this = "dvdnav://#{title_track}"
668
712
  end
669
713
  if edl_path
670
714
  descriptors = EdlParser.parse_file edl_path
@@ -700,8 +744,7 @@ module SensibleSwing
700
744
  # prefer english, attempt to disable subtitles, set edl...
701
745
  extra_mplayer_commands << "-alang en -nosub -noautosub -forcedsubsonly -sid 1000 -edl #{File.expand_path EdlTempFile}" # some maybe no longer necessary, but avoid subtitles by default...
702
746
 
703
- # LODO -fullscreen ...
704
- Thread.new { run_smplayer_blocking play_this, extra_mplayer_commands.join(' '), false}
747
+ run_smplayer_non_blocking play_this, extra_mplayer_commands.join(' '), false
705
748
  end
706
749
 
707
750
  def assert_ownership_dialog
@@ -835,9 +878,13 @@ module SensibleSwing
835
878
  end
836
879
  end
837
880
 
838
- def open_file_to_edit_it filename
881
+ def open_file_to_edit_it filename, start_minimized=false
839
882
  if OS.windows?
840
- system_non_blocking "notepad \"#{filename}\""
883
+ if start_minimized
884
+ system_non_blocking "start /min notepad \"#{filename}\""
885
+ else
886
+ system_non_blocking "notepad \"#{filename}\""
887
+ end
841
888
  else
842
889
  system_non_blocking "#{OS.open_file_command} \"#{filename}\""
843
890
  end
@@ -897,7 +944,8 @@ module SensibleSwing
897
944
  end
898
945
 
899
946
  def show_copy_pastable_string(message, value)
900
- get_user_input message, value, true
947
+ RubyClip.set_clipboard value
948
+ get_user_input message + " (has been copied to clipboard)", value, true
901
949
  end
902
950
 
903
951
  def parse_edl path
@@ -1127,7 +1175,7 @@ module SensibleSwing
1127
1175
  if success
1128
1176
  saved_to = save_to + '.avi'
1129
1177
  if run_mplayer_after_done
1130
- Thread.new { run_smplayer_blocking saved_to, '', false}
1178
+ run_smplayer_non_blocking saved_to, '', false
1131
1179
  else
1132
1180
  if File.exist?(saved_to) && (File.size(saved_to).to_f/File.size(file_from) < 0.5) # less than 50% size is suspicious...indeed...check if exists for unit tests.
1133
1181
  show_blocking_message_dialog("Warning: file size differs by more than 50%--it's possible that transcoding failed somehow")
@@ -1176,7 +1224,7 @@ module SensibleSwing
1176
1224
  end
1177
1225
  names = opticals.map{|d| d.Name + "\\" + " (" + (d.VolumeName || 'Insert DVD to use') + ")"}
1178
1226
  if !force_choose_only_dvd_drive && !has_at_least_one_dvd_inserted
1179
- names += ['No DVD mounted so choose Local File (or insert DVD, re-try)']
1227
+ names += ['No DVD mounted so choose Local File (or insert DVD, re-try)'] # LODO cannot read it...
1180
1228
  used_local_file_option = true
1181
1229
  end
1182
1230
 
@@ -1203,15 +1251,15 @@ module SensibleSwing
1203
1251
  raise unless selected_idx == 0 # it was our only option...
1204
1252
  filename = new_existing_file_selector_and_select_file("Select yer previously grabbed from DVD file")
1205
1253
  assert_ownership_dialog
1206
- @_choose_dvd_drive_or_file = [filename, File.basename(filename), NonDvd]
1254
+ return [filename, File.basename(filename), NonDvd]
1207
1255
  else
1208
1256
  disk = opticals[selected_idx]
1209
1257
  out = show_non_blocking_message_dialog "calculating disk's unique id..." # useful, believe it or not
1210
1258
  dvd_id = DriveInfo.md5sum_disk(disk.MountPoint)
1211
1259
  out.dispose
1212
1260
  @_choose_dvd_drive_or_file = [disk.MountPoint, opticals[selected_idx].VolumeName, dvd_id]
1261
+ return @_choose_dvd_drive_or_file
1213
1262
  end
1214
- return @_choose_dvd_drive_or_file
1215
1263
  else
1216
1264
  raise 'did not select a drive...'
1217
1265
  end
@@ -1239,11 +1287,36 @@ module SensibleSwing
1239
1287
  box.add_item drive
1240
1288
  }
1241
1289
  add box
1242
- pack
1290
+ pack # how do you get this arbitrary size? what the...
1243
1291
  end
1244
1292
  end
1245
1293
  end
1246
1294
 
1295
+ class String
1296
+ def present?
1297
+ length > 0
1298
+ end
1299
+ end
1300
+
1301
+ class NilClass
1302
+ def present?
1303
+ false
1304
+ end
1305
+ end
1306
+ class Object
1307
+ def present?
1308
+ true
1309
+ end
1310
+ end
1311
+
1312
+ class Array
1313
+ def present?
1314
+ length > 0
1315
+ end
1316
+ end
1317
+
1318
+
1319
+
1247
1320
  if $0 == __FILE__
1248
1321
  if ARGV.index('-h') || ARGV.index('--help')
1249
1322
  puts 'syntax: [--create-mode]'