分享mpv播放机设置方法教程和参数配置

2020-03-11 11:04发布


文章转自VBS-C

2017.11.20更新:
     禁用了刷新率切换,主使用interpolation。如要启用刷新率切换请手动去掉注释。
     理清了nnedi3和ravu的shaders作者提供的主目录、gather文件夹和compute文件夹三个版本的关系
2017.11.21更新:
   
  参照 https://github.com/haasn/gentoo- ... me/nand/.mpv/config 新增了几项设置。
2017.11.27更新:
     
autospeedwin的作者merge了我的pull request,我把round计算的帧率改成了floor计算。但暂停的部分仍为原来的部分,如果能work的话可以试试github上的,不行再用老方法,都不行。。我也没办法了。
2017.12.05:发现2017.12.03更新的nightly版mpv能正确读外挂字幕文件名里的language code了。字幕文件要命名成:

视频文件名.xxxx-lan.后缀

或者

视频文件名.xxxx_lan.后缀

lan就是language code,只能是2或3字符。比如sc,chs。xxxx用于放字幕组信息。或者直接没有xxxx-部分也行。
2017.12.09:autoload-sub-in-mka.lua完成了它的使命,现在mpv本身已解决了这个问题。见commit中修复了,去掉了外挂音轨/字幕只加载音轨/字幕的filter
2017.12.10:因为NNEDI3的启用分辨率由0.8倍以内变为1/根号2以内,所以少许修改了下auto-profile的4倍的分辨率判断。
2017.12.14:使用glsl-shaders-clr后,现在auto-profiles选择不同的profile时能正确取消掉之前其他profile带来的影响。
2017.12.20:还是让dither-depth自己判断
2017.12.31:加入
KrigBilateral,在用NNEDI3没法用RAVU的时候使用
2018.03.16:重新说明RAVU-chroma无法和NNEDI3一起使用
2018.12.10:说明blend-subtitles=yes和HDR视频的冲突
2018.12.11:建议在4K视频上采用较高的线程数(vd-lavc-threads)
2019.01.06:不再推荐adaptive-antiring,转而推荐SSimSuperRes作为antiring的手段。(igv自己删除了adaptive-antiring,只建议使用SSimSuperRes。)
2019.01.13:1. 在auto-profile的条件判断中弃用container-fps,只用estimated-vf-fps;2. 加入save-position-on-quit,并说明mpv配置文件夹需要写入权限。
2019.01.14:更新autoload.lua(上游修正了一个bug,相应地把改过的版本更新了)
2019.02.24:更新两项关于libass对vsfilter兼容性的设置
2019.02.25:根据视频是否是HDR/是否是21:9自动开关blend-subtitles,以及使21:9视频的字幕输出到黑边上
2019.03.08:ravu smoothtest更名为ravu ar
2019.03.10:自mpv https://github.com/mpv-player/mp ... f15be9f267f9cb2230e 和 RAVU https://github.com/bjin/mpv-pres ... 7320451cb32c0d50162 之后,RAVU chroma已经能和luma prescaler一起工作
2019.03.13:SSimDownscaler需要linear-downscaling=no;移除seek-show-position.js(一直以来都理解错了,这个脚本完全不需要);引入acme-0.5x;简化profile的写法。
2019.06.17:mpv的一些更新:
    1. 自mpv ae1c489后,以及KrigBilateral.glsl随后的更新(OFFSET ALIGN),KrigBilateral就能自动处理offset了(之前是在脚本里写死了0.5的偏移,2018.10.21前的版本是没有考虑偏移)。
    2. mpv c9e7473起可以使用error diffusion dithering。具体开启方式是

dither=error-diffusion

前提是已经开了dither,不开error diffusion时默认是fruit算法。
error diffusion也提供了很多算法,
默认

error-diffusion=sierra-lite

觉得显卡太闲可以试试

error-diffusion=burkes

   3. bjin不再推荐RAVU的antiring版本。本帖也只是拿来做做chroma upscaling,目前仍有ravu-zoom-r4-chroma这个chroma upscaler,但简单起见都改用KrigBilateral得了。
