From 6d62d857b2f49b7192e7e7bf1eea61096056a260 Mon Sep 17 00:00:00 2001 From: bitingsock Date: Wed, 27 Sep 2017 18:38:50 -0700 Subject: [PATCH] all changes from https://github.com/zenyd/mpv-scripts/pull/3 --- speed-transition.lua | 135 +++++++++++++++---------------------------- 1 file changed, 47 insertions(+), 88 deletions(-) diff --git a/speed-transition.lua b/speed-transition.lua index 05d137c..b3fefb1 100644 --- a/speed-transition.lua +++ b/speed-transition.lua @@ -1,20 +1,9 @@ -lookahead=5 --if nextsub >= lookahead then speedup +lookahead = 5 +speedup = 2.5 +leadin = 1 +--------------- + normalspeed=mp.get_property_native("speed") -speedup=2.5 -leadin=1 -------------------- - -state=0 -enable=false - -function set_timeout() - if mp.get_property_native("cache-size") ~= nil then - time_out = mp.get_property_native("cache-secs") - else - time_out = mp.get_property_native("demuxer-readahead-secs") - end - return time_out -end function restore_normalspeed() mp.set_property("speed", normalspeed) @@ -24,114 +13,60 @@ function restore_normalspeed() end function check_should_speedup() - subdelay = mp.get_property_native("sub-delay") + local subdelay = mp.get_property_native("sub-delay") mp.command("no-osd set sub-visibility no") mp.command("no-osd sub-step 1") - nextsubdelay = mp.get_property_native("sub-delay") - nextsub = subdelay - nextsubdelay - --print("nextsub in seconds "..nextsub) + local nextsubdelay = mp.get_property_native("sub-delay") + local nextsub = subdelay - nextsubdelay mp.set_property("sub-delay", subdelay) mp.command("no-osd set sub-visibility yes") return nextsub, nextsub >= lookahead or nextsub == 0 end -function search_next_sub() - nextsub, _ = check_should_speedup() - add_timers(nextsub) +function check_position() + local nextsub = check_should_speedup() + if nextsub ~= 0 and nextsub<=leadin then + restore_normalspeed() + mp.unobserve_property(check_position) + end end -function add_timers(nextsub) - --We know when the next sub comes - if nextsub ~= 0 then - --make sure we reset the speed on the unlikely case when a timer fires - --within one second of the next sub - if nextsub - leadin > 0 then - mp.add_timeout((nextsub-leadin)/speedup, reset_early) - else - restore_normalspeed() - end - --We don't know when the next sub comes, so search for it recursively - elseif nextsub == 0 then - --search for next sub after time_out seconds, when its position might be known - if not mp.get_property_native("pause") and set_timeout() - leadin > 0 then - mp.add_timeout((time_out-leadin)/speedup, search_next_sub) - end - end -end - ---reset to normal speed before subtitle shows up ---prevents ugly audio glitches when speech starts -function reset_early() - --check if it really is time to reset - --prevents premature change to normal speed due to seeking/pausing - --seeking/pausing results in firing timers early/late - if mp.get_property_native("sub-text") == "" and state == 1 then - nextsub , shouldspeedup = check_should_speedup() - if not shouldspeedup then - --print("reset_early executed") - restore_normalspeed() - else - --print("reset_early aborted! Seeking/Pausing?") - end - end -end - -function speed_transition(subtext, sub) +function speed_transition(_, sub) if state == 0 then if sub == "" then - nextsub, shouldspeedup = check_should_speedup() + _ , shouldspeedup = check_should_speedup() if shouldspeedup then + normalspeed = mp.get_property("speed") if mp.get_property_native("video-sync") == "audio" then mp.set_property("video-sync", "desync") end - normalspeed = mp.get_property_native("speed") mp.set_property("speed", speedup) - add_timers(nextsub) + mp.observe_property("time-pos", nil, check_position) state = 1 end end elseif state == 1 then if sub ~= "" then + mp.unobserve_property(check_position) restore_normalspeed() state = 0 end end end -function toggle() - if not enable then - mp.observe_property("sub-text", "native", speed_transition) - mp.osd_message("speed-transition enabled") - else - restore_normalspeed() - mp.unobserve_property(speed_transition) - mp.osd_message("speed-transition disabled") - end - state = 0 - enable = not enable -end - -function pause(e,v) - if not v and state == 1 then - search_next_sub() - end -end - - -local sub_color -local sub_color2 toggle2 = false function toggle_sub_visibility() if not toggle2 then - sub_color = mp.get_property("sub-color", "1/1/1") - sub_color2 = mp.get_property("sub-border-color", "0/0/0") + sub_color = mp.get_property("sub-color", "1/1/1/1") + sub_color2 = mp.get_property("sub-border-color", "0/0/0/1") mp.set_property("sub-color", "0/0/0/0") mp.set_property("sub-border-color", "0/0/0/0") else mp.set_property("sub-color", sub_color) mp.set_property("sub-border-color", sub_color2) end + mp.osd_message("subtitle visibility: "..tostring(toggle2)) toggle2 = not toggle2 end @@ -140,8 +75,32 @@ function change_speedup(v) mp.osd_message("speedup: "..speedup) end -mp.observe_property("pause", "native", pause) +function change_leadin(v) + leadin = leadin + v + mp.osd_message("leadin: "..leadin) +end + +enable = false +state = 0 + +function toggle() + if not enable then + normalspeed = mp.get_property("speed") + mp.observe_property("sub-text", "native", speed_transition) + mp.osd_message("speed-transition enabled") + else + restore_normalspeed() + mp.unobserve_property(speed_transition) + mp.unobserve_property(check_position) + mp.osd_message("speed-transition disabled") + end + state = 0 + enable = not enable +end + mp.add_key_binding("ctrl+j", "toggle_speedtrans", toggle) mp.add_key_binding("alt+j", "toggle_sub_visibility", toggle_sub_visibility) mp.add_key_binding("alt++", "increase_speedup", function() change_speedup(0.1) end) mp.add_key_binding("alt+-", "decrease_speedup", function() change_speedup(-0.1) end) +mp.add_key_binding("alt+0", "increase_leadin", function() change_leadin(0.25) end) +mp.add_key_binding("alt+9", "decrease_leadin", function() change_leadin(-0.25) end)