HTML5 Video Playback Speed Control Keyboard Shortcut

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.

  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 http://*/*
  9. // @include https://*/*
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14.  
  15. /*
  16. Notes:
  17. 1. YouTube's video playback speed menu selection will not be affected.
  18. 2. Web browser playback rates: Firefox = 0.25 to 5.0; Chrome = 0.1 to 16.0.
  19. */
  20.  
  21. //=== CONFIGURATION BEGIN ===
  22.  
  23. //Playback rate increment/decrement unit
  24. var rateUnit = 1.0;
  25.  
  26. //Duration (in milliseconds) to display On Screen Display (OSD) when changing playback rate. Set to zero or less to disable.
  27. var osdTimeout = 3000;
  28. var default_speed = 1.0;
  29.  
  30. var ele = document.querySelector("VIDEO"), rate, inp;
  31. ele.playbackRate = default_speed;
  32. //=== CONFIGURATION END ===
  33.  
  34. var eleOSD, osdTimer;
  35. function showOSD(rate) {
  36. if (eleOSD) {
  37. eleOSD.textContent = rate + "X";
  38. } else {
  39. eleOSD = document.createElement("DIV");
  40. 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";
  41. eleOSD.textContent = rate + "X";
  42. document.body.appendChild(eleOSD);
  43. }
  44. clearTimeout(osdTimer);
  45. osdTimer = setTimeout(function() {
  46. eleOSD.remove();
  47. eleOSD = null;
  48. }, osdTimeout);
  49. }
  50.  
  51. addEventListener("keydown", function(ev) {
  52. var ele = document.querySelector("VIDEO"), rate, inp;
  53. if (ele && ev.ctrlKey && !ev.shiftKey && !ev.altKey) {
  54. rate = rate = ele.playbackRate;
  55. switch (ev.key) {
  56. case "[":
  57. rate -= rateUnit;
  58. if (rate < 0.1) rate = 0.1;
  59. break;
  60. case "]":
  61. rate += rateUnit;
  62. if (rate > 16) rate = 16;
  63. break;
  64. case "\\":
  65. if ((inp = prompt("Enter playback rate increment/decrement unit.", rate)) === null) return;
  66. if (isNaN(inp = parseFloat(inp.trim())) || (inp <= 0) || (inp >= 16)) {
  67. alert("Number must be greater than zero, and less than 16.");
  68. return;
  69. }
  70. rate = inp;
  71. break;
  72. case "'":
  73. if ((inp = prompt("Enter playback rate.\n(1.0 = Normal)", rate)) === null) return;
  74. if (isNaN(inp = parseFloat(inp.trim())) || (inp < 0.1) || (inp > 16)) {
  75. alert("Number must be between 0.1 to 16 (inclusive).");
  76. return;
  77. }
  78. rate = inp;
  79. break;
  80. case ";":
  81. rate = 1;
  82. break;
  83. default:
  84. return;
  85. }
  86. rate = parseFloat(rate.toFixed(2));
  87. ele.playbackRate = rate;
  88. if (osdTimeout > 0) showOSD(ele.playbackRate);
  89. }
  90. });
  91.  
  92. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址