Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2020
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.59 KB | None | 0 0
  1. // ==UserScript==
  2. // @name HTML5 Video Playback Speed Control Keyboard Shortcut
  3. // @namespace HTML5VideoPlaybackSpeedControlKeyboardShortcut
  4. // @description Add keyboard shortcuts to control HTML5 video playback rate. Available keyboard shortcuts are: <CTRL+[> = Decreate playback rate, <CTRL+]> = Increase playback rate, <CTRL+\> = Set playback rate increment/decrement unit, <CTRL+'> = Set playback to specific rate, <CTRL+;> Reset playback rate to default (to 1.0). Default playback rate incement/decrement is configurable via script.
  5. // @version 1.2.6
  6. // @license AGPLv3
  7. // @author jcunews
  8. // @include *://*.khanacademy.org/
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13.  
  14. /*
  15. Notes:
  16. 1. YouTube's video playback speed menu selection will not be affected.
  17. 2. Web browser playback rates: Firefox = 0.25 to 5.0; Chrome = 0.1 to 16.0.
  18. */
  19.  
  20. //=== CONFIGURATION BEGIN ===
  21. var runIv = true;
  22. var interval = setInterval(() => {
  23. if(runIv) {
  24. try {
  25. //Playback rate increment/decrement unit
  26. var rateUnit = 1.0;
  27.  
  28. //Duration (in milliseconds) to display On Screen Display (OSD) when changing playback rate. Set to zero or less to disable.
  29. var osdTimeout = 3000;
  30.  
  31. var default_speed = 1.0;
  32.  
  33. var ele = document.querySelector("VIDEO"), rate, inp;
  34.  
  35. ele.playbackRate = default_speed;
  36.  
  37. //=== CONFIGURATION END ===
  38.  
  39. var eleOSD, osdTimer;
  40. function showOSD(rate) {
  41. if (eleOSD) {
  42. eleOSD.textContent = rate + "X";
  43. } else {
  44. eleOSD = document.createElement("DIV");
  45. eleOSD.style.cssText = "position:fixed;z-index:999999999;right:5px;bottom:5px;margin:0;padding:5px;width:auto;height:auto;font:bold 10pt/normal monospace;background:#444;color:#fff";
  46. eleOSD.textContent = rate + "X";
  47. document.body.appendChild(eleOSD);
  48. }
  49. clearTimeout(osdTimer);
  50. osdTimer = setTimeout(function() {
  51. eleOSD.remove();
  52. eleOSD = null;
  53. }, osdTimeout);
  54. }
  55.  
  56. addEventListener("keydown", function(ev) {
  57. var ele = document.querySelector("VIDEO"), rate, inp;
  58. if (ele && ev.ctrlKey && !ev.shiftKey && !ev.altKey) {
  59. rate = rate = ele.playbackRate;
  60. switch (ev.key) {
  61. case "[":
  62. rate -= rateUnit;
  63. if (rate < 0.1) rate = 0.1;
  64. break;
  65. case "]":
  66. rate += rateUnit;
  67. if (rate > 16) rate = 16;
  68. break;
  69. case "\\":
  70. if ((inp = prompt("Enter playback rate increment/decrement unit.", rate)) === null) return;
  71. if (isNaN(inp = parseFloat(inp.trim())) || (inp <= 0) || (inp >= 16)) {
  72. alert("Number must be greater than zero, and less than 16.");
  73. return;
  74. }
  75. rate = inp;
  76. break;
  77. case "'":
  78. if ((inp = prompt("Enter playback rate.\n(1.0 = Normal)", rate)) === null) return;
  79. if (isNaN(inp = parseFloat(inp.trim())) || (inp < 0.1) || (inp > 16)) {
  80. alert("Number must be between 0.1 to 16 (inclusive).");
  81. return;
  82. }
  83. rate = inp;
  84. break;
  85. case ";":
  86. rate = 1;
  87. break;
  88. default:
  89. return;
  90. }
  91. rate = parseFloat(rate.toFixed(2));
  92. ele.playbackRate = rate;
  93. if (osdTimeout > 0) showOSD(ele.playbackRate);
  94. }
  95. });
  96. runIv = false;
  97. } catch(e) {
  98. }
  99. }
  100. });
  101.  
  102. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement