You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否向嵌入式mpv进程的屏幕控制器(OSC)发送鼠标事件?

解决mpv程序化与内置OSC交互的问题

核心问题分析

mpv内置OSC是通过Lua脚本实现的,它对鼠标事件的处理依赖于完整的输入事件序列和正确的坐标映射,直接调用mp.commandv("mouse", ...)发送单次点击事件可能无法被OSC正确识别,原因包括坐标未适配视频区域、事件序列不完整等。

解决方案步骤

1. 修正坐标映射

OSC的交互区域基于视频渲染区域而非整个窗口,你需要从osd-dimensions中提取黑边偏移,将窗口坐标转换为视频区域相对坐标:

local osd_dim = mp.get_property_native("osd-dimensions")
local mouse_pos = mp.get_property_native("mouse-pos")
-- 转换为视频区域内的相对坐标
local x_adjusted = mouse_pos.x - osd_dim.ml
local y_adjusted = mouse_pos.y - osd_dim.mt

你的输出中ml=322,说明窗口左侧有322像素黑边,直接使用原始mouse-pos的X坐标会落在黑边区域,OSC不会响应。

2. 发送完整的鼠标事件序列

OSC需要识别完整的按下-释放事件对,而非单次single命令。替换原有的mp.commandv("mouse")调用:

-- 先移动鼠标到目标位置(确保OSC感知到位置)
mp.commandv("mouse_move", x_adjusted, y_adjusted)
-- 发送左键按下+释放事件
mp.commandv("mouse", x_adjusted, y_adjusted, 1, "down")
mp.commandv("mouse", x_adjusted, y_adjusted, 1, "up")

第三个参数1代表鼠标左键,down和up组合模拟完整点击动作。

3. 直接调用OSC内部Lua函数(进阶)

如果上述方法仍无效,可以直接调用OSC脚本的内部事件处理函数。mpv允许通过脚本消息处理器与内置OSC交互:

local osc_handler = mp.get_script_message_handler("osc")
if osc_handler then
    -- 模拟鼠标点击事件(参数对应OSC的mouse_event处理逻辑)
    osc_handler:send("mouse_event", "down", 1, x_adjusted, y_adjusted)
    osc_handler:send("mouse_event", "up", 1, x_adjusted, y_adjusted)
end

注:此方法依赖mpv内置OSC的内部API,若OSC版本更新可能需要调整参数,可参考mpv源码中osc.lua的mouse_event函数实现。

4. 启用OSC调试排查

在mpv配置中添加osc-debug=yes,OSC会输出详细的事件日志,你可以通过日志确认事件是否被接收、坐标是否正确,进一步定位问题。

测试用修正Lua脚本

local mp = require 'mp'   

local function trigger_osc_click()
    local osd_dim = mp.get_property_native("osd-dimensions")
    local mouse_pos = mp.get_property_native("mouse-pos")
    
    local x_adjusted = mouse_pos.x - osd_dim.ml
    local y_adjusted = mouse_pos.y - osd_dim.mt
    
    print("Adjusted mouse position - X:", x_adjusted, "Y:", y_adjusted)
    
    -- 发送完整点击事件序列
    mp.commandv("mouse_move", x_adjusted, y_adjusted)
    mp.commandv("mouse", x_adjusted, y_adjusted, 1, "down")
    mp.commandv("mouse", x_adjusted, y_adjusted, 1, "up")
end 

mp.add_key_binding("k", "trigger_osc_click", trigger_osc_click)

内容的提问来源于stack exchange,提问作者djsumdog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:28:26