x86armv7 发表于 2021-5-7 15:55:14

MPV auto-profile 踩的一个小坑

本帖最后由 x86armv7 于 2021-5-7 16:00 编辑

笔电改用了Linux以后mpv成了我的心头好,不过我这个笔电独显是和集显混合的(MUXLESS模式),所以配置好optimus以后习惯在电池供电时用集成显卡模式,禁用独显;
而我自己改的mpv.conf是比较吃负载的(自己写的辣鸡配置文件我就不帖了),所以集显下会掉帧,于是匆忙浏览了一下mpv官方的手册还有坛友孤雨独火的帖子,写了一个根据当前硬解自动换配置(profile)的句段

profile-desc=Auto-switch interpolation & dithering algorithm by hwdec
# 在硬解使用nvdec时才启用此配置,即独显条件下才使用此配置
profile-cond=hwdec-current==nvdec or hwdec-current==nvdec-copy
......
结果并不生效,日志说我的条件里有算数运算。有点摸不着头脑,于是把手册里的Conditional auto profiles一节细看了一遍,发现这么一句话:
You cannot reference properties with - this way since that would denote a subtraction, but if the variable name contains any _ characters, they are turned into -. For example, playback_time would return the property playback-time.
原来如此,用于判断是否启用配置的语句里所用的属性不能存在“-”号,而应将它转换为“_”(下划线),也就是我上面的hwdec-current应该改成hwdec_current,否则mpv会将“-”当作减法运算。
具体根据哪些属性来判断是否启用配置,mpv手册给了一个属性清单,而我匆匆浏览,直接复制的属性清单里的属性名,并没有看到这个注意事项,因此出错,真是心浮气躁惹的祸

话说回来,像我这样根据hwdec来得到相对的显卡状态,切换配置的思路虽然可行,不过有个前提条件就是需要开启自动硬解(hwdec=auto或auto-safe),如果我要用软解的话(比如有些格式无法硬解自动回退到软解),那这个自动配置就失效了。

像这样软解条件下,根据显卡状况切换配置,各位大佬有没有什么好的思路可以指点我一下?

btw,写这个配置前电脑用集成显卡模式时,我都是用VLC看的视频,能自动切换vaapi和vdpau两种硬解(当然它不支持nvdec倒是缺点),感觉VLC还是傻瓜好用,虽然有些朋友不太偏爱

孤雨独火 发表于 2021-5-7 17:00:36

本帖最后由 孤雨独火 于 2021-5-7 17:16 编辑

测试了一下发现这个条件局限性好大。。。
条件部分这样写也不是不行 p["hwdec-current"]==d3d11va


通用设置了hwdec=auto。。。那要怎样才能自动切到nvdec-copy上去{:4_675:}

x86armv7 发表于 2021-5-7 19:30:39

本帖最后由 x86armv7 于 2021-5-7 19:35 编辑

孤雨独火 发表于 2021-5-7 17:00
测试了一下发现这个条件局限性好大。。。
条件部分这样写也不是不行 p["hwdec-current"]==d3d11va


对,后面有一段说的就是这种写法;局限确实比较大,一时找不到啥好方法,所以想发帖集思广益

其实用的是auto-safe,optimus三种混合模式集成/独显/混合,
前两种可能类似告诉系统只有一张显卡,所以换成独显模式(nvidia)时,mpv只能nvdec;
nvdec-copy&vaapi-copy我记得好像是混合模式(hybrid)时会使用,顺手写了规则,
但Linux下n卡驱动混合模式画面严重撕裂,所以我一般不用混合模式,这方面还真不清楚

zxhzxhz 发表于 2021-5-8 19:17:36

有一个笨一点的办法,就是不用mpv做判断,而是在mpv开一个ipc input,然后跑一个脚本在后台,检测到socket上线就发送命令切换

楚轩 发表于 2021-5-8 22:40:39

拿个奖励

yubing0626 发表于 2021-5-12 13:49:02

感谢分享
页: [1]
查看完整版本: MPV auto-profile 踩的一个小坑