sensible-cinema 0.16.7 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,10 @@
1
+ == 0.17.0 ==
2
+
3
+ Grab using a different codec (wish I could grab to the *same* codec)
4
+ Also note that, though Sensible Cinema doesn't do this yet (ping me if you want it),
5
+ RiffTrax provides players, capability, and files to be able to "overlay" a video
6
+ with another person's voice/audio.
7
+
1
8
  == 0.16.7 ==
2
9
 
3
10
  Accomodate for disks that have scratches in them better.
data/LICENSE CHANGED
@@ -15,14 +15,15 @@ that program, either.
15
15
  You can ask the authors of that program if it is legal. Apparently
16
16
  libdvdcss that it uses has never been challenged in court, and uses a slightly different algorithm
17
17
  than those that have.
18
- Note also that fair use does allow one to "record" things (especially things that they own)
19
- for personal use/backup.
18
+ Note also that fair use at times does allow one to "record" things for personal use/backup.
20
19
  Using sensible-cinema is probably not any more unethical than ripping your DVD collection to your hard
21
20
  drive so you can keep your DVD's all in one place. It's about the same as ripping a DVD, editing
22
- it in Windows Movie Maker to take out the bad scenes, then watching that.
21
+ it in Windows Movie Maker to take out the bad scenes, then watching it.
22
+ It's about the same as using VLC Media Player to view a DVD, which also uses libdvdcss.
23
23
  Also note that if you watch an edited DVD, your are using a DVD player that conforms
24
24
  with DMCA specifications, so that might have some influence.
25
25
 
26
+
26
27
  In general, you are responsible for your actions and use of this program.
27
28
  It is possible that the authors of sensible-cinema are not cupable of anything
28
29
  regarding its use themselves, since they re-distribute no edited media,
data/README CHANGED
@@ -1,19 +1,31 @@
1
- Sensible-cinema is a program that allows you to do pre-programmed edit decision lists (i.e. "mute out"
2
- or "bleep out" scene lists) for DVD's.
3
- An experimental player also works on arbitrary media players like netflix online, vlc, hulu, etc.
1
+ Sensible-cinema is a program that allows you to apply pre-programmed edit decision lists (i.e. "mute out"
2
+ or "bleep out" scene lists or skip scenes) for DVD's.
4
3
 
5
- To install:
4
+ An experimental player also works on arbitrary media players like netflix online, vlc, hulu, etc, but is currently disabled.
5
+
6
+ It is basically a linear editor [1] that applies Edit Decision Lists [2] to videos, by wrapping
7
+ a few freely available open source (GPL) programs [2].
8
+
9
+ [1] http://en.wikipedia.org/wiki/Linear_video_editing
10
+ [2] http://en.wikipedia.org/wiki/Edit_decision_list
11
+ [3] http://www.gnu.org/licenses/
12
+
13
+ To use it, basically install it, then run it. It will come up with some windows where you choose what to do
14
+ (edit a list, apply a list to a DVD, etc.)
15
+
16
+ == Installation ==
6
17
 
7
18
  download the latest .zip version file from: http://rogerdpack.t28.net/sensible-cinema/
8
- unzip it
9
- run the file "run_sensible_cinema.bat" from within it.
10
- Note that you'll need java installed for it to work, but chances are you already have it.
19
+ unzip it (right click -> Extract all)
20
+ "click into it" and search for and start the file "run sensible cinema.bat"
11
21
 
12
- == Programming Your Own Edit List ==
22
+ Note that you'll need java previously installed for it to work, but chances are you already have it.
13
23
 
14
- To program sensible-cinema, you create an edit decision list it can use.
24
+ == Creating Your Own List ==
15
25
 
16
- An Edit List looks something like this example:
26
+ You create an edit decision list for sensible cinema to use against whatever you want.
27
+
28
+ An Edit Decision List looks something like this example:
17
29
 
18
30
  Here's one with more detail
19
31
 
@@ -32,52 +44,59 @@ Q. How do I watch these on my TV?
32
44
  A. You can burn a DVD with it. First create it on your hard drive. Then use