2019.08.22:已知error-diffusion在特定条件下会使得d3d11蓝屏,见 https://github.com/mpv-player/mpv/issues/6814  所以待这个issue解决前要么d3d11不启用error-diffusion,要么换vulkan后端。
2019.09.16:autospeedwin有bug用不了,见427楼修改过的版本。
2019.10.31:mpv已支持windows下的10 bit输出和HDR colorspace的设定,但尚未完全支持HDR。
2019.11.03:模板配置文件中不再写vulkan或者opengl。
2019.12.11:去除行内注释,否则直接复制粘贴的conf有参数有多余尾部空格的问题。
2020.01.08:自build-20200105之后,shinchiro的build默认使用fontconfig,而且默认不读取系统字体,需要更改fonts.conf
2020.01.15:build-20200112起已同时支持directwrite和fontconfig,0105版存在的问题已解决。

======================以下正文======================
在发现mpc-be和potplayer的wasapi audio render在我的设备上都会导致A/V desync后,狠了下心准备彻底转mpv了。由于坛子里讲mpv的帖是真的少:
Mac苹果电脑上怎么看10bit HEVC的正确方法:OSX系统上使用MPV播放器入门教程
在Linux系统使用mpv播放器,分享mpv的scaler设置
而且VCB教程里也完全没有提及过mpv,所以想分享下对mpv的配置积累的经验,就当抛砖引玉吧。顺便熟练使用mpv的前辈们可以帮忙看一下我这配置里是否有不合理的地方。

一开始接触mpv是在玩SVP的时候,只有mpv支持10bit输出给SVP,所以当时用着SVP内置的mpv。由于2大原因还是放不下madVR系列,但其中色彩管理部分已经由@boday解惑(PotPlayer+LAV+madvr长时间播放后逐渐音画不同步问答),剩下的就只有image quality部分了。但又详细检索下发现,至少NNEDI3作为luma upscaler还是能用的,chroma也有RAVU,就不再那么惦记NGU啦。

我这篇只讲windows下的使用,Linux和macOS的设置可能会有差异(比如d3d11和wasapi只在windows上有)。
首先是安装:https://sourceforge.net/projects/mpv-player-windows/files/64bit/
解包到有用户写入权限的位置,比如C:\。管理员权限运行installer/mpv-install.bat,设置默认程序。

一般只要下一次,因为解包后里面自带一个更新用脚本updater.bat。想要更新只需右键管理员权限运行这个bat文件即可。只是要注意的是这个脚本要高版本powershell的支持,win7自带的powershell 2是不行的。我装了5,见:https://www.microsoft.com/en-us/download/details.aspx?id=54616
Win10自带的版本够高,不需要再自己更新powershell。
如果用的是build-20200105,那么请更新,只有那一个版本存在加载字体的问题。
贴出mpv.conf,注释里大概讲讲理由吧,然后再贴出配置中需要使用的额外脚本。
由于本文的配置需要较高的计算量,所以请在显卡控制面板中添加mpv,将使用mpv时的电源模式设置为“自适应”(默认“最佳功率”发挥不出显卡性能)。双显卡用户请设置让mpv以独立显卡运行。
该配置只在GTX970以及1080p显示器上测试过,其下的显卡和其上的显示器是否掉帧需自行测试。
不同分辨率的显示器的配置需要根据自己的情况完全改写。

# 软解

hwdec=no

# 高优先级

priority=high

profile=gpu-hq

### gpu-api的选择?

## macOS:  只有opengl可选

## Linux:  vulkan或者opengl,推荐vulkan

## Windows:vulkan、d3d11及opengl都可选。三者理论上vulkan性能最好,但依然推荐d3d11。

## 通过d3d11 api,目前mpv已支持windows的10 bit输出和HDR colorspace的设定。

## HDR metadata pass on正在跟进,独占全屏正在跟进。

#----------------------------------------

### 使用d3d11 (mpv对于windows的默认。显卡注意开自适应电源模式)

gpu-api=d3d11

# 通过d3d11-adapter可以设定mpv使用哪块显卡。详见文档:https://mpv.io/manual/master/#options-d3d11-adapter

# 如果需要记忆上次播放的位置,去掉下面这行的注释。不能与SVP共存,使用SVP必须把此项设为no。

