#1 - 2022-5-25 20:06
=L=+
简而言之,在有视频的网页,打开你浏览器的devtool(按f12),点到console,把下面的代码粘过去,回车。

{
    const key = 'Digit1'
    // 键盘按下的键:数字1键
    const rate = 3
    // 按下后的倍速:3倍速

    const video = document.querySelector('video')
    document.addEventListener('keydown', (e) => {
        if (e.code === key && e.repeat === false) {
            video.playbackRate = rate
        }
    })
    document.addEventListener('keyup', (e) => {
        if (e.code === key) {
            video.playbackRate = 1
        }
    })
}


↑像这样

现在你按住键盘上的数字1键,视频就会是3倍速播放了。

上面做的事情算是给网页加了个用户脚本,直接往控制台里粘代码作为凑合来说其实还挺够用的,就是换个页面就要再粘一次。之后也许会看看tampermonkey怎么用,搞个更像样的东西出来吧。

大概前一年的什么时候吧,阿B的播放器更新了→键长按三倍速的功能,是真的好用,在别的地方也想要这个功能!大大小小的在线视频网站,播放器五花八门的,本来以为会是很难搞的事情,最近读了一下MDN的文档,发现比想象的简单的多。播放器用的都是html5的video标签,然后它本身就提供了播放速度的api,然后就绑绑按键就搞定了,真是不能再简单了。





Q&A
“可以改成Q键、W键、E键吗?”
“可以改成4倍速、5倍速、6倍速吗?”
我相信你能看得懂代码里的注释,key的值可以参考javascript.info以及MDN



“我想用的键已经有功能了,怎么把原本的功能去掉?”

如果有大佬知道怎么搞请务必教教我(bgm38)
我之所以会去绑数字1键就是因为搞不定→键的绑定(bgm38),1键和→键一样,上面没有别的键,适合于长按。
(我没讲清楚,具体说一下:播放器自己的快进绑的是→键,就算加上了长按三倍速,也会连续触发keydown,然后它就是3倍速的同时快进 快进 快进,就很淦。)
2023-03-11:有思路了



“按键可以是toggle的吗,就按一下倍速,再按一下原速?”

{
    const key = 'Digit1'
    const rate = 3

    const video = document.querySelector('video')
    let speedUp = false
    document.addEventListener('keydown', (e) => {
        if (e.code === key) {
            speedUp = !speedUp
            if (speedUp) {
                video.playbackRate = rate
            } else video.playbackRate = 1
        }
    })
}

上面的代码就是toggle的了,只是一点微小的改动。



“怎么没效果?”
可能一:video元素在iframe里
video元素在iframe里的话,需要正确的context才能找到它。

用左上角那个工具点一下视频,再回到console,另一个红圈的地方选的就会正确的context了,这时候你再把代码粘进去就会有效果了。
当然你也可以直接在那里选context,如果你知道正确的是哪个的话。

可能二:不止一个video元素
代码里用querySelector找video标签,返回的是找到的第一个video元素,并不能100%保证找到的就是播放器。

你可以试着用左上角那个工具找一下播放器的video标签,不是一下子就找到了的话,ctrl+f,搜索<video,应该就能找到了。
然后在它上面右键,复制 js path,用复制的 js path 代替代码里的document.querySelector('video')就行了。

还是不行:寄





ps:还有一些奇奇怪怪的网站不让你f12打开devtool、右键不给你出菜单、不停清空你的控制台等等,不是很懂他们整的是哪出,但都不是问题。