33
45
  Dvd Flick ()a good one for windows) (here's a screencast of using it within http://rogerdpack.t28.net/sensible-cinema)
34
46
  For OS X : iDVD might work well.
35
- You could also drag your laptop over to your TV and hook it in that way.
36
- If you're interested in being able to "beam" it from your computer to your game console (ex: PS3) ping me--I might have something in mind.
47
+ You could also drag your laptop over to your TV and hook it in that way. Or buy a very long cord and plug it in as an extra monitor.
48
+ If you're interested in also being able to "beam" it from your computer to your game console (ex: PS3) ping me--I might have
49
+ something in mind that could eventually help.
37
50
 
38
51
  == Caveats ==
39
52
 
40
- NB that "someone" will have to create a scene descriptions list, per DVD/online movie.
41
- Unless it already exists, then "someone" already has, so you don't have to. Fortunately
42
- only one person has to do it, once, for everybody to benefit, and the editing process is fairly easy.
43
- You can employ somebody to do it, or do it yourself, then submit it.
53
+ NB that "someone" has to create a edit decision lists, per DVD.
54
+ If one doesn't yet exist for the DVD you want edited,
55
+ you could employ somebody to create it, or create it yourself. Make sure to submit it
56
+ back to us when you're done, so that everyone can benefit from it.
57
+ Fortunately only one person has to do it, once, for everybody to benefit, and the editing process is fairly easy.
44
58
 
45
59
  == License ==
46
60
 
47
- See the LICENSE file for licensing, usage terms (basically gplv3 for all the source).
48
- (c) 2010 Roger Pack
61
+ See the included LICENSE file for licensing, usage terms (basically gplv3 for all the source).
62
+ Some other programs are (distributed separately and) called by this one, typically under the gplv2.
63
+
64
+ All files (c) 2010 Roger Pack
49
65
 
50
66
  == Related ==
51
67
 
52
- The concept isn't too novel. Some examples:
68
+ The concept isn't too novel. Some earlier examples:
53
69
 
54
70
  Edited "airplane edit" style movies.
55
- Commercial TV (ABC, NBC) show their own (edited) movies at times.
56
- Clean Flicks (used to) sell edited movies
71
+ Commercial TV (ABC, NBC) show their own (edited) movies.
57
72
  http://en.wikipedia.org/wiki/Linear_video_editing
58
73
  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.
59
- Normal movies versus "directors cut unedited" movies (one is sometimes preferable)
74
+ Normal movies versus "directors cut" versions of movies (one is at times preferable)
60
75
  http://en.wikipedia.org/wiki/Edit_decision_list (it's a linear editing tool, after all--so see the vast list of those)
61
- http://www.oreillynet.com/sysadmin/blog/2005/06/make_your_own_phantom_edit_wit.html (mplayer has had this ability for awhile).
62
- http://clearplay.com a commercial editor (tracks DVD's while they play--closed source, costs money, no user contribution possible), and only for DVD's (uses its own DVD-player in its current incantation).
76
+ Clean Flicks (used to) sell edited movies
77
+ http://www.mplayerhq.hu/DOCS/HTML/en/edl.html
78
+ 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).
79
+ http://clearplay.com a commercial editing player (tracks DVD's while they play--closed source, costs money, no user contribution possible), and only for DVD's.
80
+ 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).
63
81
  http://forum.bsplayer.com/feature-requests-feedback-suggestions/7157-chapter-playlist-scene-cut-3.html
64
82
  http://www.inmatrix.com "scene cut editor" of the zoom player
65
83
  http://wiki.xbmc.org/?title=EDL_(commercial_skipping)_and_SceneMarker_support (XBMC's scene cut support--also contains links to some other editors)
66
- htp://dvdshrink.info "Re-author" mode: to make "movie-only" backups, compilations, combine "flippers",.... DvdShrink has always had the ability to "crop or cut parts of a title" etc.
67
- The VCR and the record button, coupled with the pause+rewind button (edit out unwanted content).
68
- http://code.google.com/p/movie-content-editor (written in Python, controls VLC based on captions and scene lists)
84
+ 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.
85
+ The VCR with its record button, coupled with the stop+rewind button.
86
+ http://code.google.com/p/movie-content-editor (written in Python, controls VLC based on captions and edit decision lists, in realtime)
69
87
  http://www.imdb.com/swiki/special?ParentalGuideHelp (search for "scene description")
70
88
  http://www.mythtv.org/wiki/Removing_Commercials
71
89
  Using the remote control with the pause, mute, stop, fast forward, and play buttons, along with previous knowledge of scene locations
72
90
  The scissors and old VHS tapes (Clean Flicks' origin, BTW).
73
91
  Windows Movie Maker. Allows for users to cut and copy scenes of movies to their heart's content.
74
- http://forum.videolan.org/viewtopic.php?f=7&t=56998 VLC Media Player can do it with playlists
92
+ http://forum.videolan.org/viewtopic.php?f=7&t=56998 VLC Media Player using EDL's via playlists
75
93
  Corel WinDVD has "Quick Clip" settings for capturing on DVD.
76
94
  http://superuser.com/questions/85278/how-can-i-cut-scenes-out-of-a-dvd
95
+ http://blog.josephhall.com/2008/09/command-line-dvd-authoring-part-1.html
77
96
 
78
97
  == Feedback ==
79
98
 
80
- Feedback, including feature requests, comments, welcome.
99
+ Feedback, including feature requests, comments, etc. welcome.
81
100
 
82
101
  http://github.com/rdp/sensible-cinema (message me or create an issue for feedback/any requests/bugs)
83
- rogerdpack@gmail.com
102
+ or rogerdpack@gmail.com
@@ -2,4 +2,4 @@
2
2
  @rem disable any local rubyopt settings...
3
3
  @set RUBYOPT=
4
4
  @echo This window will display lots of debug message output!
5
- @cd sensible-cinema && java -cp "./vendor/cache/jruby-complete-1.5.5.jar" org.jruby.Main bin\sensible-cinema || echo you need to install java first!
5
+ @cd sensible-cinema && java -cp "./vendor/cache/jruby-complete-1.5.5.jar" org.jruby.Main bin\sensible-cinema || echo you need to install java first! Please report back the error you see! && pause
data/TODO CHANGED
@@ -2,71 +2,84 @@
2
2
 
3
3
  == probably next up+low prio ==
4
4
 
5
- "non realtime, non edity good" release (family only)
6
- add some "||'s" to bat files...
7
- popup "you may now watch": bring it to the front...
8
-
9
5
  == slightly lower than that ==
10
6
 
11
- note "I first use this to edit my temple movie"
12
- move the progressbar to the bottom :)
13
- license the first time they run it (gplv3)
14
- only pick that filename once per session...
15
- note "just a linear editor"
16
- note "just a wrapper"
7
+ Harry Potter audio!
8
+ re-run latest preview -> play in smplayer
9
+ license required first time they run it (gplv3)
17
10
  partner for filters (Jon, Karlie if interested...give beta)