#save-position-on-quit

# 注意,需要mpv.conf所在文件夹有用户写入权限,或者用watch-later-directory=路径来手动指定。

# mpv.conf放APPDATA里是不会有问题的,有问题的是放mpv安装目录但mpv安装目录本身需要管理员权限

# may help with 4K videos

vd-lavc-dr=yes

opengl-pbo=yes

# 如果要插其他视频滤镜,比如deint或者SVP,就要去掉下面这行的注释

#hr-seek-framedrop=no

# "ReClock" replacement

video-sync=display-resample

video-sync-max-video-change=5

temporal-dither

dither-size-fruit=7

 # 默认6。会稍微延缓mpv启动

# 有兴趣也可以测试下error diffusion算法

# smooth motion

interpolation

# interpolation使用的算法。详见https://mpv.io/manual/master/#options-tscale

# 一些讨论见 https://github.com/mpv-player/mpv/issues/2685

# 目前的默认为mitchell。总体而言mitchell更平滑(当然不好和SVP插帧比),但会有模糊。oversample没有模糊,但不平滑(基本还原24帧的样子)

# 具体选择哪个请依据自身需求来

tscale=oversample

# 想看log就取消这行的注释。mpv.log会保存到桌面

#log-file="~~desktop/mpv.log"

icc-profile-auto  # 启用校色

icc-3dlut-size=256x256x256

# 默认64x64x64。会稍微延缓mpv启动

# 在mpv.conf所在目录下建一个 shaders_cache 空文件夹,以存放编译好的GPU shaders,加速启动。

# 注意!如果不放APPDATA下,确保该文件夹有用户写入权限。

gpu-shader-cache-dir="~~/shaders_cache"

# 播放结束后不退出

keep-open=yes

 # 始终处于最前阶段。配合ontop-playback.lua可以使得暂停之后解除保持最前端。

ontop

# 对于vulkan,使用ontop容易让驱动选择进入独占全屏。d3d11需要额外的选项,等https://github.com/mpv-player/mpv/pull/6329实现

# 为了应对VFR,禁用刷新率切换

# 下面这个脚本选项主要是个autospeedwin(自动调节显示器的刷新率)用的

#script-opts=autospeed-nircmd=true,autospeed-speed=false,autospeed-nircmdc="C:\nircmd-x64\nircmdc.exe",autospeed-monitor=0,autospeed-dwidth=1920,autospeed-dheight=1080,autospeed-bdepth=32,autospeed-rates="23;24;25;29;30;50;59;60",autospeed-exitrate=60,autospeed-minspeed=0.9,autospeed-maxspeed=1.1,autospeed-osd=true,autospeed-osdtime=10,autospeed-osdkey=y,autospeed-estfps=false,autospeed-spause=4

# 注意需要自己下载nircmdc,然后在autospeed-nircmdc里给出绝对路径。或者把nircmdc.exe所在位置加到PATH里

# autospeed-monitor=0是主显示器,1、2、3……是其他副显示器

# dwidth dheight bdepth 宽高和位深

# autospeed-rates="23;24;25;29;30;50;59;60",autospeed-exitrate=60 显示器支持的刷新率和退出时应返回的刷新率。23指23.976

# autospeed-spause=4 自动暂停的时间,秒为单位

# WASAPI音频输出(Windows)

# 其他系统请相应更改音频输出方式

ao=wasapi

# 需要独占音频则去掉注释。开启会使得其他程序没声音。

#audio-exclusive=yes

# 如果双声道系统播放多声道影片时有的声道声音没出现,尝试强制设定为双声道

#audio-channels=stereo

# 规格化:

#audio-normalize-downmix=yes

# 多声道音轨downmix成双声道时,如果觉得背景音过响,角色台词声音小,尝试看看这个:https://github.com/mpv-player/mpv/issues/6563

sub-auto=fuzzy

sub-file-paths=subs

slang=chi,zh-CN,sc,chs

#sid=1

# 字幕显示出来和xy-subfilter不一样?尝试启用下面的设置

# 关乎字幕是否随视频拉伸

#sub-ass-vsfilter-aspect-compat=no