pps:啊对,上一帧、下一帧也是好文明!也许你不知道,youtube的播放器有这个功能,要靠快捷键触发,不知道是怎么实现的,有那么个seekToNextFrame的api,但用的不是那个,chrome没有支持这个api,可youtube就是能上一帧、下一帧,很神奇。
#2 - 2022-5-25 20:30
大善
#3 - 2022-5-25 20:35
(但要进步 就必有坟墓)
马克
#4 - 2022-5-25 20:58
(大変に気分がいい)
mark
#4-1 - 2022-5-25 22:02
瑠衣
+1
#4-2 - 2022-5-25 22:24
#4-3 - 2022-6-9 11:49
#4-4 - 2023-3-10 22:36
#4-5 - 2023-3-10 22:38
咖喱
+1
#4-6 - 2023-3-11 18:02
cmt2022
+1
#4-7 - 2023-3-11 21:39
#5 - 2022-5-25 21:00
(表达能力极差)
我之所以会去绑数字1键就是因为搞不定→键的绑定(bgm38),1键和→键一样,上面没有别的键,适合于长按。
if (event.code === 'ArrowRight')
不行吗
#6 - 2022-5-25 21:10
可以考虑做成油猴脚本,更方便使用
#7 - 2022-5-25 21:11
(Dream a dream)
mark,utube快捷键很有用
#8 - 2022-5-25 21:18
小知识→键的键码是39
#9 - 2022-5-25 21:19
→键长按三倍速,这么实用的功能我竟然才知道
#10 - 2022-5-25 21:19
(chanceyan)
b站在线可以用dmlive调用mpv来实现倍速和一帧,同时感谢楼主分享技巧
#10-1 - 2022-5-25 21:28
君寻
dmlive怎么用?
#10-2 - 2022-5-25 21:42
chanceyan
君寻 说: dmlive怎么用?
https://fars.ee/Z2pA
项目地址在下面,
https://github.com/THMonster/Revda
#10-3 - 2022-5-25 21:47
君寻
chanceyan 说: https://fars.ee/Z2pA
项目地址在下面,
https://github.com/THMonster/Revda
原来是获取视频流然后调用mpv啊,和you-get差不多
我还以为可以在浏览器调用mpv播放(bgm38)
#10-4 - 2022-5-25 21:49
chanceyan
君寻 说: 原来是获取视频流然后调用mpv啊,和you-get差不多
我还以为可以在浏览器调用mpv播放
也类似yt-dlp,浏览器硬解有点折腾就用mpv了
#10-5 - 2022-5-25 22:09
snylonue
君寻 说: 原来是获取视频流然后调用mpv啊,和you-get差不多
我还以为可以在浏览器调用mpv播放
等有了 mpv-wasm 以后来挖坟(bgm38)
#11 - 2022-5-25 21:57
((((;゚Д゚)))))))
#11-1 - 2022-6-4 12:13
頂上ノ月🌙
不错 刚好够用(bgm39)
#11-2 - 2022-6-14 23:57
Jerry@Bangumi
这个是1.x版本的页面哦,2.x在这里(其实点进上面链接也能看到)
https://timer.palerock.cn/
#12 - 2022-5-25 22:38
(Ignorance, yet knowledge. Chaos, yet harmony.)
mark,网课必备小技巧
#13 - 2022-5-27 13:36
#13-1 - 2022-5-27 14:05
=L=+
好强(bgm38)
#13-2 - 2023-3-10 23:32
abcdeegg
我也用的这个
#13-3 - 2023-3-11 01:06
#14 - 2022-5-27 13:50
#15 - 2022-5-27 13:56
(都是异端!)
都是好东西 谢谢兄弟萌
#16 - 2022-5-27 14:07
推荐这个插件:Video Speed Controller
https://chrome.google.com/websto ... fgbnbgppjihopabppdk

