播放器进度调整

播放器进度调整 公开 已发布

ilcpm 分享于 2024-06-01 01:48 | 1 | 1
如何安装动作?

适用于
分类
全局快捷键 功能增强 功能


更多信息
分享时间 2024-06-01 01:48
最后更新 2024-06-01 01:48
修订版本 0
用户许可 可自己使用或修改,不可再分享
Quicker版本 1.42.43
动作大小 8.1 KB

分享到

「自动判断调整potplayer/浏览器的视频播放进度/速度,如果potplayer正在运行且处于播放状态,就调整potplayer的进度,否则调整浏览器中的视频进度」

简介

《一种自动判断视频是在本地播放器还是网页浏览器播放 并 根据用户指令自适应调整对应平台的播放进度/播放速度的方案》

《一套对本地播放器和网页浏览器视频播放的通用控制方案》


问题背景

看视频学习时,我们可能正在其他的程序里记笔记/看教材(或者摸鱼),如果没听清想回退几秒,或者某一段讲的慢/快需要调整播放速度,这是一件很麻烦的事情;更进一步,视频可能是本地播放器播放,也可能是在网页浏览器里在线播放,这更增加了情况的复杂性

所以我们希望的是:用户通过自己觉得方便的方式发送“前进5秒”/“后退5秒”/“调整播放速度”等指令,动作自行判断当前正在播放视频的是本地播放器还是网页浏览器,而后发送对应的指令执行相应的操作;即,用户用一套指令同时具有对本地播放器和网页浏览器的视频控制功能

本动作对此提供了一套完整的解决方案

注:

  • 本动作对本地和网页视频的适配方式是:检测potplayer是否正在播放视频,是则调整potplayer,否则调整网页播放器
  • 因此本地视频只对potplayer有效,其他本地播放器需要自行研究如何判断它们是否正在播放视频

本动作在我个人的使用场景下最终的效果是(你也可以改成其他你想要的方式):

  • 鼠标侧键+滚轮=>控制视频进度前进后退;
  • 鼠标侧键+鼠标中键=>切换播放速度(例如1倍速和2倍速);
  • (仅限我自己的鼠标)其他侧键暂停/播放视频;
  • 最终可以只通过鼠标,实现对本地和网页视频的控制
  • 配合动作播放器临时倍速可实现长按鼠标中键倍速播放视频,松开恢复的效果

