Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OmniSpeed

OmniSpeed

Global video speed controller — not just a browser extension, but a desktop app that speeds up any player, up to 16×.

全局倍速播放器 —— 不只是浏览器插件,而是桌面应用,浏览器与本地播放器都能倍速,最高 16 倍速。

Platform: Windows 10/11 Playback speed up to 16x Built with Tauri 2 Core: Rust Status: early development License: TBD

Note

项目处于早期开发阶段,尚未发布可用版本。当前已完成桌面应用界面、系统托盘、全局快捷键、屏幕悬浮提示(OSD)、桌面播放器适配(mpv / VLC / PotPlayer / MPC-HC,IPC 优先、按键兜底),浏览器扩展(Chrome / Edge / Firefox,Native Messaging + Rate-Guard 倍速锁定,0.25×–16×,B 站 / 抖音 / YouTube / 腾讯视频 / 爱奇艺 / 优酷 / 西瓜 / 快手八站适配),以及站点级锁定设置。按应用记忆与安装包见开发进度

OmniSpeed 是什么

与只能作用于单个浏览器的倍速插件不同,OmniSpeed 是一款常驻系统托盘的桌面应用:一套全局快捷键同时控制 Chrome / Edge / Firefox 里的网页视频和 VLC / PotPlayer / mpv 等本地播放器,倍速范围 0.25×–16×,并对哔哩哔哩、抖音、YouTube 等主流平台做了防复位适配。完全本地运行、零数据外传、开源可审计。

为什么不用浏览器插件

浏览器倍速插件 OmniSpeed
生效范围 装了插件的那一个浏览器 浏览器 + 桌面播放器,全局统一
换个软件 失效,得重新找方案 同一套快捷键继续用
倍速上限 受站点 UI 限制,通常 2×/3× 直接控制播放内核,最高 16×
切集/拖进度 常被站点脚本复位回 1× 倍速锁定,持续保持目标倍速
多软件切换 各记各的 按应用/网站记忆,切回自动恢复

功能

  • 全局快捷键:任意软件在前台时,Ctrl+Alt+↑/↓ 都能调速,屏幕悬浮提示当前倍速。
  • 突破平台上限:平台菜单最高 2×/3× 只是 UI 限制,OmniSpeed 直接控制浏览器播放内核,可用 0.25×–16× 的任意倍速。
  • 倍速锁定:拦截站点在切集、切 P、拖进度、自动连播时对倍速的复位;你在播放器上主动调速则会被尊重并同步。
  • 短视频流跟随:抖音、快手、YouTube Shorts 滑到下一条时自动继承当前倍速。
  • 桌面播放器适配:mpv、VLC、PotPlayer 优先走控制接口,一步设到精确倍速、无需窗口在前台;其余播放器用模拟快捷键兜底。
  • 平台客户端接管:哔哩哔哩桌面端等 Chromium 套壳客户端一键接管后,经仅本机可见的 CDP 通道直接控制内部视频——客户端里也能 0.25×–16× 任意倍速,突破其自带 2×/3× 档位。
  • 按应用记忆:记住每个应用/网站上次用的倍速,切回去自动恢复。
  • 直播与广告识别:直播流禁用倍速并提示,平台广告时段不干预,正片恢复。
  • 本地优先:不联网、不采集浏览内容,所需系统权限均可在设置中关闭。

支持范围

类别 支持对象
浏览器 Chrome、Edge、Firefox(最新两个大版本)
视频平台(网页端) 哔哩哔哩、抖音、YouTube、腾讯视频、爱奇艺、优酷、西瓜视频、快手;其余站点走通用 HTML5 适配
平台桌面客户端 哔哩哔哩桌面端(CDP 接管,已可用);抖音 / 快手 / 西瓜客户端(Chromium 系,铺开中);腾讯视频 / 爱奇艺 / 优酷客户端(UIA 方案设计中)
桌面播放器 VLC、PotPlayer、MPC-HC、mpv、KMPlayer,以及可自定义规则的其他软件
操作系统 Windows 10/11 (x64) 首发;基于 Tauri 2 构建,macOS / Linux 已在架构层预留