18
11
  lotsa filters somehow
19
- my dvd's
20
- friend's dvd's
12
+ my dvd's (loose timestamps...)
21
13
  partners'...
22
14
  beta release/rinse and repeat with various ppl (once it's releasable...)
23
- a real'ish website
24
- checkbox for other license or something?
15
+ a real'ish-er website
16
+ checkbox for all other licenses or something?
25
17
  compare computer DVD playback with physical player...
26
- overlay audio
18
+ program the temple thing with it
19
+ note such "I first use this to edit my temple movie"
20
+ Andrew's e-mail
27
21
 
28
22
  == DVD backlog (unordered, some very low prio) ==
29
23
 
24
+ 60 fps?
25
+ ask if you can somehow more grab to the *same* codec (ffmpeg, mencoder mailing lists)
26
+ allowing for torn discs:
27
+ does VLC as a ripper even make sense in these cases? (as "just a ripper")?
28
+ try baking sode tooth paste...
29
+ split EDL's somehow into their own project/LLC...
30
+ add md5 "warning" when a disc fails doesn't match because of read failure...
31
+ not loop on preview view (smplayer)
32
+ note SSD or perhaps tons of RAM help with speed :)
33
+ only pick that filename once per session...
34
+ overlay audio
30
35
  assert that at least one drive has a DVD in it...maybe loop refuse with message until this?
31
36
  cool runnings:
32
37
  make a copy me--do they now match?
33
38
  get a working copy--do they match?
34
- md5sum the full rip files...appears necessary...
39
+ md5sum the full rip files...
35
40
  is it necessary?
36
- add button for md5sum
41
+ yes? add button for md5sum
37
42
  propaganda-ize
38
43
  alternative.to
39
- blogs that have ever mentioned clearplay
44
+ blogs that have ever mentioned clearplay :P
40
45
  play a bigger noise when totally done...(dvd flick has one...)
41
46
  vnc has a good looking license :)
42
47
  unzip instructions?
43
48
  prompt for name, auto populate with volume name
44
- LLC before ever pay anyone
45
- redo the edit buttons into an ordering of sorts...
49
+ LLC before ever pay anyone, if I ever do
50
+ redo the creation mode buttons into an ordering of sorts...
46
51
  note that this can corrupt your soul!
47
- plus figure out if mplayer is a fast forward feature...
52
+ don't watch it if it's dark! come on!
53
+ figure out if mplayer/smplayer as a player has a fast forward feature...
48
54
  several "play now" options...without a navigator of course :)
49
- one for watch unedited "as grabbing" (create mode)
50
- visualbasic
51
- "round conservatively, write no file" way
55
+ visualbasic-like playlist
56
+ one line at a time :P
57
+ provide link for cheap DVD decoder :)
58
+ "round conservatively, write no file" playback
52
59
  mplayer batch (playlist?)
53
- "round conservatively, yes write file" (+1 you track it)
54
60
  can generate mplayer EDL's and play them...hmm...smplayer them?
55
61
  update license too...
56
- get half-way through, start playing back as writing edited full copy
57
- maybe not all of these tho...
62
+ "round conservatively, yes write file"
63
+ then I guess they could play it back?
64
+ get half-way through (rip, start writing edited copy), then start playing back as writing edited full copy
65
+ one that's "play DVD to x, now play it muted, now play it to y" (playlist? batch?)
66
+ one for watch unedited "as grabbing" (in create mode)
67
+ can I do this super accurately anyway, more easily?
68
+ one that's "rip and save first 20 minutes, start me on that, do the whole thing..."
69
+ finalize my google doc on rippers et al.
58
70
  non parallelize
59
71
  can have different volume settings
60
- can insert other titles mid-stream [?]
72
+ can insert other sections (same disk) mid-stream :P
61
73
  these last two have gotta be lower prio than the rest...
