MPV播放器loop-file属性持久化Lua脚本异常问题求助
MPV播放器loop-file属性持久化Lua脚本异常问题求助
大家好,我最近在写一个Lua脚本,想实现MPV播放器退出时保存loop-file的循环状态,下次启动时自动恢复,但遇到了棘手的问题:第一次生成状态文件后,后续退出播放器时文件内容不再更新,而且启动时也没法从文件里正确加载之前保存的循环状态。
我目前用的脚本代码是这样的:
local filepath = mp.command_native({"expand-path", "~~/loop-file-state"}) local loadfile = io.open(filepath, "r") if loadfile then set_loop_file = string.sub(loadfile:read(), 11) loadfile:close() mp.set_property_number("loop-file", set_loop_file) end mp.register_event("shutdown", function() local savefile = io.open(filepath, "w+") savefile:write("loop-file=" .. mp.get_property("loop-file"), "\n") savefile:close() end )
我已经尝试过两种修改,但都没解决问题:
- 尝试把写入文件的内容改成带双引号的格式:
savefile:write("loop-file=\"" .. mp.get_property("loop-file") .. "\"", "\n") - 之前
string.sub的起始位置是8,后来我改成了11(对应"loop-file="的长度),但依然没用。
有意思的是,我写的保存/恢复音量的脚本是完全正常的,代码如下:
local filepath = mp.command_native({"expand-path", "~~/volume"}) local loadfile = io.open(filepath, "r") if loadfile then set_volume = string.sub(loadfile:read(), 8) loadfile:close() mp.set_property_number("volume", set_volume) end mp.register_event("shutdown", function() local savefile = io.open(filepath, "w+") savefile:write("volume=" .. mp.get_property("volume"), "\n") savefile:close() end )
为了排查问题,我用socat命令查看了两个属性的返回值,发现了一个明显差异:
- 正常工作的
volume属性返回的是不带引号的数字:% echo '{ "command": ["get_property", "volume"] }' | socat - "/tmp/mpv-socket" | jq . { "data": 56.519417, "request_id": 0, "error": "success" } - 有问题的
loop-file属性返回的是带双引号的字符串:% echo '{ "command": ["get_property", "loop-file"] }' | socat - "/tmp/mpv-socket" | jq . { "data": "inf", "request_id": 0, "error": "success" }
我猜测会不会是因为loop-file的返回值是字符串类型(带引号),而volume是数字类型,导致脚本在读取和写入时处理逻辑出了问题?有没有大佬能帮我分析下问题所在,或者给个可行的修复方案?
备注:内容来源于stack exchange,提问作者Ahmad Ismail
相关产品推荐
相关产品推荐

