Advertisement
Guest User

Untitled

a guest
Sep 14th, 2020
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.35 KB | None | 0 0
  1. lookahead = 5
  2. speedup = 2.5
  3. leadin = 1 --range 0-2
  4. skipmode = false
  5. directskip = false
  6. ---------------
  7.  
  8. normalspeed=mp.get_property_native("speed")
  9.  
  10. function set_timeout()
  11. local time_out
  12. if mp.get_property_native("cache-size") ~= nil then
  13. time_out = mp.get_property_native("cache-secs")
  14. else
  15. time_out = mp.get_property_native("demuxer-readahead-secs")
  16. end
  17. return time_out
  18. end
  19.  
  20. local aid
  21. function restore_normalspeed()
  22. mp.set_property("speed", normalspeed)
  23. if mp.get_property_native("video-sync") == "desync" then
  24. mp.set_property("video-sync", "audio")
  25. end
  26. if (aid~=nil and aid~=mp.get_property("aid")) then mp.set_property("aid", aid) end
  27. end
  28.  
  29. function check_should_speedup()
  30. local subdelay = mp.get_property_native("sub-delay")
  31. mp.command("no-osd set sub-visibility no")
  32. mp.command("no-osd sub-step 1")
  33. local mark = mp.get_property_native("time-pos")
  34. local nextsubdelay = mp.get_property_native("sub-delay")
  35. local nextsub = subdelay - nextsubdelay
  36. mp.set_property("sub-delay", subdelay)
  37. mp.command("no-osd set sub-visibility yes")
  38. return nextsub, nextsub >= lookahead or nextsub == 0, mark
  39. end
  40.  
  41. function check_audio(_,ds)
  42. if state==0 then
  43. return
  44. end
  45. if ds and tonumber(ds)>leadin then
  46. aid = mp.get_property("aid")
  47. mp.set_property("aid", "no")
  48. print("avsync greater than leadin, dropping audio")
  49. end
  50. end
  51.  
  52. function check_position(_, position)
  53. if position then
  54. if nextsub ~= 0 and position >= (mark+nextsub-leadin) then
  55. restore_normalspeed()
  56. mp.unobserve_property(check_position)
  57. mp.unobserve_property(check_audio)
  58. elseif nextsub == 0 and position >= (mark+set_timeout()-leadin) then
  59. nextsub, _ , mark = check_should_speedup()
  60. end
  61. end
  62. end
  63.  
  64. function skipval()
  65. local skipval = mp.get_property_native("demuxer-cache-duration", 5)
  66. skipval = clamp(skipval, 1, 5)
  67. if nextsub > 0 then
  68. if nextsub-skipval-leadin <= 0 or directskip then
  69. skipval = nextsub - leadin
  70. end
  71. else
  72. skipval = clamp(skipval-leadin, 0, nil)
  73. if skipval == 0 then
  74. skipval = clamp(skipval-1, 1, nil)
  75. end
  76. end
  77. return skipval
  78. end
  79.  
  80. function speed_transition(_, sub)
  81. if state == 0 then
  82. if sub == "" then
  83. last_speedup_zone_begin = speedup_zone_begin
  84. nextsub, shouldspeedup, speedup_zone_begin = check_should_speedup()
  85. mark = speedup_zone_begin
  86. speedup_zone_end = mark+nextsub
  87. if shouldspeedup then
  88. local temp_disable_skipmode = false
  89. if last_speedup_zone_begin and mark < last_speedup_zone_begin then
  90. temp_disable_skipmode = true
  91. end
  92. if skipmode and not temp_disable_skipmode and mp.get_property("pause") == "no" then
  93. mp.commandv("no-osd", "seek", skipval(), "relative", "exact")
  94. else
  95. normalspeed = mp.get_property("speed")
  96. if mp.get_property_native("video-sync") == "audio" then
  97. mp.set_property("video-sync", "desync")
  98. end
  99. mp.set_property("speed", speedup)
  100. mp.observe_property("time-pos", "native", check_position)
  101. state = 1
  102. aid=mp.get_property("aid")
  103. mp.observe_property("avsync", "native", check_audio)
  104. end
  105. end
  106. end
  107. elseif state == 1 then
  108. if sub ~= "" and sub ~= nil or not mp.get_property_native("sid") then
  109. mp.unobserve_property(check_position)
  110. mp.unobserve_property(check_audio)
  111. restore_normalspeed()
  112. state = 0
  113. else
  114. local pos = mp.get_property_native("time-pos", 0)
  115. if pos < speedup_zone_begin or pos > speedup_zone_end then
  116. nextsub, _ , mark = check_should_speedup()
  117. end
  118. end
  119. end
  120. end
  121.  
  122. toggle2 = false
  123.  
  124. function toggle_sub_visibility()
  125. if not toggle2 then
  126. sub_color = mp.get_property("sub-color", "1/1/1/1")
  127. sub_color2 = mp.get_property("sub-border-color", "0/0/0/1")
  128. sub_color3 = mp.get_property("sub-shadow-color", "0/0/0/1")
  129. mp.set_property("sub-color", "0/0/0/0")
  130. mp.set_property("sub-border-color", "0/0/0/0")
  131. mp.set_property("sub-shadow-color", "0/0/0/0")
  132. else
  133. mp.set_property("sub-color", sub_color)
  134. mp.set_property("sub-border-color", sub_color2)
  135. mp.set_property("sub-shadow-color", sub_color3)
  136. end
  137. mp.osd_message("subtitle visibility: "..tostring(toggle2))
  138. toggle2 = not toggle2
  139. end
  140.  
  141. function toggle_skipmode()
  142. skipmode = not skipmode
  143. if enable then
  144. toggle()
  145. toggle()
  146. end
  147. if skipmode then
  148. mp.osd_message("skip mode")
  149. else
  150. mp.osd_message("speed mode")
  151. end
  152. end
  153.  
  154. function clamp(v,l,u)
  155. if l and v < l then
  156. v = l
  157. elseif u and v > u then
  158. v = u
  159. end
  160. return v
  161. end
  162.  
  163. function change_speedup(v)
  164. speedup = speedup + v
  165. mp.osd_message("speedup: "..speedup)
  166. end
  167.  
  168. function change_leadin(v)
  169. leadin = clamp(leadin + v, 0, 2)
  170. mp.osd_message("leadin: "..leadin)
  171. end
  172.  
  173. enable = false
  174. state = 0
  175.  
  176. function toggle()
  177. if not enable then
  178. normalspeed = mp.get_property("speed")
  179. mp.observe_property("sub-text", "native", speed_transition)
  180. mp.osd_message("speed-transition enabled")
  181. else
  182. restore_normalspeed()
  183. mp.unobserve_property(speed_transition)
  184. mp.unobserve_property(check_position)
  185. mp.osd_message("speed-transition disabled")
  186. end
  187. state = 0
  188. enable = not enable
  189. end
  190.  
  191. function reset_on_file_load()
  192. if state == 1 then
  193. mp.unobserve_property(check_position)
  194. restore_normalspeed()
  195. state = 0
  196. end
  197. end
  198.  
  199. mp.add_key_binding("ctrl+j", "toggle_speedtrans", toggle)
  200. mp.add_key_binding("alt+j", "toggle_sub_visibility", toggle_sub_visibility)
  201. mp.add_key_binding("ctrl+alt+j", "toggle_skipmode", toggle_skipmode)
  202. mp.add_key_binding("alt++", "increase_speedup", function() change_speedup(0.1) end)
  203. mp.add_key_binding("alt+-", "decrease_speedup", function() change_speedup(-0.1) end)
  204. mp.add_key_binding("alt+0", "increase_leadin", function() change_leadin(0.25) end)
  205. mp.add_key_binding("alt+9", "decrease_leadin", function() change_leadin(-0.25) end)
  206. mp.register_event("file-loaded", reset_on_file_load)
  207.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement