跨平台多媒体播放器MPV Player“养成计划”
▷ ▲ ▼ ◁
我最初接触到这个开源世界中的多媒体播放器,源于我对Windows平台自带的本地播放器功能羸弱的不满,没错!说的就是你,Windows Media Player!暂且不说可解码的多媒体格式较为有限,在我使用过程中经常会出现快速消耗计算资源和响应慢的情况,终于有一天我忍无可忍了 (╯▔皿▔)╯┻━┻ ,强忍着想要卸载WMP的冲动,决定要找一个合适的继任者。于是我试过一些“轻量级”国产本地播放器,嗯,夹带私货无硬解,整体功能华而不实,鬼!要不试试大佬推荐的PotPlayer、VLC?好,整体功能无懈可击,不过只是作为本地播放器有点大材小用,对不住了。有没有一款足够纯粹、简约、高效的本地播放器呢?搜索引擎的建议是:MPV
。。。MPV不是汽车吗?搁这儿给我推车载音乐播放器是吧?随后我就看到了一行简介:
mpv is a free (as in freedom) media player for the command line. It supports a wide variety of media file formats, audio and video codecs, and subtitle types...
—— https://mpv.io
mpv是一款针对命令行、免费且自由的(自在自由)多媒体播放器。它支持诸多的媒体文件格式、音频和视频编解码器,以及字幕类型……抱着试试看的态度,逐步摸索着开始了“养成计划”,所以我就简单地记录这一年来地使用体验。不过我得提前说明的是,mpv并不是解决这类问题的最优解,这一点我必须得承认,因为它和vim一样都是“养成类”工具,需要你有足够的耐心和时间。再打个比方,mpv的目标受众和ArchLinux类似,欢迎入教(bushi。如果你需要的是符合国人操作习惯,同时拥有华丽界面和丰富网络功能的播放器,那么国产一般都能满足;如果你具有基本的动手能力和计算机技术常识,同时想要自己的播放器是神一样存在的话,那么PotPlayer、VLC将赐予你神力。如果你和我一样需要的只是“纯粹”,那么欢迎你入坑mpv,准备好面对疾风吧! []~( ̄▽ ̄)~*
◤ ◣ ◢ ◥
与其说MPV Player是一个完整的多媒体播放器,倒不如说是播放器核心,它是那么的纯粹与简约,纯粹到连一个像样的GUI界面都“没有”,简约到连播放列表都不提供!几乎是所有地操作都需要通过快捷键、编写相应配置文件的方式才能正常执行,搞我心态呢这是 (⊙x⊙;)!实话实说,我第一次遇到这样“纯粹”的播放界面,简直“感动”的要哭了,放几张截图体会一下


不过也不能责怪mpv,项目官网上明确注明了这是一个专为命令行界面而生的播放器,GUI并不是它努力的方向,而且有很多其他的项目是基于MPV Player完善和创新了GUI功能,进而丰富了mpv社区,所以你可以认为官方的MPV Player只是一个播放器内核,而这个其貌不扬的播放器拥有的是强大且丰富的编解码能力、多媒体播放功能,以及高度自由的可定制化特性(高情商:高度自由可定制,低情商:一穷二白纯手工),果然人不可貌相!
MPV Player的这种“孤僻”性格就注定造就了它在普通用户中的影响力微乎其微,所以仅有极少部分有技术、爱折腾的用户可以说是能够熟练的掌控它(可惜我不是)。先从获取软件包安装开始,官方的建议是使用Git克隆master分支代码自行编译构建,不过项目官网的下载页面(https://mpv.io/installation/)也提供了大量第三方构建包网址,包含Windows、Mac OS、Linux、Android以及BSD平台,真正体现了跨平台的特性。Windows平台编译源码比较困难,所以直接用第三方构建包,如果是GNU/Linux平台可以试试从源码开始编译构建。
软件本体所在根目录大致是这样,其中 installer/ 目录下的批处理文件最主要的作用是添加文件格式关联,doc/ 目录中的文件是使用手册和默认的功能按键绑定示意图。不过在我看来文件格式关不关联无所谓,在桌面生成快捷方式也很简单,相反最重要的是能够看懂使用手册和默认快捷键位布局。所以从现在开始需要适应这种一切依靠键位操作的方式,同时这些功能对应的键位设置也是可以根据自身使用习惯进行自定义的。



最开始需要记忆的无非是几个常用功能对应的快捷键,比如说像播放/暂停、上下切换、音量调节、播放倍速调节之类的,其他功能可以慢慢记忆和适应,这也是高学习成本的表现。
等到熟悉所有的键位操作形式之后,就可以进入更深层次的把玩阶段了,学习使用配置文件来提升你的mpv使用体验。Windows平台下对应的配置文件路径是 %AppData%\mpv\ ,或者直接在软件本体的同级目录中创建名为 portable_config 配置目录当作便携版来使用,通过“win+r”调起运行进入,其他平台,例如GNU/Linux一般在 %HOME%/.config/mpv/ 。如果目录不存在的话可以自行创建,同时创建好预定的几个.conf文件和子目录,便于后续存放和编辑配置信息。mpv.conf 定义了mpv的一些功能特性,input.conf 定义了有关键鼠功能映射的信息,watch_later/ 顾名思义是保存最近一次观看记录与设置的目录(实际使用过程中会出现一些问题),scripts/ 存放用户自定义脚本,script-opts/ 与内置或第三方lua脚本的设置有关。

根据自己的使用习惯,结合使用手册中的说明对以上配置文件进行调整即可实现自定义,培养成专属于你的MPV Player,以我的配置为例,带#为注释,~~/ 表示按配置目录作为当前根目录:
有关键鼠功能映射的配置相对较少,主要是我习惯了默认的映射布局,所以不再做大量更改,如果你是从其他播放器平台转移而来,可以继续自定义成原先平台使用的组合方式:
虽然播放器自带的osc(On Screen Controller)简陋归简陋,但看多了也就习惯了,提供给用户的提示信息足够精简,所以我根据自己的使用习惯略微做些改动。同样的,你完全可以禁用默认osc提示界面,只需要在 mpv.conf 中加一项 osc=no 的配置,然后自行使用lua编写osc界面,重新定义包括播放进度、播放标题、音量提示等其他提示信息样式:
为了进一步规范不同类别的配置项目录结构,自发布这篇专栏之后从配置文件中逐步剔除若干重复、无效以及废弃的配置项,且本着大道至简的原则,以及践行将MPV Player努力打造成短小精悍的本地播放器的初心,不会轻易引入非必要或实验性质的配置项和第三方插件。同时剥离部分配置项至独立的conf文件中,规范并细分配置项职能,以下为最新分离的profile策略配置,需要自行创建对应的目录结构与配置文件:
关于彩蛋,官方默认的osc启动界面在圣诞节前后会自动“戴上”圣诞帽!
至此有关播放器原生设置相关的内容都已经有所了解和接触,这样的播放器已经完全能够胜任本地播放器的职责。不过似乎还可以让它变得更加出色,自行编写或使用其他开发者编写的第三方功能提升脚本可以让MPV Player拥有更高的可玩性(https://github.com/mpv-player/mpv/wiki/User-Scripts),原生支持JavaScript和Lua脚本。为了尽可能地使播放器专注于自己的第一职责,我仅添加了一个真正意义上播放列表脚本。播放器原生的播放列表只有展示功能,缺少选择播放功能,临时调用原生播放列表有两种方式,右键下一曲或<F8>,再或者当你点击下一曲时也会显示:

于是我在 scripts/ 中添加了一个playlist-navigator脚本(https://github.com/drogers141/mpv-playlist-navigator),简单弥补了原生播放器的不足,其他像是autoload、小窗口预览脚本都可以自行添加:

◒ ◐ ◕ ◔
其实,MPV Player的“养成计划”远没有到达终点,有太多的功能和彩蛋等着去探索,更高阶的玩法还有着色器渲染之类,总之我现在已经离不开它了 ╰( ̄ω ̄o)。以上所有的配置文件我已经提交至GitHub仓库(https://github.com/GreatRunoob/mpv-configuration),方便大家参考!

参考资料:
https://mpv.io (MPV Player项目官网)
https://github.com/mpv-player/mpv (MPV Player项目Github网址)
https://www.fsf.org/faif/ (Free as in freedom 2.0)
https://www.bilibili.com/read/cv13479755 (自用MPV播放器.conf文件配置)
https://github.com/mpv-player/mpv/wiki/User-Scripts (第三方用户功能拓展脚本列表)
https://github.com/drogers141/mpv-playlist-navigator (播放列表导航脚本)
https://github.com/GreatRunoob/mpv-configuration (配置文件仓库)