# 关乎字幕模糊的设定

#sub-ass-vsfilter-blur-compat=no

# 即使都用上了也不一致?那不是这两个选项的问题,重新注释掉这两行,回帖问吧。(多半是vsfilter/libass其中一个的bug)

audio-file-auto=fuzzy

#audio-file-paths=audio

alang=jpn,ja,eng,en

#aid=1

# 暂时无法根据其他的metadata选择轨道,mpv又默认偏好外挂轨道,常常选到我不想要的音轨

# 有类似情况的话就用aid=1始终选择第一条音轨再自己手动调吧

# 设计者也是这么推荐的:https://github.com/mpv-player/mpv/issues/967#issuecomment-94744964

screenshot-format=png

screenshot-tag-colorspace=yes

screenshot-high-bit-depth=yes

#screenshot-png-compression=0

#screenshot-png-filter=0

# 根据视频是否是HDR以及视频aspect ratio决定是否启用blend-subtitles的profile

# 目前HDR->SDR建议关闭blend-subtitles,见https://github.com/mpv-player/mpv/issues/6368

# 如果hdr-compute-peak将来继续改进可能可以兼容blend-subtitles

[HDR_or_21:9]

profile-desc=cond:(p["video-params/primaries"]=="bt.2020" or p["video-params/aspect"]>=2.0)

blend-subtitles=no

# 使字幕输出在黑边上

sub-ass-force-margins=yes

[SDR_and_16:9]

profile-desc=cond:(p["video-params/primaries"]~="bt.2020" and p["video-params/aspect"]<2.0)

blend-subtitles=yes

sub-ass-force-margins=no

# 以下根据分辨率和视频帧率设置不同的升/降阶算法,以期获得在能不掉帧的情况下达到最好的效果

# 创建一个基于gpu-hq,用于将一些参数回归到默认的profile:

[high_quality]

profile=gpu-hq

## !!! 使用  fbo-format=rgba16hf  可能能提高效率

fbo-format=rgba32f

## !!! 使用  fbo-format=rgba16hf  可能能提高效率

vd-lavc-threads=0

# 1080 * 1.414213 / 4 = 381.8

[low] # 240p 360p,启用两次倍增以达到4倍.

profile-desc=cond:(p["video-params/w"]<=678 and p["video-params/h"]<=381)

profile=high_quality

glsl-shaders-clr

glsl-shaders-append="~~/shaders/KrigBilateral.glsl"

glsl-shaders-append="~~/shaders/nnedi3-nns32-win8x4.hook"

glsl-shaders-append="~~/shaders/nnedi3-nns32-win8x4.hook"

# 1080 / 16 * 9 = 607.5

[SD] # 480p 576p

profile-desc=cond:((p["video-params/w"]<1080 and p["video-params/h"]<608) and (p["video-params/w"]>678 or p["video-params/h"]>381))

profile=high_quality

glsl-shaders-clr

glsl-shaders-append="~~/shaders/KrigBilateral.glsl"

glsl-shaders-append="~~/shaders/nnedi3-nns64-win8x4.hook"

# 1080 * 1.414213 / 2 = 763.7

[HD30] # 640p 720p 30fps

profile-desc=cond:((p["video-params/w"]<1358 and p["video-params/h"]<764) and (p["video-params/w"]>=1080 or p["video-params/h"]>=608) and p["estimated-vf-fps"]<31)

profile=high_quality

glsl-shaders-clr

glsl-shaders-append="~~/shaders/KrigBilateral.glsl"

glsl-shaders-append="~~/shaders/nnedi3-nns32-win8x4.hook"

[HD60] # 640p 720p 60fps

profile-desc=cond:((p["video-params/w"]<1358 and p["video-params/h"]<764) and (p["video-params/w"]>=1080 or p["video-params/h"]>=608) and p["estimated-vf-fps"]>=31)

profile=high_quality

glsl-shaders-clr

glsl-shaders-append="~~/shaders/KrigBilateral.glsl"

glsl-shaders-append="~~/shaders/SSimSuperRes.glsl"

# SSimSuperRes推荐关闭sigmoid-upscaling。所以在其他不用SSSR的profile中都要重新设为yes(通过重新设定一遍profile=gpu-hq)

