Open dyphire opened 7 months ago
mpv的行为好像就是这样的,命令行启动参数会持续生效,外挂轨道也不例外,用起来感觉很怪。
比如用mpv 1.mp4 --sub-file=test.ass
启动,然后autoload.lua自动添加 2.mp4 3.mp4 ... 到播放列表,外挂字幕test.ass会对播放列表中的所有视频生效。
这个插件能做的很有限,它只是取到播放链接之后通过powershell调用mpv。
可能自己写lua脚本能解决,最好还是改改使用习惯,要看其他视频另开个进程,不共用一个进程就行。
突然想到个解决办法,前不久刚引入的--input-commands选项 mpv-player/mpv@91489c9,启动时运行一次,后续不改动的话不会运行。
启动选项应该都能改成命令的形式丢到--input-commands
里,例如--sub-file
选项改成sub-add
命令,
mpv 1.mp4 --input-commands="sub-add test.ass select"
这样启动的话就不会影响播放列表中其他视频。
但是此方案不兼容旧版本mpv
原来是 mpv 这个特性导致,那解决方案很简单。在传递参数时用 mpv --\{ url --options --\}
的方式就可以把传递的特定参数限定在 url 中了
其实 mpv 官方手册有提到这个用法:https://mpv.io/manual/master/#per-file-options
好特殊的用法,从来没注意过,
确实可以,但是powershell转义字符比较怪,不是\
而是`
, cmd是不需要转义的
mpv --{ 1.mp4 --sub-file=test.ass --}
成功mpv --\{ 1.mp4 --sub-file=test.ass --\}
报错mpv --{ 1.mp4 --sub-file=test.ass --}
报错mpv --\{ 1.mp4 --sub-file=test.ass --\}
报错mpv --`{ 1.mp4 --sub-file=test.ass --`}
成功还有个问题是基于libmpv的第三方GUI ImPlay mpv.net 等等有可能不支持这种特殊写法,太多了也没法一一测试, 毕竟之前发现mpv.net连List Options都不支持 https://github.com/LuckyPuppy514/Play-With-MPV/issues/130#issuecomment-1860651635 (后续已添加支持 mpvnet-player/mpv.net@86c823b) 代码里应该要判断主程序名是mpv.exe才能用大括号写法。
操作系统:windows11
浏览器:edge
复现问题的操作: 在 b 站上使用脚本调用 mpv 播放视频,此时正常播放;尝试切换至其他本地视频进行播放
出现的具体问题: 切换至本地视频后脚本依然会塞入 b 站原视频的元数据
报错截图:
可能的解决方法: 尝试监视 mpv 的 end-file 状态,生效时停止以上行为