62
74
  whichr: return nil
63
75
  install smplayer before mencoder [?]
64
76
  smaller .zip
65
77
  bundle 7z [?]
66
78
  remove note about it
67
- using, burning, creating "howto's"
79
+ using, burning, creating "howto's"
68
80
  better
69
81
  usability test them?
82
+ umm...shouldn't using be pretty straight forward tho?
70
83
 
71
84
  using+burning screencast
72
85
  editing screencast
@@ -76,18 +89,18 @@
76
89
  add an option "just save full disk (unedited) to hard drive..."
77
90
  note to people: can edit those to your liking
78
91
 
79
- imagemagick (ffmpeg) easier install...
80
- DRY up dependency installation code
81
- install them to cache2 or something...so I can cleanup the deploy code...
82
- advertise urug, ruby flow :)
83
- "Re-run most recent" disabled when there isn't one [?]
84
- re-do DVD EDL's that need it :P
92
+ imagemagick (ffmpeg) easier install...
93
+ DRY up dependency installation code
94
+ install dep's to cache2 or something...so I can cleanup the deploy code...
95
+ advertise urug, ruby flow :)
96
+ "Re-run most recent" disabled when there isn't one [?]
97
+ re-do DVD EDL's that need it :P
85
98
  all dogs go to heaven...finish EDL
86
- warn when labels exist and don't match...
87
- kill old mencoder instances more often...
99
+ warn when labels exist and don't match...
100
+ kill old mencoder instances more often...
88
101
  auto-download imagemagick, too
89
102
  check all the many options to see if there's a "cross platform way to split files accurately" besides my hacky kludge.
90
- can rip from a DVD-like folder (?)
103
+ can rip from a DVD-like local folder (would anybody ever need this?)
91
104
  ripping "redoes" a large last section, for combining. Can I avoid this?
92
105
  plus I do some copy, some ac3?
93
106
  @dvd flick do you need that frequent of i-frames?
@@ -324,4 +337,7 @@ create a "book edit list" (word x is at position y...)
324
337
 
325
338
  @smplayer: your CD config is awful.
326
339
  @mencoder: can't split
327
- something like you watch it *with* you friends and can all chat together...hmm...
340
+ something like you watch it *with* you friends and can all chat together...hmm...
341
+ donate money to several projects I like :)
342
+
343
+ @mencoder: ripping like this results in an (avidemux, VLC) fourcc of 'ugh': mencoder2 dvdnav://1 -oac copy -ovc copy -o D:\raw_rip_mpeg_example.avi -endpos 20 -dvd-device E:\
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.16.7
1
+ 0.17.0
@@ -23,18 +23,25 @@ module SensibleSwing
23
23
  def new_jbutton title, only_on_create_mode
24
24
  button = JButton.new title
25
25
  button.set_bounds(44, @starting_button_y, @button_width, 23)
26
- @starting_button_y += 30
26
+
27
27
  if only_on_create_mode
28
- if ARGV.index("--create-mode")
28
+ if ARGV.index("--create-mode") || ARGV.index("-c")
29
+ increment_button_location
29
30
  @panel.add button
30
31
  @buttons << button
31
32
  end
32
33
  else
34
+ increment_button_location
33
35
  @panel.add button
34
36
  @buttons << button
35
37
  end
36
38
  button
37
39
  end
40
+
41
+ def increment_button_location
42
+ @starting_button_y += 30
43
+ end
44
+
38
45
 
39
46
  Storage = Storage.new("sc")
40
47
 
@@ -62,19 +69,14 @@ module SensibleSwing
62
69
  jlabel.set_bounds(44,44,160,14)
63
70
  panel.add jlabel
64
71
  @starting_button_y = 120
65
- @button_width = 270
66
-
67
- @progress_bar = JProgressBar.new(0, 100)
68
- @progress_bar.set_bounds(44,80,@button_width,23)
69
- @progress_bar.visible = false
70
- panel.add @progress_bar
72
+ @button_width = 330
71
73
 
72
- @create = new_jbutton( "Create edited copy of DVD on Your Hard Drive", false )
74
+ @create = new_jbutton( "Create edited copy of DVD on Your Hard Drive, from the DVD", false )
73
75
  @create.on_clicked {
74
76
  do_copy_dvd_to_hard_drive false
75
77
  }
76
78
 
77
- @watch_unedited = new_jbutton("Watch DVD from hard drive unedited", true) # LODO watch in realtime option--then rippers and watchers can combine
79
+ @watch_unedited = new_jbutton("Watch the current DVD unedited (from hard drive)", true) # LODO watch in realtime option--then rippers and watchers can combine
78
80
  @watch_unedited.on_clicked {
79
81
  path = RubyWhich.new.which('smplayer')
80
82
  if(path.length == 0)
@@ -96,7 +98,7 @@ module SensibleSwing
96
98
  end
97
99
  }
98
100
 
