LuckyPuppy514 / Play-With-MPV

使用 MPV 播放网页中的视频
MIT License
602 stars 20 forks source link

调用 mpv 播放后切换至本地视频播放仍然会塞入 b 站原视频的元数据 #146

Open dyphire opened 7 months ago

dyphire commented 7 months ago
verygoodlee commented 7 months ago

mpv的行为好像就是这样的,命令行启动参数会持续生效,外挂轨道也不例外,用起来感觉很怪。 比如用mpv 1.mp4 --sub-file=test.ass启动,然后autoload.lua自动添加 2.mp4 3.mp4 ... 到播放列表,外挂字幕test.ass会对播放列表中的所有视频生效。

这个插件能做的很有限,它只是取到播放链接之后通过powershell调用mpv。

可能自己写lua脚本能解决,最好还是改改使用习惯,要看其他视频另开个进程,不共用一个进程就行。

verygoodlee commented 7 months ago

突然想到个解决办法,前不久刚引入的--input-commands选项 mpv-player/mpv@91489c9,启动时运行一次,后续不改动的话不会运行。

启动选项应该都能改成命令的形式丢到--input-commands里,例如--sub-file选项改成sub-add命令, mpv 1.mp4 --input-commands="sub-add test.ass select" 这样启动的话就不会影响播放列表中其他视频。 但是此方案不兼容旧版本mpv

dyphire commented 7 months ago

原来是 mpv 这个特性导致,那解决方案很简单。在传递参数时用 mpv --\{ url --options --\} 的方式就可以把传递的特定参数限定在 url 中了

其实 mpv 官方手册有提到这个用法:https://mpv.io/manual/master/#per-file-options

verygoodlee commented 7 months ago

好特殊的用法,从来没注意过, 确实可以,但是powershell转义字符比较怪,不是\ 而是`, cmd是不需要转义的

verygoodlee commented 7 months ago

还有个问题是基于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才能用大括号写法。