sigmoid-upscaling=no

[KrigBilateral] # 另一个profile的例子

profile=high_quality

glsl-shaders-clr

glsl-shaders-append="~~/shaders/KrigBilateral.glsl"

[FHD] # 1080p

profile-desc=cond:((p["video-params/w"]<=1920 and p["video-params/h"]<=1080) and (p["video-params/w"]>=1358 or p["video-params/h"]>=764))

profile=KrigBilateral

[2K30] # 1440p

profile-desc=cond:((p["video-params/w"]<=2560 and p["video-params/h"]<=1440) and (p["video-params/w"]>1920 or p["video-params/h"]>1080) and p["estimated-vf-fps"]<31)

profile=KrigBilateral

# 4K videos

[4K30] # low fps: use SSIM to downscale

profile-desc=cond:((p["video-params/w"]>2560 or p["video-params/h"]>1440) and p["estimated-vf-fps"]<31)

profile=high_quality

glsl-shaders-clr

glsl-shaders-append="~~/shaders/SSimDownscaler.glsl"

# SSimDownscaler要求。需要在其他profile中重新设为yes(通过重新设定一遍profile=gpu-hq)

linear-downscaling=no

[UHD60] # high fps: use no glsl-shaders

profile-desc=cond:((p["video-params/w"]>1920 or p["video-params/h"]>1080) and p["estimated-vf-fps"]>=31)

glsl-shaders-clr

# 如果是1080p屏幕播放4K,可以使用https://gist.github.com/bjin/15f307e7a1bdb55842bbb663ee1950ed

# glsl-shaders-append="~~/shaders/acme-0.5x.hook"

# 可以绕过chroma upscaling,并且把之后颜色转换的计算量从4K级降到1080p级。

fbo-format=auto

vd-lavc-threads=16

# 4K HEVC HDR 60fps软解压力很大,默认vd-lavc-threads=0自动识别逻辑核数,分配核数+1个线程,但往往不够,不能将CPU性能压榨到极限,强行分配更多线程数以提高软解性能。

# 或者直接开硬解,如果显卡支持的话

hwdec=yes

保存类型选择所有文件,编码选择UTF-8。对input.conf也一样需要这么设置。
另外注意,删除行内以#开头的注释时,要同时删除掉多余的空格,行末不要有多余的空格。

使用到的额外脚本有:

# https://github.com/mpv-player/mpv/blob/master/TOOLS/lua

autocrop.lua             # Shift+c自动切黑边,再按Shift+c复原

autodeint.lua            # Ctrl+d 让脚本自动判断需不需要反交错

autoload.lua             # 自动加载同目录中的文件

ontop-playback.lua       # 暂停播放后窗口不再保持最前

pause-when-minimize.lua  # 最小化时暂停

# https://github.com/VideoPlayerCode/mpv-tools/

cycle-video-rotate.lua   # 使用快捷键旋转视频

# https://github.com/wiiaboo/mpv-scripts/blob/master/auto-profiles.lua

auto-profiles.lua        # 装了这个才能使用上面这个mpv.conf,用于区分播放的文件所需要的配置

# https://github.com/kevinlekiller/mpv_scripts/tree/master/autospeedwin

autospeedwin.lua         # 自动切换刷新率

# https://github.com/rossy/mpv-open-file-dialog

open-file-dialog.lua     # Ctrl+o 选择要播放的文件,再也不用手动拖文件进来或者从命令行启动了

#stats.lua               # 这个不用多带带下了,mpv自带此功能了。用来看profile是否正确工作。i短时间显示,shift+i始终显示osd。按数字键1和2切换两个tab