99
- @open_list = new_jbutton("Open/Edit a pre-existing Edit Decision List", false)
101
+ @open_list = new_jbutton("Open/Edit a pre-existing DVD Edit Decision List", false)
100
102
  @open_list.on_clicked {
101
103
  dialog = FileDialog.new(self, "Pick file to edit")
102
104
  dialog.set_directory EDL_DIR
@@ -117,7 +119,7 @@ module SensibleSwing
117
119
  end
118
120
  }
119
121
 
120
- @rerun_preview = new_jbutton( "Re-run most recently performed preview", true )
122
+ @rerun_preview = new_jbutton( "Re-run most recently watched preview time", true )
121
123
  @rerun_preview.on_clicked {
122
124
  repeat_last_copy_dvd_to_hard_drive
123
125
  }
@@ -127,35 +129,50 @@ module SensibleSwing
127
129
  drive, volume, md5 = choose_dvd_drive
128
130
  input = <<-EOL
129
131
  # comments can go after a # on any line, for example this one.
132
+
130
133
  "mutes" => [
131
134
  "0:00:01.0", "0:00:02.0", "da..",
132
135
  ],
133
136
 
134
137
  "blank_outs" => [
135
- "1:01:00.0" , "1:02:00.0", "violent scene of some sort"
138
+ "1:01:00.0" , "1:02:00.0", "violent scene of some sort",
136
139
  ],
140
+
137
141
  "disk_unique_id" => "#{md5}",
138
- "title" => "#{volume}",
139
142
  "dvd_title_track" => "1" # most DVD's use title 1 for the main film. Some don't though. The correct number is discoverable by opening the film in VLC and choosing "playback -> title" while watching the main feature. If its not 1, then change this here. And delete this overly verbose comment either way :)
140
- EOL
143
+ #"not edited out stuff" => "fighting (punching) in a bar at 1:00:30 'ish could use some editing love"
144
+ #"title" => ""
145
+ EOL
141
146
  filename = EDL_DIR + "\\" + volume.gsub(' ', '_') + '.txt'
147
+ filename.downcase!
142
148
  File.write(filename, input) unless File.exist?(filename) # lodo let them choose name (?)
143
149
  open_file_to_edit_it filename
144
150
 
145
151
  end
146
152
 
