sensible-cinema 0.25.0 → 0.25.1
Sign up to get free protection for your applications and to get access to all the features.
- data/TODO +12 -1
- data/VERSION +1 -1
- data/bin/sensible-cinema +3 -1
- data/bin/sensible-cinema-cli +4 -4
- data/change_log_with_feature_list.txt +7 -0
- data/conclusions +6 -0
- data/lib/blanker.rb +20 -1
- data/lib/mouse.rb +1 -1
- data/lib/mouse_draw.rb +41 -0
- data/lib/muter.rb +2 -30
- data/lib/screen_tracker.rb +21 -9
- data/lib/subtitle_profanity_finder.rb +3 -1
- data/spec/notes +19 -1
- data/spec/screen_tracker.spec.rb +4 -4
- data/todo.upconvert +30 -19
- data/upconvert.bat +0 -0
- data/upconvert_netflix/latest2/go_no_upscaling.bat +1 -0
- data/upconvert_netflix/latest2/go_upscaling.bat +12 -0
- data/upconvert_netflix/latest2/push2.GRF +0 -0
- data/upconvert_netflix/latest2/setup_capture_coords.rb +27 -0
- data/upconvert_netflix/latest2/setup_directshow_filter_params.rb +29 -0
- data/upconvert_netflix/latest2/upconvert_from_screen_me2.avs +19 -0
- data/upconvert_netflix/{latest_now_possibly_oudated → old/latest_now_possibly_oudated}/push2.GRF +0 -0
- data/upconvert_netflix/{latest_now_possibly_oudated → old/latest_now_possibly_oudated}/upconvert_from_screen_me2.avs +0 -0
- data/upconvert_netflix/{position_window.png → old/position_window.png} +0 -0
- data/upconvert_netflix/{push_source_desktop.GRF → old/push_source_desktop.GRF} +0 -0
- data/upconvert_netflix/{upconvert_from_screen.avs → old/upconvert_from_screen.avs} +0 -0
- data/upconvert_netflix/{upconvert_from_screen_me.avs → old/upconvert_from_screen_me.avs} +0 -0
- data/upconvert_netflix/{upconvert_from_screen_me2.avs → old/upconvert_from_screen_me2.avs} +0 -0
- data/upconvert_netflix/{upconvert_from_screen_me_push_source.avs → old/upconvert_from_screen_me_push_source.avs} +0 -0
- data/upconvert_netflix/{uscreen.GRF → old/uscreen.GRF} +0 -0
- data/upconvert_netflix/{uscreen_me.GRF → old/uscreen_me.GRF} +0 -0
- data/zamples/edit_decision_lists/dvds/bambi.txt +1 -4
- data/zamples/edit_decision_lists/dvds/edls_being_edited/test_delete_list_for_experimenting_with.txt +2 -2
- data/zamples/edit_decision_lists/dvds/{edls_being_edited/flight_of_the_navigator.txt → flight_of_the_navigator.txt} +1 -1
- data/zamples/edit_decision_lists/dvds/if_a_man_answers.txt +43 -0
- metadata +22 -15
- data/upconvert_netflix/HOW_TO_USE.txt +0 -37
- data/zamples/edit_decision_lists/dvds/edls_being_edited/other_side_of_heaven.txt +0 -19
data/TODO
CHANGED
@@ -26,12 +26,17 @@
|
|
26
26
|
|
27
27
|
== yes do ordered in conjunction with the above probably ==
|
28
28
|
release at some point...Oliver? facebook?
|
29
|
-
snapshots of snow white "normal", then deploy pics
|
29
|
+
snapshots of snow white "normal", then deploy the various pics
|
30
30
|
lightning strike from various outlets...
|
31
31
|
research VOB
|
32
32
|
timesplits?
|
33
33
|
|
34
34
|
== yes do, un-ordered currently, from the various future release options ==
|
35
|
+
todo.upconvert
|
36
|
+
except I'm really close [?] with netflix instant upconverter...hmm...
|
37
|
+
new open button "edit the one for current DVD"
|
38
|
+
the other button should open in the "editing" EDL dir.
|
39
|
+
overlapping mute failure when you hit the "watch edited realtime" should popup.
|
35
40
|
split out the "dependency" code from main.
|
36
41
|
try buy edit lists from all x,y,z [?] maybe ask for them for free first? ()
|
37
42
|
http://www.familysafemovies.com
|
@@ -50,6 +55,7 @@
|
|
50
55
|
make it load faster! this is cuh-razy! or splash screen! yes!
|
51
56
|
netflix quality upconverter
|
52
57
|
want a prototype mplayer upconverter...I guess...
|
58
|
+
add back in scale for OS X, see if it's expensive or not...I'd guess not though...
|
53
59
|
research XBMC
|
54
60
|
@XBMC: your stuff is broken in at least these two ways (bug reports)
|
55
61
|
also are they 30fps or not? and how do they handle timesplits?
|
@@ -68,6 +74,7 @@
|
|
68
74
|
0.3 ... ? huh?
|
69
75
|
fix released version to work in mac
|
70
76
|
release capture filter, advertise it :)
|
77
|
+
report ffmpeg bug, mplayer various :P
|
71
78
|
note "you want to optimize your reverse blitting first... :)"
|
72
79
|
test speed of from DESKTOP versus HWND.
|
73
80
|
can use hwnd. Somehow automated.
|
@@ -81,6 +88,7 @@
|
|
81
88
|
urug again?
|
82
89
|
after works in mac. Why not?
|
83
90
|
if 2 EDL's, still can choose a title track
|
91
|
+
advertise virtual audio
|
84
92
|
auto-add largest title to the generator EDL
|
85
93
|
complain if times looks wrong...on playback? sum time
|
86
94
|
tighten old splits... [remove, really, I guess...sure while I only have few...and also add better instructions...]
|
@@ -89,6 +97,7 @@
|
|
89
97
|
@instructions "this is great for comparing srt's, except...when it isn't, then you have to..."
|
90
98
|
@instructions: full srt how-to document instead of tooltip [?] or combine the two! yes!
|
91
99
|
volume_name => dvd_volume_name
|
100
|
+
C-based stuff cleanup loose ends
|
92
101
|
why is the Sintel's EDL seemingly off?
|
93
102
|
ascertain how accurate mplayer EDL is...I guess compared to...umm...something?
|
94
103
|
fix discrepancy between EDL mplayer and ffmpeg...maybe a new button "accurate EDL playback"?
|
@@ -175,6 +184,8 @@
|
|
175
184
|
investigate: can I use zoomplayer max?
|
176
185
|
|
177
186
|
== DVD+-DVD-realtime backlog (totally unordered, some very low prio, basically all never do) ==
|
187
|
+
@ffdshow-tryouts: don't crash me!
|
188
|
+
conference it can "pick out songs" (like a music video? mp3's?)
|
178
189
|
check with WME plugins, add instructions, then note in the README "support for x..."
|
179
190
|
"1:07:5.718" , "1:07:10.447", "profanity", "ba.....", "Faraday that [ba.....] That ba He's gonna wish he never met us",
|
180
191
|
should have dots uh guess...
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.25.
|
1
|
+
0.25.1
|
data/bin/sensible-cinema
CHANGED
@@ -321,7 +321,9 @@ module SensibleSwing
|
|
321
321
|
if OS.mac?
|
322
322
|
'' # avoid odd message try appending the scale filter <sigh> I don't *want* the scale filter with no upconversion gah.
|
323
323
|
else
|
324
|
-
|
324
|
+
# until I find out if they were making me too slow on older comps'
|
325
|
+
# "pullup,softskip"
|
326
|
+
''
|
325
327
|
end
|
326
328
|
end
|
327
329
|
end
|
data/bin/sensible-cinema-cli
CHANGED
@@ -94,10 +94,10 @@ def go_sc(args)
|
|
94
94
|
screen_tracker = ScreenTracker.new_from_yaml File.binread(player_description), overlay
|
95
95
|
does_not_need_mouse_jerk = YAML.load_file(player_description)["does_not_need_mouse_movement"]
|
96
96
|
unless does_not_need_mouse_jerk
|
97
|
-
p 'yes mouse jitter' if $VERBOSE or $DEBUG
|
97
|
+
p 'yes using mouse jitter' if $VERBOSE or $DEBUG
|
98
98
|
Mouse.jitter_forever_in_own_thread # when this ends you know a snapshot was taken...
|
99
99
|
else
|
100
|
-
p '
|
100
|
+
p 'not using mouse jitter' if $VERBOSE or $DEBUG
|
101
101
|
end
|
102
102
|
|
103
103
|
# exit early if we just wanted a screen dump...a little kludgey...
|
@@ -105,7 +105,7 @@ def go_sc(args)
|
|
105
105
|
puts 'warning--only doing screen dump in t-minus 2s...'
|
106
106
|
sleep 2
|
107
107
|
puts 'snap!'
|
108
|
-
screen_tracker.
|
108
|
+
screen_tracker.dump_bmps
|
109
109
|
exit 1
|
110
110
|
end
|
111
111
|
screen_tracker.process_forever_in_thread
|
@@ -115,7 +115,7 @@ def go_sc(args)
|
|
115
115
|
|
116
116
|
OCR.unserialize_cache_from_disk # do this every time so we don't delete it if they don't have one...
|
117
117
|
|
118
|
-
puts "Opening the curtains... (please play in your other player now)"
|
118
|
+
puts "Opening the curtains... (please play in your other video player now)"
|
119
119
|
overlay.start_thread true
|
120
120
|
key_input = KeyboardInput.new overlay
|
121
121
|
key_input.start_thread # status thread
|
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.25.1 ==
|
2
|
+
|
3
|
+
Added ability to dynamically "find" which window contained the playing movie, and capture it, from desktop,
|
4
|
+
for upscaling or capturing.
|
5
|
+
|
6
|
+
added ability to "minimize" and "unminimize" a movie player window in order to "simulate" blanking.
|
7
|
+
|
1
8
|
== 0.25.0 ==
|
2
9
|
|
3
10
|
Created my own directshow screen capture filter to go along with netflix instant upconvert,
|
data/conclusions
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
"commercial" players, like windows media player, will "seek" based on 30 fps, even if
|
2
|
+
the underlying is 29.97
|
3
|
+
however if you allow them to just continue playing, they use wall time, which is 29.97 fps
|
4
|
+
|
5
|
+
makemkv can give you streams that are up to like 2s out of whack with the DVD. tsmuxer
|
6
|
+
seems to fix those though, if you unmux them.
|
data/lib/blanker.rb
CHANGED
@@ -47,11 +47,28 @@ else
|
|
47
47
|
@fr.set_visible(false) # hide it to start
|
48
48
|
end
|
49
49
|
|
50
|
-
@@use_mouse =
|
50
|
+
@@use_mouse = false
|
51
|
+
@@use_foreground_window_minimize = true
|
52
|
+
if @@use_foreground_window_minimize
|
53
|
+
require 'win32/screenshot'
|
54
|
+
SW_MINIMIZE = 6
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.minimize_hwnd hwnd
|
58
|
+
Win32::Screenshot::BitmapMaker.show_window(hwnd, SW_MINIMIZE)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.restore_hwnd hwnd
|
62
|
+
Win32::Screenshot::BitmapMaker.restore(hwnd)
|
63
|
+
end
|
51
64
|
|
52
65
|
def self.blank_full_screen! seconds
|
66
|
+
|
53
67
|
if @@use_mouse
|
54
68
|
Mouse.single_click_left_mouse_button
|
69
|
+
elsif @@use_foreground_window_minimize
|
70
|
+
@foreground_hwnd ||= Win32::Screenshot::BitmapMaker.foreground_window
|
71
|
+
minimize_hwnd @foreground_hwnd
|
55
72
|
else
|
56
73
|
# somewhat hacky work around for doze: http://www.experts-exchange.com/Programming/Languages/Java/Q_22977145.html
|
57
74
|
@fr.setAlwaysOnTop(false)
|
@@ -69,6 +86,8 @@ else
|
|
69
86
|
def self.unblank_full_screen!
|
70
87
|
if @@use_mouse
|
71
88
|
Mouse.single_click_left_mouse_button
|
89
|
+
elsif @@use_foreground_window_minimize
|
90
|
+
restore_hwnd @foreground_hwnd
|
72
91
|
else
|
73
92
|
# just move it off screen...lodo
|
74
93
|
@fr.set_location(-2100, -2100)
|
data/lib/mouse.rb
CHANGED
@@ -116,7 +116,7 @@ module Mouse
|
|
116
116
|
VK_LBUTTON = 0x01 # mouse left button for GetAsyncKeyState
|
117
117
|
|
118
118
|
def left_mouse_button_state
|
119
|
-
GetAsyncKeyState(VK_LBUTTON) # ignore a first
|
119
|
+
GetAsyncKeyState(VK_LBUTTON) # ignore a first response, which also tells us if it has changed at all since last call
|
120
120
|
if GetAsyncKeyState(VK_LBUTTON) == 0 # zero means up
|
121
121
|
:up
|
122
122
|
else
|
data/lib/mouse_draw.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'mouse'
|
2
|
+
|
3
|
+
|
4
|
+
class MouseDraw
|
5
|
+
|
6
|
+
def self.go
|
7
|
+
|
8
|
+
require 'java'
|
9
|
+
|
10
|
+
java_import 'javax.swing.JFrame'
|
11
|
+
java_import 'javax.swing.JButton'
|
12
|
+
java_import 'com.sun.awt.AWTUtilities'
|
13
|
+
|
14
|
+
f = JFrame.new
|
15
|
+
f.add JButton.new('capture window')
|
16
|
+
f.set_size(200,200)
|
17
|
+
|
18
|
+
AWTUtilities.set_window_opacity(f, 0.5)
|
19
|
+
|
20
|
+
# wait till mouse goes down...
|
21
|
+
while(Mouse.left_mouse_button_state == :up)
|
22
|
+
sleep 0.05
|
23
|
+
print '.'
|
24
|
+
end
|
25
|
+
f.undecorated = true
|
26
|
+
f.default_close_operation = JFrame::EXIT_ON_CLOSE
|
27
|
+
f.always_on_top = true
|
28
|
+
f.visible = true
|
29
|
+
f.set_location(Mouse.get_mouse_location)
|
30
|
+
while(Mouse.left_mouse_button_state == :down)
|
31
|
+
# set_size
|
32
|
+
end
|
33
|
+
#f.close
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
if $0 == __FILE__
|
40
|
+
MouseDraw.go
|
41
|
+
end
|
data/lib/muter.rb
CHANGED
@@ -53,38 +53,10 @@ module Muter
|
|
53
53
|
keybd_event(VK_VOLUME_DOWN, 0, KEYEVENTF_KEYUP, nil)
|
54
54
|
end
|
55
55
|
|
56
|
-
@@use_mouse = false # inventionzy
|
57
|
-
@@use_static_on_top = false # inventionzy
|
58
|
-
@@use_down_volume_button = true
|
59
|
-
|
60
|
-
def start_playing_static
|
61
|
-
@player = PlayAudio.new(__DIR__ + '/static.wav')
|
62
|
-
@player.loop
|
63
|
-
p 'STARTED STATIC'
|
64
|
-
end
|
65
|
-
|
66
|
-
def stop_playing_static
|
67
|
-
if @player
|
68
|
-
p 'STOPPED STATIC'
|
69
|
-
@player.stop
|
70
|
-
@player = nil
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
@@use_down_volume_button_number = 3
|
75
|
-
|
76
56
|
def mute!
|
77
57
|
#unmute! # just in case...somehow this was causing problems...windows 7 perhaps? VLC?
|
78
|
-
# anyway we just use a toggle for now...dangerous but works hopefully
|
79
|
-
|
80
|
-
Mouse.single_click_left_mouse_button
|
81
|
-
elsif @@use_static_on_top
|
82
|
-
start_playing_static
|
83
|
-
elsif @@use_down_volume_button
|
84
|
-
@@use_down_volume_button_number.times { hit_volume_down_key }
|
85
|
-
else
|
86
|
-
hit_mute_key
|
87
|
-
end
|
58
|
+
# anyway we just use a toggle for now...dangerous but works hopefully...
|
59
|
+
hit_mute_key
|
88
60
|
end
|
89
61
|
|
90
62
|
# LODO better for doze 7/xp
|
data/lib/screen_tracker.rb
CHANGED
@@ -19,10 +19,17 @@ require 'win32/screenshot'
|
|
19
19
|
require 'sane'
|
20
20
|
require 'yaml'
|
21
21
|
require File.dirname(__FILE__)+ '/ocr'
|
22
|
+
require 'ffi'
|
22
23
|
|
23
24
|
class ScreenTracker
|
24
25
|
|
25
|
-
|
26
|
+
extend FFI::Library
|
27
|
+
ffi_lib 'user32'
|
28
|
+
# second parameter, pointer, LPRECT is FFI::MemoryPointer.new(:long, 4)
|
29
|
+
# read it like rect.read_array_of_long(4)
|
30
|
+
attach_function :GetWindowRect, [:long, :pointer], :int # returns a BOOL
|
31
|
+
|
32
|
+
def self.new_from_yaml yaml, callback # callback can be nil, is used for timestamp changed stuff
|
26
33
|
settings = YAML.load yaml
|
27
34
|
return new(settings["name"], settings["x"], settings["y"], settings["width"],
|
28
35
|
settings["height"], settings["use_class_name"], settings["digits"], callback)
|
@@ -32,13 +39,13 @@ class ScreenTracker
|
|
32
39
|
|
33
40
|
# digits are like {:hours => [100,5], :minute_tens, :minute_ones, :second_tens, :second_ones}
|
34
41
|
# digits share the height start point, have their own x and width...
|
35
|
-
def initialize name_or_regex,x,y,width,height,use_class_name=nil,digits=nil,callback=nil
|
42
|
+
def initialize name_or_regex, x, y, width, height, use_class_name=nil, digits=nil, callback=nil
|
36
43
|
# cache to save us 0.00445136 per time LOL
|
37
44
|
@name_or_regex = name_or_regex
|
38
45
|
@use_class_name = use_class_name
|
39
|
-
get_hwnd
|
40
46
|
pps 'height', height, 'width', width if $VERBOSE
|
41
47
|
raise 'poor dimentia' if width <= 0 || height <= 0
|
48
|
+
get_hwnd_loop_forever
|
42
49
|
max_x, max_y = Win32::Screenshot::Util.dimensions_for(@hwnd)
|
43
50
|
if(x < 0 || y < 0)
|
44
51
|
if x < 0
|
@@ -48,7 +55,6 @@ class ScreenTracker
|
|
48
55
|
y = max_y + y
|
49
56
|
end
|
50
57
|
end
|
51
|
-
@height = height
|
52
58
|
@x = x; @y = y; @x2 = x+width; @y2 = y+height; @callback = callback
|
53
59
|
@max_x = max_x
|
54
60
|
raise "poor width or wrong window #{@x2} #{max_x} #{x}" if @x2 > max_x || @x2 == x
|
@@ -65,7 +71,7 @@ class ScreenTracker
|
|
65
71
|
pps 'using x',@x, 'from x', x, 'y', @y, 'from y', y,'x2',@x2,'y2',@y2,'digits', @digits.inspect if $VERBOSE
|
66
72
|
end
|
67
73
|
|
68
|
-
def
|
74
|
+
def get_hwnd_loop_forever
|
69
75
|
if @name_or_regex.to_s.downcase == 'desktop'
|
70
76
|
# full screen option
|
71
77
|
assert !@use_class_name # not an option
|
@@ -89,7 +95,7 @@ class ScreenTracker
|
|
89
95
|
end
|
90
96
|
puts 're-established contact with window'
|
91
97
|
end
|
92
|
-
|
98
|
+
true
|
93
99
|
end
|
94
100
|
|
95
101
|
# gets the snapshot of "all the digits together"
|
@@ -104,7 +110,7 @@ class ScreenTracker
|
|
104
110
|
end
|
105
111
|
|
106
112
|
# writes out all screen tracking info to various files in the current pwd
|
107
|
-
def
|
113
|
+
def dump_bmps filename = 'dump.bmp'
|
108
114
|
File.binwrite filename, get_bmp
|
109
115
|
File.binwrite 'all.' + filename, get_full_bmp
|
110
116
|
dump_digits(get_digits_as_bitmaps, 'dump_bmp') if @digits
|
@@ -144,10 +150,16 @@ class ScreenTracker
|
|
144
150
|
out
|
145
151
|
end
|
146
152
|
|
147
|
-
def
|
153
|
+
def get_relative_coords_of_timestamp_window
|
148
154
|
[@x,@y,@x2,@y2]
|
149
155
|
end
|
150
156
|
|
157
|
+
def get_coords_of_window_on_display # yea
|
158
|
+
out = FFI::MemoryPointer.new(:long, 4)
|
159
|
+
ScreenTracker.GetWindowRect @hwnd, out
|
160
|
+
out.read_array_of_long(4)
|
161
|
+
end
|
162
|
+
|
151
163
|
def identify_digit bitmap
|
152
164
|
OCR.identify_digit(bitmap, @digits)
|
153
165
|
end
|
@@ -184,7 +196,7 @@ class ScreenTracker
|
|
184
196
|
@previously_displayed_warning = true
|
185
197
|
time_since_last_screen_change = Time.now
|
186
198
|
# also reget window hwnd, just in case that's the problem...(can be with VLC moving from title to title)
|
187
|
-
|
199
|
+
get_hwnd_loop_forever
|
188
200
|
end
|
189
201
|
end
|
190
202
|
}
|
@@ -116,6 +116,7 @@ module SubtitleProfanityFinder
|
|
116
116
|
's'*2)) => ['a..', :full_word],
|
117
117
|
arse + 'h' +
|
118
118
|
'ole' => 'a..h...',
|
119
|
+
'dieu' => ['deity', :full_word], # TODO fails...
|
119
120
|
arse + 'wipe' => 'a..w....',
|
120
121
|
'jes' +
|
121
122
|
'u' + 's' => 'j....',
|
@@ -129,7 +130,7 @@ module SubtitleProfanityFinder
|
|
129
130
|
bad_profanities.merge! extra_profanity_hash # LODO make easier to use...
|
130
131
|
|
131
132
|
semi_bad_profanities = {}
|
132
|
-
['bloody', 'moron', 'idiot', '
|
133
|
+
['bloody', 'moron', 'idiot', 'sex', 'genital', 'make love', 'suck',
|
133
134
|
'making love', 'love mak',
|
134
135
|
'breast',
|
135
136
|
'piss'].each{|name|
|
@@ -137,6 +138,7 @@ module SubtitleProfanityFinder
|
|
137
138
|
semi_bad_profanities[name] = name
|
138
139
|
}
|
139
140
|
semi_bad_profanities['crap'] = ['crap', :full_word]
|
141
|
+
semi_bad_profanities['crap'] = ['butt', :full_word]
|
140
142
|
|
141
143
|
all_profanity_combinationss = [convert_to_regexps(bad_profanities), convert_to_regexps(semi_bad_profanities)]
|
142
144
|
|
data/spec/notes
CHANGED
@@ -1,8 +1,26 @@
|
|
1
|
-
|
2
1
|
up next:
|
3
2
|
|
3
|
+
== ==
|
4
|
+
desktop filter:
|
5
|
+
1024x1024:
|
6
|
+
15% one cpu used by the capture utility (0.013ms per capture)
|
7
|
+
good for now I guess (no transparency visible...)
|
8
|
+
12 fps <sigh>
|
9
|
+
|
4
10
|
== upconvert netflix ==
|
5
11
|
|
12
|
+
=== mplayer avisynth ===
|
13
|
+
http://www.youtube.com/watch?v=hkOnH36S_pY&feature=player_profilepage
|
14
|
+
mplayer's default upscaling seems to introduce wild dots..probably
|
15
|
+
I think MS's bundled "magnifier" does some internal smudging for me, otherwise it would look awful
|
16
|
+
mplayer at default seems to be doing weird things?
|
17
|
+
paint.net on the win32::screenshot capture seemed to match quite well what the screen had.
|
18
|
+
ffplay seems to show an exact verbatim copy...
|
19
|
+
actually mplayer seems to be a good exact duplicate...
|
20
|
+
|
21
|
+
=== other ===
|
22
|
+
|
23
|
+
|
6
24
|
media player classic appears to have no cache.
|
7
25
|
"uscreencapture settings" appears to be per app, so lost with a .grf file save [?]
|
8
26
|
or maybe appear to be overridden...by WMC, mplayer10, not virtualdub, not ffmpeg, yes mplayer
|
data/spec/screen_tracker.spec.rb
CHANGED
@@ -83,7 +83,7 @@ describe ScreenTracker do
|
|
83
83
|
|
84
84
|
it "should have different bmp if sizes different" do
|
85
85
|
a = ScreenTracker.new("VLC",10,10,5,5)
|
86
|
-
assert a.
|
86
|
+
assert a.get_relative_coords_of_timestamp_window == [10,10,15,15]
|
87
87
|
b = ScreenTracker.new("VLC",10,10,50,50)
|
88
88
|
assert a.get_bmp != b.get_bmp
|
89
89
|
end
|
@@ -106,7 +106,7 @@ describe ScreenTracker do
|
|
106
106
|
it "should assign right offsets" do
|
107
107
|
a = ScreenTracker.new("VLC",-10,-10,5,5)
|
108
108
|
a.get_bmp
|
109
|
-
x,y,x2,y2=a.
|
109
|
+
x,y,x2,y2=a.get_relative_coords_of_timestamp_window
|
110
110
|
hwnd = Win32::Screenshot::BitmapMaker.hwnd("VLC")
|
111
111
|
max_x, max_y = Win32::Screenshot::Util.dimensions_for(hwnd)
|
112
112
|
x.should == max_x-10
|
@@ -120,7 +120,7 @@ describe ScreenTracker do
|
|
120
120
|
b = ScreenTracker.new("VLC",10,10,50,50)
|
121
121
|
c = ScreenTracker.new("VLC",-99,-99,50,50)
|
122
122
|
assert a.get_bmp == b.get_bmp
|
123
|
-
assert c.
|
123
|
+
assert c.get_relative_coords_of_timestamp_window != b.get_relative_coords_of_timestamp_window
|
124
124
|
cb = c.get_bmp
|
125
125
|
bb = b.get_bmp
|
126
126
|
c.get_bmp.length == b.get_bmp.length
|
@@ -160,7 +160,7 @@ describe ScreenTracker do
|
|
160
160
|
- 7
|
161
161
|
YAML
|
162
162
|
a = ScreenTracker.new_from_yaml(yaml,nil)
|
163
|
-
a.
|
163
|
+
a.get_relative_coords_of_timestamp_window.should == [32,34,132,54]
|
164
164
|
end
|
165
165
|
|
166
166
|
it "should be able to dump images it uses" do
|
data/todo.upconvert
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
== dvd ==
|
2
|
+
|
1
3
|
compare with powerdvd/ffdshow
|
2
4
|
|
3
|
-
compare various computers/monitors...
|
5
|
+
compare (DVD) various computers/monitors...
|
4
6
|
|
5
7
|
experiment with 2x or not with various people...
|
6
8
|
also should I change screen resolution down to 800x600 then double upconvert? better?
|
@@ -9,34 +11,43 @@ lanczos 10? is filter length 4 better? huh? what?
|
|
9
11
|
|
10
12
|
hqdn3d settings?
|
11
13
|
|
12
|
-
upconvert netflix instant yes!
|
13
|
-
|
14
14
|
do I need double tapping? http://archive2.avsforum.com/avs-vb/showthread.php?s=&postid=4760581#post4760581
|
15
15
|
|
16
|
-
my own Dshow input filter, which also has a "command line" way of configuring it, for ease of use.
|
17
|
-
could "just" use the push source + mplayer maybe [?]
|
18
|
-
would be nice to retrofit it with real "video capture source" to see if it works well with VLC or not...
|
19
|
-
assume it would similarly fail LOL. I think what you need is either sleeps or...or...IAmPushSource I guess.
|
20
|
-
|
21
|
-
It probably needs to send out input "only if it's changed" I'm thinkin..."
|
22
|
-
|
23
16
|
=== netflix/OS screen capture ===
|
24
17
|
|
25
|
-
update the OS README file
|
26
|
-
warn on aero (dual monitor?)
|
27
|
-
troubleshooting: tell them to use the BitTest, reverse should be at least 200 fps I guess...
|
28
18
|
make it able to grab from a window, and work when dragged too...
|
29
19
|
can I make it look awesome?
|
20
|
+
tell mplayer how to fix directx :)
|
21
|
+
|
30
22
|
==== some day ====
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
23
|
+
shearing
|
24
|
+
perfect looks of absolutely everything upconverted LOL
|
25
|
+
# TODO cut off all black edges too...why not, eh? mplayer has crop detect...
|
26
|
+
make really low q stuff like youtube less than even 360 look good
|
27
|
+
# TODO can align better youtube
|
28
|
+
better benchmarker (windows vs. desktop, just show reverse)
|
29
|
+
|
30
|
+
== OS dshow screen tracker ==
|
31
|
+
|
32
|
+
It probably needs to send out input "only if it's changed" I'm thinkin..." for my purposes anyway...
|
33
|
+
VLC compatible'ify it..
|
34
|
+
can limit it to only 5 fps [?]
|
35
|
+
@ avisynth wiki: max fps
|
36
|
+
is ffplay on avisynth piece of crud compared to the other? vs. mplayer? why only like 10 fps? what the...
|
37
|
+
|
38
|
+
jruby "drag to select"
|
39
|
+
|
40
|
+
=== some day ===
|
41
|
+
bounty multi-thread scaling, iff it seems helpful-er for quad core.
|
42
|
+
threading the input [?] (a bit complicated because of the "only if it's changed" mantra)
|
43
|
+
can I live with aero wasn't bitblt getting like 800fps *with* aero?
|
44
|
+
more efficient by skipping an extra copy (we're already pretty fast though...)
|
37
45
|
|
38
46
|
== never ==
|
39
47
|
|
40
48
|
add another sharpen filter?
|
41
49
|
|
42
50
|
add a VLC version?
|
51
|
+
|
52
|
+
|
53
|
+
prop: http://ubuntuforums.org/showthread.php?t=804537 didn't I have another list somewhere... ?
|
data/upconvert.bat
CHANGED
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
mplayer -nocache -vo direct3d upconvert_from_screen_me2.avs
|
@@ -0,0 +1,12 @@
|
|
1
|
+
mplayer -nocache -geometry 70%x70% -sws 9 -ssf ls=25.0 -ssf cs=7.0 -vf hqdn3d=7:7:7:7,scale=1680:-10:0:0:3 upconvert_from_screen_me2.avs
|
2
|
+
|
3
|
+
@rem hqdn3d[=luma_spatial:chroma_spatial:luma_tmp:chroma_tmp]
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
@rem 0:1:4:4 for DVD LOL
|
9
|
+
@rem pp=hb:y/vb:y,
|
10
|
+
|
11
|
+
|
12
|
+
@rem mplayer autoq=100 -nocache -geometry 50%x40% -sws 9 -ssf ls=75.0 -ssf cs=7.0 -vf nr=1000,scale=1680:-10:0:0:4 upconvert_from_screen_me2.avs
|
Binary file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'ffi'
|
3
|
+
require 'ffi'
|
4
|
+
begin
|
5
|
+
require 'sane'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'sane' # LODO
|
9
|
+
end
|
10
|
+
require_relative '../../lib/screen_tracker.rb'
|
11
|
+
require_relative './setup_directshow_filter_params'
|
12
|
+
|
13
|
+
player_description = "..\\..\\zamples\\players\\youtube\\normal_in_youtube.com.chrome.txt" # right path...
|
14
|
+
screen_tracker = ScreenTracker.new_from_yaml File.binread(player_description), nil
|
15
|
+
p screen_tracker.get_hwnd_loop_forever
|
16
|
+
p screen_tracker.get_coords_of_window_on_display
|
17
|
+
x,y,x2,y2 = screen_tracker.get_coords_of_window_on_display
|
18
|
+
|
19
|
+
# numbers are all right, except, for youtube "within a user window", when the y2 is too high, and includes the red at the bottom
|
20
|
+
y2 -= 50
|
21
|
+
setter = SetupDirectshowFilterParams.new
|
22
|
+
setter.set_single_setting 'height', y2 - y
|
23
|
+
setter.set_single_setting 'width', x2 - x
|
24
|
+
setter.set_single_setting 'start_x', x
|
25
|
+
setter.set_single_setting 'start_y', y
|
26
|
+
p 'set it to', x, y, x2, y2, 'width', x2-x, 'height', y2-y
|
27
|
+
screen_tracker.dump_bmps
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# taken from https://github.com/rdp/open-source-directshow-screen-capture-filter/tree/master/configuration_setup_utility
|
2
|
+
|
3
|
+
class SetupDirectshowFilterParams
|
4
|
+
|
5
|
+
Settings = ['height', 'width', 'start_x', 'start_y']
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
require 'win32/registry'
|
9
|
+
@screen_reg = Win32::Registry::HKEY_CURRENT_USER.create "Software\\os_screen_capture" # LODO .keys fails?
|
10
|
+
end
|
11
|
+
|
12
|
+
def set_single_setting name, value
|
13
|
+
raise unless Settings.include?(name)
|
14
|
+
raise unless value.is_a? Fixnum
|
15
|
+
# raise value.to_s if value < 0
|
16
|
+
@screen_reg.write(name, Win32::Registry::REG_DWORD, value.to_i)
|
17
|
+
end
|
18
|
+
|
19
|
+
# can be nil if not set...
|
20
|
+
def read_single_setting name
|
21
|
+
@screen_reg[name]
|
22
|
+
end
|
23
|
+
|
24
|
+
def teardown
|
25
|
+
@screen_reg.close
|
26
|
+
@screen_reg = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# from http://avisynth.org/mediawiki/Enhancing_dvd_videos
|
2
|
+
|
3
|
+
Video = DirectShowSource("push2.GRF", fps=35, audio=False, framecount=1000000) # fps appears to be a "max" fps
|
4
|
+
Return Video
|
5
|
+
|
6
|
+
#
|
7
|
+
# these are the size of your monitor that the output is displayed on. Unless it lags too much, then try experimenting with smaller values
|
8
|
+
# Video = ConvertToYUY2 (Video)
|
9
|
+
# screen_width = 1024 # CHANGE THIS TODO propagate it...
|
10
|
+
# screen_height = 768 # CHANGE THIS
|
11
|
+
#
|
12
|
+
# # note that you can get even better looking images by say, upscaling to 2x your current screen resolution, by uncommenting the following two lines
|
13
|
+
# screen_width = screen_width*2
|
14
|
+
# screen_height = screen_height*2
|
15
|
+
#
|
16
|
+
# Video = Lanczos4Resize (Video, screen_width, screen_height) # said to be a good upsampler...hmm...
|
17
|
+
#
|
18
|
+
# Video = Sharpen (Video, 0.78) # Helps sharpen smoothness enlarging does. 0.78 = (1.25*(1024/720))-1
|
19
|
+
# Return Video
|
data/upconvert_netflix/{latest_now_possibly_oudated → old/latest_now_possibly_oudated}/push2.GRF
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,13 +1,10 @@
|
|
1
1
|
# comments can go after a # on any line, for example this one.
|
2
2
|
|
3
3
|
"mutes" => [
|
4
|
-
#
|
5
|
-
# "0:00:01.0", "0:00:02.0", "profanity", "da..",
|
4
|
+
# it's clean!
|
6
5
|
],
|
7
6
|
|
8
7
|
"blank_outs" => [
|
9
|
-
# example line, uncomment the leading "#" to make it active
|
10
|
-
# "00:03:00.0" , "00:04:00.0", "violence", "of some sort",
|
11
8
|
],
|
12
9
|
|
13
10
|
"name" => "Bambi",
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# comments can go after a # on any line, for example this one.
|
2
|
+
"name" => "if a man answers",
|
3
|
+
|
4
|
+
"mutes" => [
|
5
|
+
|
6
|
+
"00:15:02.167", "00:15:04.692", "profanity", "deity", "mon [deity]",
|
7
|
+
# got weird overlapping subtitles in this one...
|
8
|
+
#"0:35:54.318" , "0:35:59.515", "profanity", "goodness", "Maman thank [goodness] for you",
|
9
|
+
#"0:35:57.588" , "0:35:59.613", "profanity", "goodness", "Thank [goodness] for love",
|
10
|
+
"0:35:54.318" , "0:35:59.615", "profanity", "goodness", "Maman thank [goodness] for you",
|
11
|
+
"1:35:39.834" , "1:35:43.326", "profanity", "he..", "A little [he..] to make those two devils feel at home",
|
12
|
+
|
13
|
+
# put back this once blank outs are more precise
|
14
|
+
# "0:03:17.630" , "0:03:23.500", "profanity", "sex", "In the beglnnlng Father consldered Me Tarzan you Jane an adequate [sex] educatlon",
|
15
|
+
"0:05:50.249" , "0:05:54.743", "profanity", "make love", "And maman says that the only thing a man would rather do than [make love] is talk about himself",
|
16
|
+
"0:08:01.714" , "0:08:05.707", "profanity", "make love", "Chuckles So they won't [make love] to me all the time",
|
17
|
+
"0:24:46.017" , "0:24:50.579", "profanity", "sex", "Imagine our daughter alone with that seedy poverty stricken [sex] maniac",
|
18
|
+
"0:39:27.465" , "0:39:29.933", "profanity", "sex", "and keep an eye on daddy with all those [sex]y models",
|
19
|
+
"0:43:15.960" , "0:43:19.293", "profanity", "sex", "and keep an eye on daddy wlth all those [sex]y models",
|
20
|
+
"0:46:22.980" , "0:46:27.440", "profanity", "sex", "He just pooh poohed me but I know when one of my own [sex] has known love",
|
21
|
+
"0:25:05", "0:25:10", "sex", "mention nude",
|
22
|
+
"0:25:18", "0:25:21", "sex", "mention nude",
|
23
|
+
|
24
|
+
],
|
25
|
+
|
26
|
+
"blank_outs" => [
|
27
|
+
# 1:46 2:00
|
28
|
+
# 2:25 2:50
|
29
|
+
# 3:06 3:43
|
30
|
+
# 4:45 5:05
|
31
|
+
"1:46", "5:05", "scantily clad pictures, could be split up more precisely", # TODO
|
32
|
+
"20:58", "21:20", "lingerie putting on",
|
33
|
+
"22:35", "22:43", "lingerie pics",
|
34
|
+
],
|
35
|
+
|
36
|
+
"volume_name" => "IF_A_MAN_ANSWERS",
|
37
|
+
"disk_unique_id" => "270df07b|62294c73",
|
38
|
+
"dvd_title_track" => "1",
|
39
|
+
"dvd_title_track_length" => "6104.2", # sum length, on the DVD, use the show DVD info button to retrieve it.
|
40
|
+
"opensubtitles_number" => "238037",
|
41
|
+
# "not edited out stuff" => "some violence left in...",
|
42
|
+
"closing thoughts" => "a fun flick. this EDL needs to be double checked a bit still",
|
43
|
+
"mplayer_dvd_splits" => [],
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: sensible-cinema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.25.
|
5
|
+
version: 0.25.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Roger Pack
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-08-
|
13
|
+
date: 2011-08-10 00:00:00 -06:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -222,6 +222,7 @@ files:
|
|
222
222
|
- bin/sensible-cinema-cli
|
223
223
|
- business_ideas.txt
|
224
224
|
- change_log_with_feature_list.txt
|
225
|
+
- conclusions
|
225
226
|
- developer_how_to_contribute_to_the_project.txt
|
226
227
|
- documentation/DOCUMENTATION_README.TXT
|
227
228
|
- documentation/how_to_create_your_own_delete_lists.txt
|
@@ -255,6 +256,7 @@ files:
|
|
255
256
|
- lib/media_info_parser.rb
|
256
257
|
- lib/mencoder_wrapper.rb
|
257
258
|
- lib/mouse.rb
|
259
|
+
- lib/mouse_draw.rb
|
258
260
|
- lib/mouse_forever.rb
|
259
261
|
- lib/mplayer_edl.rb
|
260
262
|
- lib/muter.rb
|
@@ -313,17 +315,22 @@ files:
|
|
313
315
|
- todo.subtitle
|
314
316
|
- todo.upconvert
|
315
317
|
- upconvert.bat
|
316
|
-
- upconvert_netflix/
|
317
|
-
- upconvert_netflix/
|
318
|
-
- upconvert_netflix/
|
319
|
-
- upconvert_netflix/
|
320
|
-
- upconvert_netflix/
|
321
|
-
- upconvert_netflix/
|
322
|
-
- upconvert_netflix/
|
323
|
-
- upconvert_netflix/upconvert_from_screen_me2.avs
|
324
|
-
- upconvert_netflix/
|
325
|
-
- upconvert_netflix/
|
326
|
-
- upconvert_netflix/
|
318
|
+
- upconvert_netflix/latest2/go_no_upscaling.bat
|
319
|
+
- upconvert_netflix/latest2/go_upscaling.bat
|
320
|
+
- upconvert_netflix/latest2/push2.GRF
|
321
|
+
- upconvert_netflix/latest2/setup_capture_coords.rb
|
322
|
+
- upconvert_netflix/latest2/setup_directshow_filter_params.rb
|
323
|
+
- upconvert_netflix/latest2/upconvert_from_screen_me2.avs
|
324
|
+
- upconvert_netflix/old/latest_now_possibly_oudated/push2.GRF
|
325
|
+
- upconvert_netflix/old/latest_now_possibly_oudated/upconvert_from_screen_me2.avs
|
326
|
+
- upconvert_netflix/old/position_window.png
|
327
|
+
- upconvert_netflix/old/push_source_desktop.GRF
|
328
|
+
- upconvert_netflix/old/upconvert_from_screen.avs
|
329
|
+
- upconvert_netflix/old/upconvert_from_screen_me.avs
|
330
|
+
- upconvert_netflix/old/upconvert_from_screen_me2.avs
|
331
|
+
- upconvert_netflix/old/upconvert_from_screen_me_push_source.avs
|
332
|
+
- upconvert_netflix/old/uscreen.GRF
|
333
|
+
- upconvert_netflix/old/uscreen_me.GRF
|
327
334
|
- vendor/jruby-complete-1.6.2.jar
|
328
335
|
- vendor/mac_dvdid/bin/dvdid
|
329
336
|
- vendor/mac_dvdid/include/dvdid/dvdid.h
|
@@ -348,13 +355,13 @@ files:
|
|
348
355
|
- zamples/edit_decision_lists/dvds/cool runnings.txt
|
349
356
|
- zamples/edit_decision_lists/dvds/edls_being_edited/court_jester.txt
|
350
357
|
- zamples/edit_decision_lists/dvds/edls_being_edited/edl_for_unit_tests.txt
|
351
|
-
- zamples/edit_decision_lists/dvds/edls_being_edited/flight_of_the_navigator.txt
|
352
|
-
- zamples/edit_decision_lists/dvds/edls_being_edited/other_side_of_heaven.txt
|
353
358
|
- zamples/edit_decision_lists/dvds/edls_being_edited/test_delete_list_for_experimenting_with.txt
|
359
|
+
- zamples/edit_decision_lists/dvds/flight_of_the_navigator.txt
|
354
360
|
- zamples/edit_decision_lists/dvds/happiest baby on the block.txt
|
355
361
|
- zamples/edit_decision_lists/dvds/harry_potter_3_prisoner_of_azkaban.txt
|
356
362
|
- zamples/edit_decision_lists/dvds/hitchhiker's_guide_to_the_galaxy.txt
|
357
363
|
- zamples/edit_decision_lists/dvds/how_to_train_your_dragon.txt
|
364
|
+
- zamples/edit_decision_lists/dvds/if_a_man_answers.txt
|
358
365
|
- zamples/edit_decision_lists/dvds/iq.txt
|
359
366
|
- zamples/edit_decision_lists/dvds/kung_fu_panda_1.txt
|
360
367
|
- zamples/edit_decision_lists/dvds/legend_of_the_guardians_the_owls_of_gahoole.txt
|
@@ -1,37 +0,0 @@
|
|
1
|
-
To use this (upscaling from your own computer):
|
2
|
-
|
3
|
-
Steps:
|
4
|
-
|
5
|
-
download/install uscreencapture: http://www.umediaserver.net/umediaserver/download.html
|
6
|
-
|
7
|
-
download+install "windows sdk" http://msdn.microsoft.com/en-us/windows/bb980924 (rather big one here :) )
|
8
|
-
|
9
|
-
download virtualdub: http://www.virtualdub.org/download.html
|
10
|
-
|
11
|
-
Now start your "subject" to upconvert (ex: hulu, or netflix instant).
|
12
|
-
You can pause it if desired. Don't fullscreen it.
|
13
|
-
You'll want to leave it on its smallest "window" possible, that still has the most detail.
|
14
|
-
So basically don't let your "subject" player do any stretching, you want to leave all of that for
|
15
|
-
this program to do.
|
16
|
-
|
17
|
-
Next you'll need dual monitor, ex: laptop screen plus the VGA out on the laptop.
|
18
|
-
Position your "subject" movie so that it is flush in the top right of either monitor.
|
19
|
-
See the file "position_window.png" for an demo. Installing NiftyWindows then
|
20
|
-
"right mouse button+drag" can help you reposition it just right.
|
21
|
-
|
22
|
-
Now in virtualdub, open the file upconvert_from_screen.avs.
|
23
|
-
|
24
|
-
Click the "play" bottom left button.
|
25
|
-
See if it is capturing the right monitor, how much of the video it is capturing, if any.
|
26
|
-
|
27
|
-
Now search for the program "graphedt.exe", for me, this was in C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
|
28
|
-
|
29
|
-
Run it. Use it to open the file uscreen.GRF
|
30
|
-
Right click on the box "uscreencapture"
|
31
|
-
Adjust the various properties so that it captures the video region you desire, by editing values, click "Apply",
|
32
|
-
then clicking the "save" icon within graphedit. Then reopen the file within virtualdub to test your new settings.
|
33
|
-
Note the x and y values you use.
|
34
|
-
|
35
|
-
Now edit the text upconvert_from_screen.avs and fill in appropriate values.
|
36
|
-
|
37
|
-
Now run it in virtualdub again, move virtualdub to your output display, enjoy watching it.
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# comments can go after a # on any line, for example this one.
|
2
|
-
"name" => "The other side of heaven",
|
3
|
-
|
4
|
-
"mutes" => [
|
5
|
-
# an example line, uncomment the leading "#" to make it active
|
6
|
-
# "0:00:01.0", "0:00:02.0", "profanity", "da..",
|
7
|
-
],
|
8
|
-
|
9
|
-
"blank_outs" => [
|
10
|
-
# an example line, uncomment the leading "#" to make it active
|
11
|
-
# "00:03:00.0" , "00:04:00.0", "violence", "of some sort",
|
12
|
-
],
|
13
|
-
|
14
|
-
"volume_name" => "OTHER_SIDE_OF_HEAVEN",
|
15
|
-
"disk_unique_id" => "9338ab59|48d01042",
|
16
|
-
"dvd_title_track" => "1", # most DVD's use title 1. Not all do, though. If sensible-cinema plays anything except the main title (for example, it plays a trailer), when you use it, see http://goo.gl/QHLIF to set this right.
|
17
|
-
# "not edited out stuff" => "some violence",
|
18
|
-
# "closing thoughts" => "still...",
|
19
|
-
# "mplayer_dvd_splits" => ["59:59", "1:04:59"], # in mplayer, the DVD timestamp "resets" to zero for some reason, see http://goo.gl/yMfqX to set this value right. Note that [] is valid, if there are no resets.
|