能力边界

有些事从软件外部做不到,这里说明白,避免误解:

  • 无法让任意封闭软件的画面加速。视频的解码与渲染发生在目标软件进程内部,外部无权干预。OmniSpeed 的做法是"统一遥控器"——对浏览器精确设速,对播放器走控制接口或模拟它自己的快捷键,而不是劫持任意像素。
  • 超过约 4× 后浏览器会静音。这是浏览器内核的预期行为(不再做音频时间拉伸),OmniSpeed 会明确提示并提供一键回到 4×。
  • 高倍速吃带宽。5× 播放需要约 5× 的实时带宽,弱网下可能追着缓冲卡顿,可开启智能降速自动回落。
  • 不绕过任何付费、DRM 与防作弊校验。部分网课平台会校验播放进度,高倍速可能不被平台承认。

安装

尚未发布正式版本。可按下方步骤从源码构建,或关注 Releases 获取后续版本。

从源码构建

前置要求:

  • Node.js ≥ 20(含 npm)
  • Rust stable 工具链
  • Windows:WebView2 运行时(Windows 11 自带)

在仓库根目录执行:

npm install          # 安装依赖(npm workspaces)
npm run dev          # 仅前端:Vite 开发服务器,浏览器预览界面
npm run tauri dev    # 桌面应用:编译 Rust 并启动窗口
npm run tauri build  # 打包 NSIS 安装包(按当前用户安装,免管理员)

打包与发布说明:

  • 安装包启用了自动更新产物(createUpdaterArtifacts),构建前需配置更新签名私钥: tauri signer generate -w <路径> --password <密码> 生成密钥对,公钥写入 tauri.conf.json(已配置);构建时设置环境变量 TAURI_SIGNING_PRIVATE_KEY (私钥文件内容)与 TAURI_SIGNING_PRIVATE_KEY_PASSWORD。私钥请勿入库。
  • 自动更新清单指向 GitHub Releases(latest.json),发布时把 tauri build 产出的 安装包与 *.siglatest.json 一并上传到 Release。
  • 正式分发需要 Windows 代码签名(Authenticode):全局键盘钩子 + 模拟输入易被杀软 误报(开发文档 §7.6),拿到证书后在 bundle.windows.signCommand 接入签名命令。

开发进度

阶段 内容 状态
M0 桌面应用骨架、四页界面、系统托盘 已完成
M1 全局快捷键、冲突检测、屏幕悬浮提示 已完成
M2 桌面播放器适配(控制接口 + 模拟按键) 已完成
M3 浏览器扩展、倍速锁定、主流站点适配 已完成(B 站 / 抖音 / YouTube 首批适配;其余站点通用 HTML5)
M3.5 更多站点规则、Firefox NM、站点级锁定设置 已完成(八站适配齐;站点级锁定/上限/跟随全链路;Firefox 双产物 + NM 注册)
M4 按应用/网站记忆、设置项落地、安装包、开机自启、自动更新 已完成(代码签名待证书)
M4.5 平台桌面客户端接管(CDP + UIA 分层) 进行中(哔哩哔哩桌面端已打通:一键接管 + 0.25×–16× 精确设速 + 回读,真机验证通过;抖音/快手/西瓜按同模式铺开中;腾讯/爱奇艺/优酷 UIA 方案设计中)
M4.6 客户端防复位守护 已完成(页内 guard 拦截切集/换 P 复位、手势窗口放行用户调速;持久守护会话跨整页导航自动续速;未接管时热键 OSD 引导接管;B 站客户端真机验证通过)
M4.7 八站网页端真机回归 已完成(Chrome + 解包扩展 + CDP 自动化逐站实测;B 站/抖音/YouTube/腾讯/爱奇艺/优酷/快手七站全链路通过,西瓜视频网页端已被站点关闭;修复优酷广告误判与腾讯播放器选择器漂移,见下)
M4.8 百度网盘桌面端适配 已完成(模拟按键通道支持精确设速:0.5×–5×、0.1× 精度;生产整条链路真机验证通过:前台监听 → 规则/网格 → 全局快捷键 → 悬浮提示 → 按键下发 → 倍速回读,见下)
M4.9 MPC-HC / VLC 无回读通道的倍速对齐 已完成(MPC-HC 改走 14 档绝对倍速命令,VLC 补按键倍速网格并实测连发间隔 150→20ms;真机验证通过:协议层 14 档扫描 + 网格逐键 + 生产链路 #[ignore] 测试双层背书,独立 Web 口回读吻合;唯 8× 为播放器渲染链自身上限、自报 8.0,见下)

MPC-HC / VLC:让「显示的倍速」等于「播放器真实倍速」

MPC-HC 的 WM_COMMAND 通道此前只会步进(ID_PLAY_INCRATE / DECRATE)、且没有任何回读, OmniSpeed 只能按「当前值 ± 步长」开环推算再显示。而 MPC-HC 出厂设置下一次步进是倍增/减半nSpeedStep 默认 0),所以从第一下起显示值就与播放器对不上。