147
- @display_unique = new_jbutton( "Calculate DVD's unique ID", true ).on_clicked {
153
+ @display_unique = new_jbutton( "Calculate current DVD's unique ID", true ).on_clicked {
148
154
  drive, volume, md5 = choose_dvd_drive
149
155
  # display it, allow them to copy and paste it out
150
156
  get_user_input("#{drive} #{volume} for your copying+pasting pleasure (highlight, then ctrl+c to copy) \n
151
157
  This is used to identify a disk to match it to its EDL, later.", "\"disk_unique_id\" => \"#{md5}\",")
152
158
  }
159
+
160
+ @progress_bar = JProgressBar.new(0, 100)
161
+ @progress_bar.set_bounds(44,@starting_button_y,@button_width,23)
162
+ @progress_bar.visible = false
163
+ panel.add @progress_bar
164
+
165
+ increment_button_location
166
+ increment_button_location
153
167
 
154
168
  @exit = new_jbutton("Exit", false).on_clicked {
155
169
  self.close
156
170
  }
157
171
 
158
- setSize 350,430
172
+ increment_button_location
173
+ increment_button_location
174
+
175
+ setSize 410, @starting_button_y
159
176
 
160
177
  check_for_dependencies
161
178
  end
@@ -260,9 +277,9 @@ module SensibleSwing
260
277
  if should_prompt_for_start_and_end_times
261
278
  show_blocking_message_dialog("Ok, let's preview just a portion of it. \nNote that you'll want to preview a section that wholly includes an edit decision in it\n For example, if it mutes from second 1 to second 10, you'll want to play from 00:00 to 00:12 or what not.\nAlso note that the first time you preview a section of a video, it will take like 20 minutes as it sets up the video for previewing.\nSubsequent previews will be faster, though, as long as you use the same filename.", "Preview")
262
279
  start_time = get_user_input("At what point in the video would you like to start your preview? (like 01:00 for starting at 1 minute)", Storage['start_time'])
263
- Storage['start_time'] = start_time
280
+ Storage['start_time'] = start_time if start_time
264
281
  end_time = get_user_input("At what point in the video would you like to finish your preview? (like 02:00 for ending at the 2 minute mark)", Storage['end_time'])
265
- Storage['end_time'] = end_time
282
+ Storage['end_time'] = end_time if end_time
266
283
  unless start_time and end_time
267
284
  JOptionPane.showMessageDialog(nil, " Please choose start and end", "Failed", JOptionPane::ERROR_MESSAGE)
268
285
  return
@@ -276,6 +293,7 @@ module SensibleSwing
276
293
  save_to_file_name = save_to_file_name.gsub(' ', '_').gsub( /\W/, '') # no punctuation for now...
277
294
  fc.set_file(get_drive_with_most_space_with_slash + save_to_file_name)
278
295
  save_to = fc.go
296
+ File.open(File.dirname(save_to) + "/test_file_to_see_if_we_have_permission_to_write_to_this_folder", "w").close
279
297
  dvd_title_track = descriptors["dvd_title_track"]
280
298
  # how does save_to map to fulli?
281
299
  fulli = save_to + ".fulli.tmp.avi"
@@ -306,8 +324,8 @@ module SensibleSwing
306
324
  temp_dir = Dir.tmpdir
307
325
  temp_file = temp_dir + '/vlc.temp.bat'
308
326
  File.write(temp_file, commands)
309
- popup = ModeLessDialog.new( "Copying to #{save_to}.\n" +
310
- "Running #{File.basename edit_list_path} against #{drive} (#{dvd_title}).\n" +
327
+ popup = NonBlockingDialog.new("Copying to #{save_to}.\n" +
328
+ "Applying EDL #{File.basename edit_list_path} against #{drive} (#{dvd_title}).\n" +
311
329
  "This could take quite awhile, and will prompt you when it is done.\n" +
312
330
  "You can close this window and continue working while it runs.\n" +
313
331
  "NB that the created file will be playable only with smplayer or VLC player.",
@@ -330,13 +348,14 @@ module SensibleSwing
330
348
  total_size = lines.length.to_f
331
349
  @progress_bar.visible=true
332
350
  @progress_bar.set_value(10) # start at 10% always, so they can see something.
333
- lines.each_with_index{|l, idx|
351
+ lines.each_with_index{|line, idx|
334
352
  if success
335
- success = system_blocking(l) unless ARGV.find{|a| a == '--test'} # this might not actually cancel out early for some reason...
336
- if l =~ /@rem /
353
+ puts "running #{line}"
354
+ success = system_blocking(line) unless ARGV.find{|a| a == '--test'} # this might not actually cancel out early for some reason...
355
+ if line =~ /@rem /
337
356
  success = true # these fail fof some reason?
338
357
  else
339
- p 'line failed ' + l unless success
358
+ p 'line failed: ' + line unless success
340
359
  end
341
360
  end
342
361
  @progress_bar.set_value(10 + idx/total_size*90)
@@ -348,7 +367,7 @@ module SensibleSwing
348
367
  if @after_success_once
349
368
  @after_success_once.call saved_to
350
369
  else
351
- show_blocking_message_dialog(" Done--you may now watch file #{saved_to} in SMPlayer or VLC player")
370
+ NonBlockingDialog.new(" Done--you may now watch file #{saved_to} in SMPlayer or VLC player")
352
371
  show_file = "explorer /e,/select,\"#{File.expand_path(saved_to).to_filename}\""
353
372
  system_non_blocking show_file
354
373
  #self.close # ?
@@ -377,7 +396,9 @@ module SensibleSwing
377
396
  if selected_idx
378
397
  disk = opticals[selected_idx]
379
398
  prefix = names[selected_idx][0..2]
380
- return prefix, opticals[selected_idx].VolumeName, DriveInfo.md5sum_disk(prefix)
399
+ puts "calculating disk's unique id..."
400
+ md5sum = DriveInfo.md5sum_disk(prefix)
401
+ return prefix, opticals[selected_idx].VolumeName, md5sum
381
402
  else
382
403
  puts 'did not select a drive...exiting'
383
404
  java.lang.System.exit 1
@@ -2,4 +2,4 @@
2
2
  @rem disable any local rubyopt settings...
3
3
  @set RUBYOPT=
4
4
  @echo This window will display lots of debug message output!
5
- @cd sensible-cinema && java -cp "./vendor/cache/jruby-complete-1.5.5.jar" org.jruby.Main bin\sensible-cinema --create-mode || echo you need to install java first!
5
+ @cd sensible-cinema && java -cp "./vendor/cache/jruby-complete-1.5.5.jar" org.jruby.Main bin\sensible-cinema --create-mode || echo you need to install java first! please report back the error you see! && pause
@@ -10,11 +10,14 @@ class MencoderWrapper
10
10
  class << self
11
11
 
12
12
  def get_header this_drive
13
+ out = ''
13
14
  if File.exist?(@big_temp) && File.exist?(@big_temp + '.done')
14
- ''
15
- else
16
- "call mencoder dvd://#{@dvd_title_track} -sid 1000 -oac copy -lavcopts keyint=1 -ovc lavc -o #{@big_temp} -dvd-device #{this_drive} && echo got_file > #{@big_temp}.done\n"
15
+ out = '@rem '
17
16
  end
17
+ # equivalent of ffmpeg's -target ntsc-dvd...I think...except that aspect thing terrifies me...
18
+ lavcopts = "vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=1:vstrict=0:acodec=ac3:abitrate=192:aspect=4/3"
19
+ #lavcopts = "keyint=1"
20
+ out + "call mencoder dvdnav://#{@dvd_title_track} -sid 1000 -oac copy -lavcopts #{lavcopts} -ofps 30000/1001 -ovc lavc -o #{@big_temp} -dvd-device #{this_drive} && echo got_file > #{@big_temp}.done\n"
18
21
  end
19
22
 
20
23
  def get_bat_commands these_mutes, this_drive, to_here_final_file, start_here = nil, end_here = nil, dvd_title_track = "1"
@@ -47,17 +50,19 @@ class MencoderWrapper
47
50
  }
48
51
  out += get_section previous_end, end_here || 1_000_000, false, to_here_final_file
49
52
  partials = (1..@idx).map{|n| "#{to_here_final_file}.#{n}.avi"}
50
-
51
- out += "del #{to_here_final_file}\n"
53
+ to_here_final_file = to_here_final_file + ".avi"
54
+ if File.exist? to_here_final_file
55
+ FileUtils.rm to_here_final_file # raises on failure...which is what we want I think
56
+ end
52
57
  # ridiculous
53
- out += "call mencoder #{partials.join(' ')} -o #{to_here_final_file}.avi -ovc copy -oac copy\n"
58
+ out += "call mencoder #{partials.join(' ')} -o #{to_here_final_file} -ovc copy -oac copy\n"
54
59
  # LODO only do this if they want to watch it on their computer, with something other than smplayer, or want to make it smaller, as it takes *forever* longer
55
60
  # LODO the "insta play" mode, or the "faster rip" mode (related...)
56
61
  out += "@rem call mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -vf scale=720:480,harddup -srate 48000 -af lavcresample=48000 -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 30000/1001 #{partials.join(' ')} -o #{to_here_final_file}\n"
57
62
 
58
- out += "@rem del #{@big_temp}\n" # LODO
59
- out += "del " + partials.join(' ') + "\n"# LODO
60
- out += "echo wrote to #{to_here_final_file}.avi"
63
+ out += "@rem del #{@big_temp}\n" # LODO no @rem
64
+ out += "@rem del " + partials.join(' ') + "\n"# LODO no @rem
65
+ out += "echo wrote to #{to_here_final_file}"
61
66
  out
62
67
  end
63
68
 
@@ -70,6 +75,9 @@ class MencoderWrapper
70
75
  codecs = should_mute ? "-vcodec copy -acodec ac3 -vol 0 " : "-vcodec copy -acodec copy " # LODO the ac3 must match the copy...hmm...
71
76
  # ffmpeg -i from_here.avi -vcodec copy -acodec copy -ss 1:00 -t 1:00 out.avi
72
77
  partial_filename = to_here_final_file + '.' + (@idx += 1).to_s + '.avi'
78
+ if File.exist? partial_filename
79
+ FileUtils.rm partial_filename
80
+ end
73
81
  "del #{partial_filename}\ncall ffmpeg -i #{@big_temp} #{codecs} -ss #{start} -t #{endy} #{partial_filename}\n"
74
82
  end
75
83
 
@@ -71,7 +71,7 @@ module SensibleSwing
71
71
  end
72
72
  end
73
73
 
74
- class ModeLessDialog < JDialog
74
+ class NonBlockingDialog < JDialog
75
75
  def initialize title_and_display_text, close_button_text= 'Close'
76
76
  super nil
77
77
  lines = title_and_display_text.split("\n")
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sensible-cinema}
8
- s.version = "0.16.7"
8
+ s.version = "0.17.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Roger Pack"]
12
- s.date = %q{2010-12-06}
12
+ s.date = %q{2010-12-08}
13
13
  s.email = %q{rogerdpack@gmail.com}
14
14
  s.executables = ["sensible-cinema", "sensible-cinema-cli"]
15
15
  s.extensions = ["ext/mkrf_conf.rb"]
@@ -16,8 +16,13 @@ describe MencoderWrapper do
16
16
  @out.should include("e:\\")
17
17
  end
18
18
 
19
- it "should have what looks like a working mencoder rip command" do
20
- @out.should match(/mencoder dvd.*keyint=1/)
19
+ it "should have what looks like a working mencoder grab command" do
20
+ @out.should match(/mencoder dvdnav:/)
21
+ @out.should match(/dvdnav.*lavcopt.*keyint=1/)
22
+ @out.should match(/dvdnav.*lavcopt.*mpeg2video/)
23
+ end
24
+
25
+ it "should avoid subtitles" do
21
26
  @out.should match(/-sid 1000/)
22
27
  end
23
28
 
@@ -38,7 +43,18 @@ describe MencoderWrapper do
38
43
  @out.should include(" -o to_here.fulli.tmp.avi")
39
44
  FileUtils.touch 'to_here.fulli.tmp.avi'
40
45
  go
41
- @out.should_not include(" -o to_here.fulli.tmp.avi")
46
+ @out.should match(/@rem.*-o to_here.fulli.tmp.avi/)
47
+ end
48
+
49
+ it "should raise if the output file is held by some other process" do
50
+ for file in ['to_here.avi', 'to_here.1.avi']
51
+ open_handle = File.open(file, 'w')
52
+ begin
53
+ proc { go }.should raise_error(/Permission denied/)
54
+ ensure
55
+ open_handle.close
56
+ end
57
+ end
42
58
  end
43
59
 
44
60
  it "should use newline every line" do
@@ -69,10 +85,6 @@ describe MencoderWrapper do
69
85
  @out.should_not include(".avi.1 ")
70
86
  end
71
87
 
72
- it "should not overuse the avi extension" do
73
- @out.should_not include("avi.1.avi")
74
- end
75
-
76
88
  it "should concatenate (merge) them all together" do
77
89
  @out.should match(/mencoder.* -ovc copy -oac copy/)
78
90
  @out.should match(/mencoder to_here.1.avi/)
@@ -37,7 +37,7 @@ module SensibleSwing
37
37
  before do
38
38
  @subject = MainWindow.new
39
39
  @subject.stub!(:choose_dvd_drive) {
40
- ["drive", "volume", "19d121ae8dc40cdd70b57ab7e8c74f76"] # happiest baby on the block
40
+ ["drive", "Volume", "19d121ae8dc40cdd70b57ab7e8c74f76"] # happiest baby on the block
41
41
  }
42
42
  @subject.stub!(:get_mencoder_commands) { |*args|
43
43
  args[-4].should match(/abc/)
@@ -140,6 +140,11 @@ module SensibleSwing
140
140
  @subject.instance_variable_get(:@create_new_edl_for_current_dvd).simulate_click
141
141
  begin
142
142
  File.exist?( out ).should be_true
143
+ content = File.read(out)
144
+ p content
145
+ content.should_not include("\"title\"")
146
+ content.should include("disk_unique_id")
147
+ content.should include("dvd_title_track")
143
148
  ensure
144
149
  FileUtils.rm_rf out
145
150
  end
@@ -148,6 +153,6 @@ module SensibleSwing
148
153
  it "should display unique" do
149
154
  @subject.instance_variable_get(:@display_unique).simulate_click.should == "01:00"
150
155
  end
151
-
156
+
152
157
  end
153
158
  end
@@ -6,12 +6,12 @@ describe SensibleSwing do
6
6
 
7
7
  it "should close its modeless dialog" do
8
8
 
9
- dialog = ModeLessDialog.new("Is this modeless?")
10
- dialog = ModeLessDialog.new("Is this modeless?\nSecond lineLL")
11
- dialog = ModeLessDialog.new("Is this modeless?\nSecond lineLL\nThird line too!")
12
- dialog = ModeLessDialog.new("Can this take very long lines of input, like super long?")
9
+ dialog = NonBlockingDialog.new("Is this modeless?")
10
+ dialog = NonBlockingDialog.new("Is this modeless?\nSecond lineLL")
11
+ dialog = NonBlockingDialog.new("Is this modeless?\nSecond lineLL\nThird line too!")
12
+ dialog = NonBlockingDialog.new("Can this take very long lines of input, like super long?")
13
13
  #dialog.dispose # should get here :P
14
- # let them close it :P
14
+ # let user close it :P
15
15
  end
16
16
 
17
17
  it "should be able to convert filenames well" do
@@ -1,11 +1,27 @@
1
1
  # comments can go after a # on any line.
2
2
  "mutes" => [
3
- "0:00:01.0", "00:00:02.0", "dang",
3
+ "14:53.7", "14:55", "greetings sled g..",
4
+ #59:16
5
+ #59:22
6
+ #59:52 dang good apology
7
+ #1:02:08 "butt whipped"
8
+ #1:02:27 "butt whipping"
9
+ #1:01:40 "sled g... does it again"
4
10
  ],
5
11
 
12
+ # 57:20 'ish something father?
13
+
6
14
  "blank_outs" => [
7
- "1:16:50.0" , "1:17:00.0", "bad ..."
15
+ "58:40", "58:41", # bad arsenic, but I dislike lip reading.
16
+ "59:08", "59:09", # "
17
+ "1:16:57.0" , "1:16:57.5", "bad a..", # verified
18
+ # 15:22 irv beats his radio with pool cue should go...
19
+ "15:20", "15:30",
20
+ "59:15", "59:59",
21
+ "1:01:35", "1:01:45"
8
22
  ],
23
+
9
24
  "disk_unique_id" => "5a0a43f52e5d5e705fdfaa831b38409b",
10
- "title" => "COOL_RUNNINGS",
11
- "dvd_title_track" => "1"
25
+ "dvd_title_track" => "1",
26
+ "other stuff" => "fighting (punching) in a bar 1:00:30 'ish could use some editing"
27
+ # 1:01:42 "shutup snaka"
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 16
8
- - 7
9
- version: 0.16.7
7
+ - 17
8
+ - 0
9
+ version: 0.17.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Roger Pack
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-06 00:00:00 -07:00
17
+ date: 2010-12-08 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency