用灵犀claw写lua脚本自动控制mpv播放器
wils
Lv.4 核心创作者
一直想试试mpv的lua扩展,但实在太懒没有上手🤣
就像wps里的js宏
mpv播放器里可以用lua操作对象,控制播放器的方方面面
还是用上次的听力测试mp3做例子
直接让灵犀claw写扩展:
用下载目录里的mpv.exe播放media1.mp3,需要写个lua脚本扩展mpv,开始播放后3秒自动暂停,并自动快进10秒,当我按空格继续播放是从13秒开始
测试成功后,让它根据检测出的静音片段,改写脚本
这里出了个小问题,直接运行脚本没有报错,但mpv闪退,检查后发现,表格里记录静音片段结束位置用了end这个保留关键字,让灵犀检查错误修改一次后,完全正确了
得到的结果就是:
用mpv播放media1.mp3时加载lua脚本进行控制
遇到空白时自动暂停,且快进到下一条听力测试的开头处
按空格播放下一条听力测试,再自动暂停自动快进
总的来说非常爽,就像用jsa扩展wps表格
这里用lua扩展mpv播放器
没有任何上手难度,只要提要求,很快得到满意的结果🎉
最后贴上脚本,不一定完美,但能用够用
-- auto_control.lua
-- 功能:播放时遇到每个超过2秒的空白片段自动暂停并跳过,
-- 按空格继续播放到下一个空白片段,以此类推直到结束
local silence_segments = {
{ start = 24.45, stop = 29.69 },
{ start = 39.26, stop = 44.74 },
{ start = 51.33, stop = 56.64 },
{ start = 64.52, stop = 69.86 },
{ start = 77.95, stop = 81.29 },
}
local current_segment = 1
local is_paused_on_silence = false
local check_timer = nil
local function check_position()
if is_paused_on_silence then
return
end
local time_pos = mp.get_property_number("time-pos", 0)
if mp.get_property_bool("pause", false) then
return
end
if current_segment <= #silence_segments then
local seg = silence_segments[current_segment]
if time_pos >= seg.start - 0.1 then
is_paused_on_silence = true
mp.set_property_number("time-pos", seg.stop)
mp.set_property_bool("pause", true)
end
end
end
mp.observe_property("pause", "bool", function(name, value)
if not value and is_paused_on_silence then
is_paused_on_silence = false
current_segment = current_segment + 1
end
end)
mp.register_event("file-loaded", function()
current_segment = 1
is_paused_on_silence = false
if check_timer then
check_timer:kill()
end
check_timer = mp.add_periodic_timer(0.1, check_position)
end)
mp.register_event("end-file", function()
if check_timer then
check_timer:kill()
check_timer = nil
end
end)
Lv.3 优质创作者