查 clsid2 维护版源码发现它其实有一整套绝对倍速命令ID_PLAY_PLAYBACKRATE_025..800, 命令码 5001–5014,映射到 0.25/0.5/0.75/0.9/1/1.1/1.25/1.5/1.75/2/3/4/6/8×), 一条消息即落到确定倍速。改用它之后倍速由档位本身决定,不再需要推算,显示与实际一致; 滑块与预设就近取档,热键一次挪一档。

同时给 VLC 补上按键倍速网格:VLC 的 =(回到 1×)与 ] / [(0.1× 整格步进) 正好构成「绝对锚点 + 均匀步进」,HTTP 接口没配密码而落到按键通道时也能精确设速 (0.25×–2.1×,超出该范围按键数会超上限,仍退回步进)。

MPC-BE 顺带拆成独立规则:它与 MPC-HC 的播放/步进命令码一致,但没有绝对倍速命令, 此前被当作 MPC-HC 的别名,绝对命令发过去会静默失效。

真机验证(MPC-HC 2.8.1 / VLC 3.0.23,winget 安装)分两层做完:协议层——MPC-HC 14 档绝对命令逐条从外部进程下发、以其 Web 口 playbackrate 与播放位置推进速率双重回读, 13 档实测吻合,唯 8× 是渲染链自身上限(自报 8.0、实走 ~3×,MPC-HC 自己的 OSD 同样显示 8×);VLC =/]/[ 逐键实测 0.1× 整格步进、0–40ms 连发零丢键(连发间隔因此从保守的 150ms 改为实测背书的 20ms)、边界 2.1×/0.3× 可达。生产链路——两条 #[ignore] 真机 测试走真实的规则解析 → 适配器 → 取档/计划 → 下发,独立 Web 口回读验收,全部通过。 过程中还发现 VLC 的 HTTP 与快捷键各改一层 rate 变量(input 层 / playlist 层), 本网格「先按 = 归位再步进」的形态恰好天然免疫这一分层陷阱。

八站网页端真机回归

站点适配规则此前都是照文档写的「最佳努力值」,从未在真实页面上验证过。M4.7 用 Chrome + 解包扩展 + CDP 自动化把八站逐个跑了一遍:每站导航真实播放页,检查倍速锁定脚本 是否注入、适配器与播放器选择器是否命中、直播/广告识别是否正确,并完整走一遍 「2.5× → 站点复位被拦截 → 16× 突破站点上限 → 恢复 1×」。

站点 结果
哔哩哔哩 / 抖音 / YouTube / 腾讯视频 / 爱奇艺 / 优酷 / 快手 全链路通过
西瓜视频 网页端已被站点关闭(www.ixigua.com 强制跳转 App 下载页),规则保留待站点恢复

回归揪出并修掉了两个真实缺陷:

  • 优酷全站倍速失效:广告层容器被播放器常驻在页面里(无广告时是看不见的空壳), 旧判据把它当成「正在放广告」,而广告时段本就会暂停倍速干预 —— 于是优酷上倍速跟随、 防复位、导航恢复全部悄悄失效。现改为只有广告层里真的画出了内容才算广告时段。
  • 腾讯视频播放器定位失准:规则里的容器类名比实际少一个字母,从未命中过, 一直靠通用兜底掩盖;同屏多个播放器时会选错主视频。已按真机结构校准。

回归与校准工具在 apps/extension/test/,用法见扩展 README

百度网盘桌面端:让模拟按键也能精确设速

百度网盘的播放器界面是 Electron,画面却由原生播放器解码后合成上去,页面里没有 <video> 元素。控制接口与 CDP 那套(都建立在 playbackRate 上)对它一律无效, 能用的只剩播放器自带的键盘快捷键。

模拟按键此前只能「按一下快一点」,因为相对步进离不开当前倍速,而按键通道读不回来。 百度网盘的数字键 15 给的却是绝对倍速——按下即钉死到确定值。有了这种绝对档位, 先按最近的档位键、再用 , / . 补足差额,全程不需要知道播放器的原状态, 于是模拟按键第一次做到了精确设速:0.5×–5×,0.1× 精度,最多 6 次按键

一个只有真机才暴露的坑:步进键要先读回当前倍速再加减,而播放器把这一步摊在异步 IPC 上。 连发太快时后一次读到的还是旧值,两次按键算出同一个结果,表现为静默少走一格—— 按键通道没有回读,少走的这一格永远补不回来。因此连发间隔是各播放器的实测值 (百度网盘 150ms),跨档位设速时能看见倍速爬升半秒左右,属正常。

模拟按键需要播放器窗口在前台,OmniSpeed 会在下发前自动激活它。

模拟按键:下发前先中和用户按着的修饰键

全局快捷键按定义就带修饰键(默认 Ctrl+Alt+↑/↓/0),触发的那一刻用户十有八九还按着 CtrlAlt。此时发给播放器的 . 会被系统合成成 Ctrl+Alt+.——播放器不认这个组合, 整条丢弃。真机上的表现是悬浮提示跳到了目标值、画面倍速却纹丝不动, 而且所有走模拟按键的播放器都中招,只是此前的验证都绕开了快捷键这条路才一直没暴露。

现在下发前会先把用户物理按着的修饰键抬起来,发完原样按回去,整串一次性提交, 中间不存在「修饰键半开」的时间窗。按回去这一步不能省:按住 Ctrl+Alt 连点 是常规用法,修饰键若停在抬起状态,从第二下起快捷键就不再匹配。 另外单独抬起 AltWin 会被系统读成呼出窗口菜单/开始菜单,抬起顺序把 Ctrl 垫在最后, 用户没按 Ctrl 时则临时补一个把这个动作遮掉。

项目结构

OmniSpeed/
├─ apps/
│  ├─ desktop/            # Tauri 桌面应用(React + TypeScript 前端 / Rust 核心)
│  └─ extension/          # 浏览器扩展 MV3
├─ crates/                # 可复用 Rust 库
└─ Img/                   # 品牌素材

参与贡献

欢迎提交播放器与站点的适配规则、问题反馈与改进建议。站点适配采用声明式规则,新增一个平台通常只需要补一份规则文件。

许可

开源许可待定(MIT / Apache-2.0)。

About

Global video speed controller — not just a browser extension, but also a desktop app that speeds up any player, up to 16×.全局倍速播放器 —— 不只是浏览器插件,桌面应用,浏览器与本地播放器都能倍速,最高 16 倍速。

Topics

Resources

Stars

6 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages