simple.lua (3041B)
1 -- overlay = mp.create_osd_overlay("ass-events") 2 -- overlay.z = 10 3 4 -- nosub_start = nil 5 -- nosub_end = nil 6 -- sub_duration = 0.0 7 -- last_sub_text = "" 8 9 -- function on_time_pos(name, time_pos) 10 -- if time_pos == nil or nosub_start == nil or nosub_end == nil then 11 -- return 12 -- end 13 14 -- local duration = nosub_end - nosub_start 15 16 -- if nosub_start == nil or nosub_end == nil or time_pos >= nosub_end or time_pos <= nosub_start then 17 -- mp.set_property('speed', 1) 18 -- return 19 -- end 20 21 -- local slope = 0.5 22 -- local base_speed = 1 23 -- local max_speed = 4 24 25 -- local h = max_speed - base_speed 26 -- local x = duration / 2 - math.abs(time_pos - (nosub_start + nosub_end) / 2) 27 -- local speed = math.min(max_speed, slope * x + base_speed) 28 29 -- mp.set_property('speed', speed) 30 31 -- if speed > 2 then 32 -- mp.osd_message(string.format("Speed %.1f", speed)) 33 -- end 34 -- end 35 36 -- function get_next_sub_start() 37 -- local sub_visibility = mp.get_property_bool('sub-visibility') 38 -- local sub_delay = mp.get_property_number('sub-delay') 39 40 -- mp.set_property_bool('sub-visibility', false) 41 -- mp.commandv('sub-step', 1) 42 43 -- local next_sub_start = mp.get_property_number('sub-start') 44 45 -- mp.set_property_number('sub-delay', sub_delay) 46 -- mp.set_property_bool('sub-visibility', sub_visibility) 47 48 -- return next_sub_start 49 -- end 50 51 -- function on_playback_restart() 52 -- local time_pos = mp.get_property_number('time-pos') 53 -- local sub_speed = mp.get_property_number('sub-speed', 1) 54 -- local sub_delay = mp.get_property_number('sub-delay') 55 56 -- local nextsub_start = get_next_sub_start() 57 58 -- nosub_start = time_pos 59 -- nosub_end = nextsub_start * sub_speed + sub_delay 60 -- end 61 62 -- function on_sub_end(_, sub_end) 63 -- overlay:remove() 64 -- if sub_end == nil then 65 -- -- mp.set_property("pause", "yes") 66 -- -- mp.osd_message("Repeat", sub_duration) 67 68 -- -- local lines = {} 69 70 -- -- for line in last_sub_text:gmatch("[^\r\n]+") do 71 -- -- table.insert(lines, 1, '{\\an2}{\\1c&HFFFF00&}' .. line .. '') 72 -- -- end 73 74 -- -- overlay.data = table.concat(lines, "\n") 75 -- -- overlay:update() 76 77 -- -- mp.add_timeout(sub_duration, function() 78 -- -- mp.osd_message("") 79 -- -- mp.set_property("pause", "no") 80 -- -- overlay:remove() 81 -- -- end) 82 -- else 83 -- last_sub_text = mp.get_property('sub-text') 84 -- local sub_start = mp.get_property_number('sub-start') 85 -- local sub_speed = mp.get_property_number('sub-speed', 1) 86 -- local sub_delay = mp.get_property_number('sub-delay') 87 88 -- sub_duration = (sub_end - sub_start) * sub_speed 89 90 -- local nextsub_start = get_next_sub_start() 91 92 -- nosub_start = sub_end * sub_speed + sub_delay 93 -- nosub_end = nextsub_start * sub_speed + sub_delay 94 -- end 95 -- end 96 97 -- mp.observe_property('sub-end', 'number', on_sub_end) 98 -- mp.observe_property('time-pos', 'number', on_time_pos) 99 -- mp.register_event("playback-restart", on_playback_restart)