默认步进 0.1x,但是在同一网站内会保留倍速设定,有的教学类视频我自己测试 2x 太快,1.5x 又太慢,1.8x左右就比较合适。
#16-1 - 2023-3-11 00:56
#16-2 - 2023-3-11 21:20
NekoNull
OH_toothache 说: 这个比较好用https://chrome.google.com/websto ... ppibceonlgknpkniiff
感谢推荐,看起来功能很全
#16-3 - 2023-3-12 00:50
OH_toothache
NekoNull 说: 感谢推荐,看起来功能很全
这个就是楼上油猴脚本的作者给我推荐的。我向他要功能,他直接让我下这个。他估计所有的都试过了。。。。
#17 - 2022-5-27 14:22
(。´-д-)
我只看bilibili和YouTube,B站用 Bilibili Evolved,YTB自带倍速和逐帧快捷键 (bgm38)
#18 - 2022-5-27 14:34
#19 - 2022-5-28 12:05
压缩成一行用 javascript 协议头就可以加进收藏夹然后每次点一下,不用再打开控制台了~
#19-1 - 2022-5-28 15:03
=L=+
学到了👍
#19-2 - 2023-3-11 00:14
XBan
=L=+ 说: 学到了&#x1F44D;
这种技巧应该是叫小书签(bgm24)
#20 - 2022-6-4 14:19
马克一下
#21 - 2022-6-4 14:27
(ドラマチックな死は、僕らにはふさわしくありませんよ)
mark
#22 - 2022-6-9 11:50
(朋友不多,但很快活。)
mark
#23 - 2022-6-9 22:16
学习一下
#24 - 2022-6-9 22:18
(咪啪☆~~)
mark
#25 - 2022-6-14 23:27
mark
#26 - 2022-6-15 14:37
mark
#27 - 2022-9-13 00:32
https://github.com/polywock/globalSpeed
直接wsad快捷键控制速度,无上限限制,a减速d加速s在1倍和多倍之间toggle
#28 - 2022-9-13 00:41
(go the fuck to sleep)
#29 - 2022-10-24 05:00
mark
#30 - 2023-3-10 22:36
感谢,一直想给youtube弄一个。
搜了半天找到了怎么屏蔽youtube的右键功能,然后苦恼怎么判断是长按和按下,又找了好一会发现原来早有人写好了:
https://greasyfork.org/en/script ... back-rate-of-videos
感谢这个作者,对着代码抄一下终于完成了(bgm93)


// ==UserScript==
// [user=name]名字[/user]         youtube 右键长按倍速
// [user=name]名字[/user]space    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.youtube.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// [user=grant]七濑[/user]        none
// ==/UserScript==

(function () {
    "use strict";

    {
        const key = "ArrowRight";
        const rate1 = 1;
        const rate3 = 3;
        // 按下计数器
        let downCount = 0;

        const video = document.querySelector("video");
        // 获取当前播放速度,用于keyup的时候恢复
        let currentRate = video.playbackRate;

        document.addEventListener(
            "keydown",
            (e) => {
                if (e.code !== key) {
                    return;
                }
                // 阻止事件传播,屏蔽网站原先按键功能
                e.stopPropagation();
                downCount++;
                // 只在第一次重复按压的时候执行
                if (downCount === 2) {
                    currentRate = video.playbackRate;
                    video.playbackRate = rate3;
                }
            },
            true // 重要,没有true 会无法屏蔽
        );

        document.addEventListener("keyup", (e) => {
            if (e.code !== key) {
                return;
            }
            e.stopPropagation();
            // 单击右键结束
            if (downCount === 1) {
                video.currentTime += 5;
            }
            // 长按右键结束
            if(downCount >= 2){
                video.playbackRate = currentRate;
            }
            downCount = 0;
            console.log(`当前倍速是:${video.playbackRate}`)
        });
    }
})();
#30-1 - 2023-3-11 00:21
=L=+
牛逼
#30-2 - 2023-3-11 00:22
=L=+
删除了回复
#31 - 2023-3-10 23:44
(喜欢捣鼓电脑的萌豚)
mark
#32 - 2023-3-11 00:28
mark
#33 - 2023-3-11 00:40
参考#30的回复学到了
以下这段脚本可以让网页的所有按键失灵:
document.addEventListener(
    'keydown',
    (e) => {
        e.stopPropagation()
    },
    true
)

前置知识:冒泡和捕获
原理:
那个true代表使用捕获模式
e.stopPropagation()停止了事件传播
捕获在冒泡前发生
一般的监听器都是冒泡阶段的监听器

结果就是keydown发生了,但原网页的监听器没收到,所以没触发

竟然是从事件传播上下手脚,头皮发麻,我一直想着怎么移除原网页的监听器
#33-1 - 2023-3-12 20:29
番茄味的平底锅
推荐一下“hoothin”的脚本 ,不仅实现了长按倍速播放而且可以使用鼠标在视频区域内任意拖动视频进度

https://github.com/hoothin/UserS ... 1%E5%A2%9E%E5%BC%BA
#34 - 2023-3-11 01:19
(神がやらなきゃ人がやる)
mark
#35 - 2023-3-11 01:22
(ダメ人間)
mark
#36 - 2023-3-11 17:52
(普通一小宅)
马克