有点长,请耐心阅读(如果你采用和我相同的方式进行触发,5分钟即可完成配置,不难

具体实现(使用方法)

提问:为什么不直接说怎么用就好了,我不想看原理解释

回答:因为每个人的使用习惯不同,如果你不使用和我相同的快捷键来触发这些功能,就需要手动修改动作里的快捷键配置,就算你使用和我相同的方案,也需要进行相应的配置,所以无论如何都得看这些说明

要实现上述功能,需要解决以下几个问题:

  • 如何对本地播放器进行控制
  • 如何对网页播放器进行控制
  • 如何判断是对本地播放器还是对网页播放器进行控制(难点)


1. 网页播放器的控制

chrome类浏览器中,可以使用扩展Global Speed: 视频速度控制(网址为chrome商店地址,Edge浏览器可自行搜索商店)对网页播放器进行快捷键控制

原理为:

  • 在扩展中配置“命令A/B/C...”的功能,例如我这里的命令A是后退5秒,命令B是前进5秒……
  • (点击图中的“🔗图标”跳转)
  • 在chrome设置中,配置激活该扩展的“命令A/B/C...”的全局快捷键,例如我这里的命令A快捷键是“Ctrl Shift A”
  • 最终的效果是:在“全局”(任意程序中)按下快捷键“Ctrl Shift A”,都会被chrome识别并触发该扩展的“命令A”,而命令A被定义为“播放进度后退5秒”,所以该扩展会执行该功能,效果达到

在quicker动作里一共配置了3个功能:

  • 进度前进/后退,播放速度切换,
  • 对应图里的命令A、命令B、命令C,
  • 我配置的全局快捷键分别为“Ctrl Shift A”,“Ctrl Shift D”,“Alt Shift Z”(你也可以根据需要更改快捷键,后续需要在quicker动作中进行调整)

到此,网页播放器的准备完成。

注意:如果你没用过这个扩展,可能需要先熟悉这个扩展的功能并手动测试这些功能,确保你自己会用这个扩展,再使用本动作进行锦上添花,否则可能不知道问题出在什么地方,后文我对该扩展的使用进行了一些说明。


说明

说明(防止有人不会用):

  • 对于播放速度切换,比如你偏爱在1.5倍和1倍速之间切换,你可以先用该扩展调整播放速度到1.5倍,而后使用上述命令C的快捷键,即可在1.5倍速和1倍速之间切换了
  • 该扩展可能会阻止网页播放器自带的速度调整功能,以后可能都需要使用该扩展进行调整了,为了方便,你可以通过“速度滑块”和“速度预设”功能把你需要的功能提前放好:
    • 例如我常用的速度为1,1.25,1.5,其他情况通常也只需要在1倍速和2倍速之间调整,因此我把“速度预设”设置为只有1行,定义的3个速度分别为1,1.25,1.5,而“速度滑块”设置为1到2倍速;这样一般就只需要点击预设里的3个按钮快速切换速度,对于需要1.5以上的速度时,通过滑块拖动实现,2倍速就直接拖到最右边就好了

    • “默认固定”功能指的是“是否对每个标签页启用独立的播放速度”,不建议打开,防止播放速度乱七八糟的


    2. 本地播放器控制

    potplayer或者其他本地播放器中都可以轻松的配置全局快捷键,来实现在播放器外部时对播放器的控制,本动作的工作场景只支持potplayer,在这里无需进行任何配置


    3. 判断potplayer是否正在播放

    这里只进行原理介绍,用户无需进行任何配置,可忽略该节

    这才是最难的地方,只有找到方法判断本地播放器或者网页播放器是否正在播放,我们才能让动作自动判断该操作哪一边,否则就需要每次操作时手动指定要操作哪个播放器

    但是要判断是否存在网页播放器在播放是很难的事情,上述的浏览器扩展并没有提供对应的接口,因此只能从本地浏览器下手

    (由于potplayer找不到任何官方的文档,最开始我是打算放弃改用VLC的,VLC测试之后可以通过解析某个VLC提供的网页html里的内容来读取VLC是否正在播放,后来又找到了potplayer的解决方案,就放弃了VLC)

    经过搜索,在GitHub的一个项目中找到了通过SendMessage方法向potplayer发送信息进行控制和获取状态的方法,于是现在我们可以判断本地的potplayer是否正在播放并进行操作了,且不必配置全局快捷键



    4. 动作的使用和自定义快捷键

    原理解释完了,看怎么用吧

    动作的触发

    动作一共接受3个参数:left, right, mid(左,右,中),分别控制进度后退/前进和切换播放速度,你可以用你喜欢的方式触发它们进行控制

    (因为控制浏览器的进度采用了快捷键,因此不建议使用纯键盘触发,可能会因为按下的键位不一致导致无法触发,需要用户自行测试)

    推荐使用高级鼠标触发,通过侧键或者键盘进行配合操作,我个人的用法是:将鼠标侧键设置为shift,而后通过shift+鼠标滚轮滚动进行进度控制,通过shift+鼠标中键进行播放进度切换;你也可以直接使用X1等侧键按键进行配置



    自定义快捷键

    如果你在浏览器中使用了和我相同的快捷键(“Ctrl Shift A”,“Ctrl Shift D”,“Alt Shift Z”),则无需进行任何配置,直接在quicker中进行配置即可

    简单情况:

    如果需要修改,则此处逻辑有点复杂,先看简单情况:

    • 如果你不使用Ctrl Shift Alt这3个键的任意一个作为触发该动作的方式,例如你只使用鼠标X1+鼠标滚轮/中键进行触发
    • 那么直接修改动作中“浏览器进度”字典里的值即可,值的内容参照模拟按键B的写法
    • 而后将”辅助键代码“变量留空

    配置完成

    复杂情况:

    如果你像我一样,使用了Ctrl Shift Alt中的某一个作为鼠标触发的方式,例如我用的shift+鼠标滚轮/中键,现在假设你用的是Ctrl+鼠标滚轮/中键进行触发,你需要这样做:

    • 在“辅助键”变量里填入Ctrl的按键名称,可以在这里查询,例如Ctrl就是“ControlKey”
    • 在“辅助键”代码中,填入Ctrl的模拟按键B的代码,例如Ctrl的代码为“^”,shift的代码为“+”,alt的代码为“%”
    • 在“浏览器进度”字典中,修改为你自己的快捷键代码,并去掉Ctrl键的代码,例如我的left对应的快捷键是Ctrl Shift A,所以我这里的代码应该是“^+a”,又因为我这里的辅助键是shift,所以从里面去掉shift的代码“+”,最终在left里填入代码“^a”(注意字母小写),其余按键同理
    • 配置完成


    之所以如此复杂,是因为存在这样一个问题:鼠标触发的时候如果使用了Ctrl,那么发送快捷键控制浏览器的时候你的Ctrl仍然是处于按下状态的(此时你还没松开),(下图中的步骤)发送快捷键控制浏览器时,就不能发送Ctrl键;因为如果你按着Ctrl又发送Ctrl,最终等于没有发送Ctrl给浏览器;例如你在图里的步骤发送Ctrl Shift A,因为你触发动作时按住了Ctrl,所以这里Ctrl被抵消,实际发送的是Shft A,最终无法触发;因为Ctrl已经被你按下了,所以你真正应该发送的是Shift A,配合你已经按下的Ctrl,才能正确触发,有点绕……

    总之,你触发本动作时,使用的特殊按键就是这里的辅助键,将辅助键的信息填入对应的变量中,并从“浏览器进度”的代码里去掉辅助键的代码即可




    FAQ

    问:多个potplayer的情况下可能判断失误播放器

    答:我懒,动作默认只查找一个potplayer并判断找到的那个的状态,如果找到的那个没有在播放,就控制网页去了,理论上是可以判断所有打开的potplayer的状态的,如果有多人提出这个需求的话我应该会加上


    问:为什么没有播放/暂停功能?

    答:暂停的时候仍然可以遵循“如果potplayer在播放就暂停它,否则暂停网页浏览器”的逻辑,但是继续播放的时候呢?如何判断应该继续播放potplayer还是网页浏览器?因此播放/暂停功能我个人是在鼠标上配置了两个不同的快捷键来实现:

    • potplayer启动后会自动接管“媒体键”里的“播放/暂停”,发送这个按键即可操作potplayer

    • 浏览器仍然遵循浏览器的控制逻辑,前文中我配置的是快捷键“Ctrl Shift 空格”

    最近更新

    修订版本 更新时间 更新说明
    0 2024-06-01 01:48

    最近讨论

    随便聊聊 · 72
    Sunsh 2024-06-01 10:31 Sunsh 2024-06-08 22:04