孤雨独火 发表于 2020-5-21 21:05:52

[MPV] 从零开始 打造属于自己的osc UI

本帖最后由 孤雨独火 于 2022-4-18 20:18 编辑

本文已过时,附件已移除


[*]前言(mpv0517/0524版osc存在严重bug,临时解决方案issue
在mpv没有官方的GUI前端和全能可靠的第三方前端的情况下,在官方也没有相关的详细文档前提下,并不代表你不能对他进行任何界面元素及进行自定义和美化。
这只是一篇粗浅的修改指南,因为我自己都没研究透彻内部的参数,但是对大部分人来说我所写已经足够满足轻度自定义的需求。


[*]准备工作
一个基础的代码编辑器,例如 notepad3 / sublime text3 (如果你不嫌两三千行代码眼花的话记事本也能凑活);
获取最新的官方osc脚本(使用mpv缩略图脚本的用户直接编辑 mpv_thumbnail_script_client_osc.lua / osc_mod.lua);


[*]正文
打开 osc.lua ,巨大的文本量展现在你眼前,莫慌。mpv其实内置了不止一套的布局方案,现在默认的是 bottombar ,topbar 只是把地下的提到了最上方,无他差别。下文所说的 元素 即播放,下一曲,进度条这几个按钮部件。


[*]bottombar/topbar layout
先从最简单的讲起,如果你喜欢默认的界面只是觉得颜色过于单调,很简单。熟练的Ctrl+F查找到这一部分,如果你是做字幕的专业户,应该对这个语法非常熟悉,毕竟就是ass字幕格式规范。

看下图所示的默认的布局元素(我是用的topbar布局进行实验)

我已经把同类格式进行了颜色区分,各类元素在bottombar/topbar layout中所受对应的参数影响,已在图中标出。
以其中一条元素的参数为例:
timecodesBar = "{\\blur0\\bord0\\1c&H00FF00\\3c&HFFFFFF\\fs27}"blur控制元素的高斯模糊,bord 控制元素边框粗细。
下边这个 1c&H 是控制元素的颜色,后边接的 00FF00 是rgb数值,但是根据ass规范,必须RRGGBB反写成BBGGRR格式,例如:

你喜欢这个颜色,查找rgb表显示数值为 #20B2AA,但是必须写成 1c&HAAB220 才能正确显示这个颜色。3c&HFFFFFF 是边框颜色。
fs 即元素的大小。
[*]classic box layout
曾经的经典布局,第三方ui也主要靠修改这个布局进行自定义。(你喜欢这个布局?直接看测试部分调出这个布局)

大部分元素的对应参数不同,已在图中标出。
在 osc.lua 的 Layouts 部分是经典布局的具体设定

w , h 不用多说,r 为矩形的圆角度,至于 p 则是内边距(元素到box的距离,设定越高元素越挤在一起)
local posX , Y 设定的是box的相对位置,如果你嫌默认的高度太上,就如图中一样操作,+数字 使box往下。(不推荐此处修改,通过 osc.conf 中对应参数调节)
[*]slimbox layout
过于简洁,反而感觉基本的功能缺失~~~u1s1应该没人用这个吧,略

[*]mpv_thumbnail_script相关
找到 display options 这一部分

vertical_offset 控制的是缩略图与进度条的距离。pad_top 这四项目是缩略图的边框粗细。background_color 同样需要反写rgb。background_alpha 即边框背景透明度,注意此项需要单独设置,不受 osc.conf 中的 boxalpha 参数影响。
再往下的 Thumbnail options 这部分不要在osc里修改,在外部的 mpv_thumbnail_script.conf 修改会自动覆盖这些参数。



[*]测试
如何应用自己修改过的osc呢?
如果你是基于 classic box 布局的修改,先将你修改后的 osc.lua (这个脚本名字叫啥无所谓)放置在 你的mpv配置文件夹/scripts/ 中,然后 mpv.conf 中需要以下两条前置命令:
osc=no # 这一步是禁用了内置的osc脚本
load-scripts=yes并且在 你的mpv配置文件夹/script-opts/ 中建立 osc.conf ,并内置三行命令:layout=box # 这一步是选择你所要应用的布局,默认为"bottombar",其他还有"topbar"和极限精简的"slimbox"
seekbarstyle=bar # 你还可以选择 diamond/knob 试试看
boxalpha=100 # <0-255> 此项控制osc整体透明度,数值为0时不透明(缩略图脚本的边框透明度不受此项控制)打开mpv看视频,已经应用新的布局。(当然mpv文件夹路径不要有奇怪的字符,包括中文,创建的文本注意换行转换,否则无法在最新版mpv中生效)


[*]其它
基于mpv缩略图脚本修改的用户,你的缩略图在y轴位置在不同布局下位置也并不同;
关于 osc.conf 的其他可行参数在 osc.lua 中有描述,请不要在lua里边直接修改,将你想要调整的参数写进 osc.conf ,会自动覆盖 osc.lua 中的预设值。


这只是个初步的修改教程,因为这个代码过于复杂超过了我目前的理解能力,所以我也只能写到这里。
同理,测试part的那些操作同样适用于你在网上找的第三方UI。比如仿IINA或者pot:





附:翻译整理的 osc.conf 中可设定的参数
注意格式,此文档不支持 boxalpha=170 # -- box元素的整体透明度 这类写法,注释须另起一行。
#showwindowed=true
# -- 窗口化时显示OSC 默认:是
#showfullscreen=true
# -- 全屏时显示OSC 默认:是

#scalewindowed=1
# -- 窗口化时OSC的缩放系数 默认:1
#scalefullscreen=1
# -- 全屏时OSC的缩放系数 默认:1
#scaleforcedwindow=2
# -- 在强制窗口上渲染时缩放?? 默认:2 --scaling when rendered on a forced window
#vidscale=true
# -- 随视频大小缩放OSC? 默认:是

valign=0.96
# -- 垂直对齐 默认0.8 --vertical alignment, -1 (top) to 1 (bottom)
#halign=0
# -- 水平对齐 默认0 --horizontal alignment, -1 (left) to 1 (right)
#barmargin=0
#-- 使用"bottombar/topbar"布局时的底/顶栏的垂直边距,默认0

boxalpha=170
# -- box元素的整体透明度 默认80 -- 0 (opaque) to 255 (fully transparent)

#hidetimeout=500
# -- 如果鼠标没有移动,则OSC隐藏的持续时间(毫秒)。对用户强制非负,但内部负“始终打开”,默认500。-- duration in ms until the OSC hides if no mouse movement. enforced non-negative for the user, but internally negative is "always-on".
#fadeduration=200
# -- 淡出持续时间(毫秒)默认:200 , 0 = no fade

#deadzonesize=0.5
# -- size of deadzone

#minmousemove=0
# -- 鼠标必须在刻度之间移动的最小像素数才能显示OSC,默认:0

#iamaprogrammer=false
# -- 使用 native mpv values 并禁用 OSC internal track list management(以及一些依赖于它的功能),默认:否

layout=box
# -- 选择内置的布局方案:box, slimbox, 默认bottombar, topbar
seekbarstyle=bar
# -- 选择进度条样式:默认bar, diamond, knob

#seekbarhandlesize=0.6
# -- diamond与knob的尺寸比

#seekrangestyle=inverted
# -- seekrange的风格:bar, line, slider, 默认inverted, none
#seekrangeseparate=true
# -- 是否将seekranges覆盖在bar-style的进度条上,默认:是
#seekrangealpha=200
# -- seekrange的透明度,默认:200

#seekbarkeyframes=true
# -- 拖动进度条时使用关键帧,默认:是

#title="${media-title}"
# -- 与属性扩展兼容的字符串,显示为OSC标题 --string compatible with property-expansion to be shown as OSC title

#tooltipborder=1
# -- "bottom/topbar"布局中的工具提示边框 --border of tooltip in bottom/topbar

#timetotal=false
# -- 显示总时间而不是剩余时间?默认 否
#timems=false
# -- 以毫秒为单位显示时间码?默认:否 display timecodes with milliseconds?

#visibility="auto"
# -- only used at init to set visibility_mode(...)

#boxmaxchars=99
# -- 在"box"布局下的标题字符数的上限值,原版osc.lua中默认:80;懒人包版默认:99

#boxvideo=false
# -- apply osc_param.video_margins to video

#windowcontrols="auto"
# -- 是否显示窗口控件 默认:auto
#windowcontrols_alignment="right"
# -- 在哪一侧显示窗口控件 默认:右

#greenandgrumpy=false
# -- 禁用圣诞帽 默认:否 --disable santa hat





楚轩 发表于 2020-5-21 22:38:20

看不懂 膜拜大佬{:4_665:}

苏辰汐 发表于 2020-5-22 09:39:01

其实默认的osc就可以了,暂时没必要折腾,因为其他osc好像并不支持章节显示,比较头痛的是太复杂没找到显示章节标题的方法。

孤雨独火 发表于 2020-5-22 14:12:17

苏辰汐 发表于 2020-5-22 09:39
其实默认的osc就可以了,暂时没必要折腾,因为其他osc好像并不支持章节显示,比较头痛的是太复杂没找到显示 ...

官方的四个布局都是支持的,第三方应该是改的时候阉割了

苏辰汐 发表于 2020-5-22 14:30:44

孤雨独火 发表于 2020-5-22 14:12
官方的四个布局都是支持的,第三方应该是改的时候阉割了

原来如此,看来我是第三方受害者。不过之前折腾了一圈还是觉得默认的顺眼,无边框扁平化挺好的,其他变回拟物化ui了

孤雨独火 发表于 2020-5-23 23:11:27

本帖最后由 孤雨独火 于 2020-5-24 20:01 编辑

0517/0524版osc存在bug,等待官方修复

Gizmo 发表于 2020-5-26 16:11:13

問一個不相關的問題

下面這個dark UI是linux版本的,win版本有沒有?

https://mpv.io/images/mpv-screenshot-34cd36ae.jpg

孤雨独火 发表于 2020-5-26 16:14:17

Gizmo 发表于 2020-5-26 16:11
問一個不相關的問題

下面這個dark UI是linux版本的,win版本有沒有?

这个不就是bottombar么,顶部的明显是标题栏,那是操作系统自带的框架啊{:13_956:}

Gizmo 发表于 2020-5-26 16:19:10

對,標題列,系統自帶?

但是使用深色模式不會跟隨系統啊

孤雨独火 发表于 2020-5-26 16:37:58

Gizmo 发表于 2020-5-26 16:19
對,標題列,系統自帶?

但是使用深色模式不會跟隨系統啊
很显然网站的那张图是个远古版本没换过(连音量/全屏按钮都没有)
然后官方是没有编译版的,所以linux上的全是第三方个人编译的,至于为什么不随颜色变换,这可能是编译的问题(找开发者),也可能是系统的问题。
我的debian系mpv是没有这个问题的
页: [1] 2
查看完整版本: [MPV] 从零开始 打造属于自己的osc UI