强调一下,其他的脚本可以自行选择,但auto-profiles.lua是必需的!
在mpv.conf所在目录(%APPDATA%/mpv或mpv安装目录下的portable_config子目录 )下建scripts目录放进去。由于已知的lua的限制,如果你的%APPDATA%路径里存在非英文字符,可能导致lua脚本加载失败。建议将mpv放在纯英文路径下(同时也要有用户写入权限,比如C:\mpv\),并使用portable_config目录存放脚本和配置。
这些脚本都能在mpv的github页面的wiki里找到
https://github.com/mpv-player/mpv/wiki/User-Scripts
autospeedwin小修改了下,见附件。暂停在我这不能正常工作的原因未知,只好改成会有小黑框弹出来的旧方法。
作者merge了我的pull request,如果github上下的脚本的暂停能正常工作,只是帧率切换有误差(23.976切成24)的话,现在的应该对了。如果暂停不行就用附件里的吧,都不行?那我也不知道为啥了。
2019.09.17: 我传的autospeedwin有bug用不了,见修改过的版本

autospeedwin.7z

autoload如果不想自动加载裸音频文件的话,把extensions里的音频格式注释掉

EXTENSIONS = Set {

    'mkv', 'avi', 'mp4', 'ogv', 'webm', 'rmvb', 'flv', 'wmv', 'mpeg', 'mpg', 'm4v', '3gp',

    -- Add some other video formats

    'mts', 'mov', 'ts', 'rm',

    -- Do not load audio files into playlist

    --'mp3', 'wav', 'ogv', 'flac', 'm4a', 'wma', 'ogg', 'opus',

}

懒的话也直接下附件里的吧。
input.conf是用于控制mpv快捷键的配置文件,具体解释见官方文档:https://mpv.io/manual/master/#input-conf
主要语法是:

按键 命令 [命令参数]

此配置文件放置于和mpv.conf同级目录下。
https://github.com/mpv-player/mpv/blob/master/etc/input.conf
这个链接是input.conf的默认值(注意这个文件全被注释掉了),据此可以对默认按键进行更改(如果有需要的话)。
一般而言如果对默认操作方式比较满意的话不需要创建这个文件。如果对旋转视频有需求,使用cycle-video-rotate.lua的话,那需要在input.conf中配套加入:

# cycle-video-rotate.lua

Alt+LEFT script-message Cycle_Video_Rotate -90

Alt+RIGHT script-message Cycle_Video_Rotate 90

然后即可用Alt+方向键左右旋转视频。
使用到的shaders有(上面的wiki页面里也多少都提到了):

nnedi3-nns64-win8x4.hook                # https://github.com/bjin/mpv-prescalers/tree/master/compute  注意主目录下有一份,然后compute和gather下也各有一份。按作者说法,compute和gather需要更高版本的opengl支持,建议试过不会蓝屏或画面扭曲再使用。compute可能比gather更快一些,但需要以自己实测为准。参考https://github.com/bjin/mpv-prescalers/wiki/Performance  

nnedi3-nns32-win8x4.hook                # neuron数从16到256都有。高neuron数要较长的编译时间,渲染开销也会较大,提升也有限

KrigBilateral.glsl

SSimSuperRes.glsl

SSimDownscaler.glsl                     # Bilateral,SSSR和SSimDownscaler都在 https://gist.github.com/igv 大陆可能需要爬梯子

在mpv.conf所在目录下建shaders目录放进去。
一个链接:https://artoriuz.github.io/mpv_upscaling.html
就各种算法给出了详细的评测(速度,效果),请结合这篇以及自己的截图对比,根据自己机器的机能和使用情况来选择。(据此数据FSRCNNX_x2_8-0-4-1.glsl有比NNEDI3更好的性能和更好的表现,具体情况如何还请各位自行测试。)
注意!下载任何脚本/shader文件都不推荐复制粘贴到空文本里,尤其是shader文件,文末换行符缺失会导致编译失败。强烈推荐点github的raw按钮,然后右键另存为,这样文件内容和扩展名本身就是对的。
如果想要4倍增画面(比如在2K或以上分辨率的显示器上看480p),则需要调用两次NNEDI3。比如第一次倍增使用64 neurons,第二次倍增用32 neurons:

glsl-shaders-append="~~/shaders/nnedi3-nns64-win8x4.hook"

glsl-shaders-append="~~/shaders/nnedi3-nns32-win8x4.hook"

文章主要参考:
1,官方文档:https://mpv.io/manual/master/
2,https://iamscum.wordpress.com/videoplayback-guide/mpv-conf/
3,https://github.com/haasn/gentoo- ... me/nand/.mpv/config


赞赏支持