# ===== 基础设置 ===== vo=gpu-next # 视频输出驱动 gpu-api=vulkan # 图形绘制接口 input-ime=no # 仅文本输入时激活 IME autofit-smaller=40%x30% # 窗口最小占屏比例 idle=yes # 播放结束后保持运行 ontop # 窗口置顶 hr-seek=yes # 精确跳转 hr-seek-framedrop=no # 跳转时不丢帧,利于修正音频延迟 save-position-on-quit=yes # 退出时记住播放进度 write-filename-in-watch-later-config # 播放记录中写入文件名 resume-playback-check-mtime=yes # 校验文件修改时间防止误恢复 watch-later-dir="~~/cache/watch_later" watch-later-options=start,vid,aid,sid save-watch-history=yes # 保存播放历史(内置 select 脚本可浏览) watch-history-path=~~/files/watch_history.jsonl reset-on-next-file=vid,aid,sid,secondary-sid,vf,af,loop-file,deinterlace,contrast,brightness,gamma,saturation,hue,video-zoom,video-rotate,video-pan-x,video-pan-y,panscan,speed,audio-delay,sub-pos,sub-scale,sub-delay,sub-speed,sub-visibility,secondary-sub-visibility input-ipc-server=/tmp/mpvsocket # IPC 套接字 directory-mode=ignore # 打开目录时忽略子目录 metadata-codepage=auto # 元数据编码自动检测 msg-level=all=info,auto_profiles=warn title=${?pause==yes:⏸}${?mute==yes:🔇}${?ontop==yes:📌}${?demuxer-via-network==yes:${media-title}}${?demuxer-via-network==no:${filename}} # ===== OSD ===== no-osd-bar osd-on-seek=msg-bar osd-bar-w=100 osd-bar-h=2 osd-bar-align-y=-1 osd-font="Noto Sans CJK SC;Noto Color Emoji" osd-font-size=24 osd-color="#FFFFFF" osd-outline-size=1.0 osd-outline-color="#1C1B1F" osd-shadow-offset=0 osd-back-color="#1C1B1F" osd-border-style=outline-and-shadow osd-playlist-entry=filename osd-status-msg=${playback-time/full} / ${duration/full} (${percent-pos}%)\nframe: ${estimated-frame-number} / ${estimated-frame-count} osd-fractions=yes osd-duration=2000 # ===== 色彩管理 ===== icc-profile-auto # 自动检测系统 ICC 配置文件 icc-intent=0 # 感知度映射意图 icc-force-contrast=1000 # 解决校色文件对比度问题 icc-3dlut-size=128x128x128 # 3D LUT 精度 icc-cache-dir="~~/cache/icc_cache" use-embedded-icc-profile=yes # 使用嵌入式 ICC 配置文件 inverse-tone-mapping=yes # SDR→HDR 反向映射(仅 HDR 显示器有效) target-colorspace-hint=auto # 自动配置显示器输出色彩空间 hdr-contrast-recovery=0.30 # HDR 对比度恢复强度 hdr-compute-peak=yes # 动态峰值检测 # ===== 音频 ===== audio-device=auto audio-channels=7.1,5.1,stereo # 按优先级回退,避免多声道下混丢声道 ao=alsa audio-exclusive=yes # 独占音频通道 audio-samplerate=96000 # 重采样至 96kHz audio-format=s32 # 32位有符号整数 replaygain=album # 专辑增益优先,无专辑增益时回退到曲目增益 gapless-audio=no # 避免采样率锁定导致音质下降 audio-file-auto=fuzzy # 自动加载同名外部音轨 audio-file-paths=audio;audios;audio 5.1;audios 5.1;audio 7.1;audios 7.1;音轨 alang=japanese,jpn,jap,ja,jp,english,eng,en # ===== 字幕 ===== sub-codepage=gb18030 # 非 UTF-8 字幕首先尝试 GB18030 sub-auto=fuzzy # 自动加载同名外部字幕 sub-file-paths=sub;subs;subtitles;字幕 slang=chs,sc,zh-Hans,zh-CN,cht,tc,zh-Hant,zh-HK,zh-TW,chi,zho,zh sub-font="Noto Sans CJK SC;Noto Color Emoji" sub-font-size=50 sub-bold=yes sub-color="#FFFFFF" sub-outline-size=0.5 sub-outline-color="#000000" sub-shadow-offset=0.5 sub-back-color="#000000" # ===== 截图 ===== screenshot-format=webp screenshot-webp-quality=85 screenshot-webp-compression=6 screenshot-tag-colorspace=no screenshot-template="~~/files/screen/%{media-title}-%P-%n" # ===== 脚本与着色器 ===== gpu-shader-cache-dir="~~/cache/shaders_cache" osc=no # 禁用内置 OSC,使用 uosc ytdl=yes ytdl-format=bestvideo[height<=?2160][vcodec!=?vp9.2][vcodec!=?vp9]+bestaudio/best ytdl-raw-options-append=cookies-from-browser=Firefox input-default-bindings=no # 禁用内置键位,在 input.conf 中自定义 # ===== 外部配置 ===== include="~~/profiles.conf" # 场景预设(游戏/电影/动画等,手动激活) # ========================================= # Profile 激活 # ========================================= # 色彩管理(ICC 和 Target 二选一) #profile=ICC # ICC 色彩管理,使用系统 ICC 配置文件 #profile=ICC+ # ICC 色彩管理,使用自定义 ICC 文件 profile=Target # Target 色彩管理,直接指定目标色彩空间 profile=Dither # 抖动算法(fruit) #profile=Dither+ # 抖动算法(error-diffusion,更耗能) profile=Tscale # 时域插值(oversample) #profile=Tscale+ # 时域插值(sphinx,更平滑但略模糊) profile=HQ # 高质量缩放算法组合 profile=DeBand-low # 去色带(低强度) #profile=DeBand-medium #profile=DeBand-high profile=HDR2SDR # HDR 映射 SDR 参数 #profile=SDR2HDR # SDR 反向映射 HDR(仅 HDR 显示器) #profile=SWscaler # 软件缩放备选方案 # 着色器(选一) #profile=NNEDI3 # 通用场景(NNEDI3-32) profile=NNEDI3+ # 通用场景(NNEDI3-64,更耗能) #profile=ravu-zoom # 通用场景(ravu-zoom) #profile=FSRCNNX # HD 场景 #profile=FSRCNNX+ # SD 场景(FSRCNNX 去伪影) #profile=Ani4K # 动画(Ani4K V2,高性能开销) #profile=AniSD # SD 动画(AniSD,高性能开销) #profile=Anime4K # 动画(Anime4K 修复 + 去伪影) #profile=SSIM # 低性能消耗 # ========================================= # Profile 定义:常规 # ========================================= [ICC] # 使用系统 ICC 配置文件进行色彩管理 icc-profile="" icc-profile-auto icc-intent=0 icc-force-contrast=1000 icc-3dlut-size=auto icc-cache-dir="~~/cache/icc_cache" [ICC+] # 使用自定义 ICC 文件(如 color.org 泛 ICC 或专业校色文件) icc-profile="~~/icc/ITU-RBT709ReferenceDisplay.icc" icc-intent=0 icc-force-contrast=no icc-3dlut-size=auto icc-cache-dir="~~/cache/icc_cache" [Target] # 不使用 ICC,直接指定目标色彩空间参数 icc-profile="" icc-profile-auto=no target-prim=auto target-contrast=auto #target-trc=gamma2.2 # 非 OLED 显示器建议启用 #target-peak=203 # SDR 显示器默认 203 nit [Dither] dither-depth=auto dither=fruit dither-size-fruit=6 [Dither+] dither-depth=auto dither=error-diffusion error-diffusion=floyd-steinberg [Tscale] video-sync=display-resample interpolation tscale=oversample [Tscale+] video-sync=display-resample interpolation tscale=sphinx tscale-blur=0.65 [HQ] scale=ewa_lanczossharp cscale=bilinear dscale=catmull_rom scale-antiring=0.5 dscale-antiring=0.5 linear-upscaling=no sigmoid-upscaling=yes correct-downscaling=yes linear-downscaling=no deband=no [DeBand-low] deband-iterations=1 deband-threshold=48 deband-range=16 deband-grain=16 [DeBand-medium] deband-iterations=2 deband-threshold=64 deband-range=16 deband-grain=24 [DeBand-high] deband-iterations=3 deband-threshold=64 deband-range=16 deband-grain=24 [HDR2SDR] tone-mapping=auto gamut-mapping-mode=auto hdr-contrast-recovery=0.30 hdr-compute-peak=auto hdr-peak-percentile=99.995 hdr-peak-decay-rate=100 hdr-scene-threshold-low=5.5 hdr-scene-threshold-high=10 allow-delayed-peak-detect=no [SDR2HDR] # SDR 反向映射 HDR,仅 HDR 显示器有效 icc-profile="" icc-profile-auto=no target-prim=auto target-trc=auto target-peak=auto target-colorspace-hint=auto inverse-tone-mapping=yes [SWscaler] sws-allow-zimg=no sws-scaler=bicublin zimg-scaler-chroma=bicubic zimg-scaler=bicubic zimg-scaler-param-a=1/3 zimg-scaler-param-b=1/3 zimg-fast=no # --- 着色器 Profile --- [NNEDI3] profile-desc=通用场景(NNEDI3-32 + 自适应锐化) glsl-shaders-append="~~/shaders/nnedi3/nnedi3-nns32-win8x4.glsl" glsl-shaders-append="~~/shaders/igv/adaptive-sharpen_luma.glsl" [NNEDI3+] profile-desc=通用场景(NNEDI3-64 + 自适应锐化) glsl-shaders-append="~~/shaders/nnedi3/nnedi3-nns64-win8x4.glsl" glsl-shaders-append="~~/shaders/igv/adaptive-sharpen_luma.glsl" [ravu-zoom] profile-desc=通用场景(ravu-zoom + 自适应锐化) glsl-shaders-append="~~/shaders/ravu/ravu-zoom-ar-r3.glsl" glsl-shaders-append="~~/shaders/igv/adaptive-sharpen_luma.glsl" [FSRCNNX] profile-desc=HD 场景(FSRCNNX + 自适应锐化) glsl-shaders-append="~~/shaders/igv/FSRCNNX_x2_8-0-4-1.glsl" glsl-shaders-append="~~/shaders/igv/adaptive-sharpen_luma.glsl" [FSRCNNX+] profile-desc=SD 场景(NNEDI3 + FSRCNNX 去伪影) glsl-shaders-append="~~/shaders/nnedi3/nnedi3-nns32-win8x4.glsl" glsl-shaders-append="~~/shaders/igv/FSRCNNX_x1_16-0-4-1_distort.glsl" [Ani4K] profile-desc=动画(Ani4K V2,高性能开销) glsl-shaders-append="~~/shaders/Ani4K/Ani4Kv2_ArtCNN_C4F32_i2.glsl" [AniSD] profile-desc=SD 动画(AniSD,高性能开销) glsl-shaders-append="~~/shaders/Ani4K/AniSD_ArtCNN_C4F32_i4.glsl" [Anime4K] profile-desc=动画(Anime4K 修复 + 去伪影) glsl-shaders-append="~~/shaders/igv/KrigBilateral.glsl" glsl-shaders-append="~~/shaders/Anime4K/glsl/Restore/Anime4K_Restore_CNN_Soft_M.glsl" glsl-shaders-append="~~/shaders/Anime4K/glsl/Restore/Anime4K_Clamp_Highlights.glsl" [SSIM] profile-desc=低性能消耗(SSIM 超分 + 缩小) glsl-shaders-append="~~/shaders/igv/SSimSuperRes.glsl" glsl-shaders-append="~~/shaders/igv/SSimDownscaler.glsl" # ========================================= # Profile 定义:条件触发 # ========================================= [SD] # 低清源(≤720p)自动启用 FSRCNNX+ 增强 profile-cond=height <= 720 or width <= 720 profile-restore=copy profile=FSRCNNX+ [Deband] # YUV420P10 以下自动开启去色带 profile-cond=get("video-params/average-bpp") < 24 profile-restore=copy deband=yes [hdr-2390] profile-cond=p.tone_mapping == "bt.2390" and p.current_vo == "gpu-next" profile-restore=copy tone-mapping-param=2.0 [peak-percentile] profile-cond=get("video-params/avg-pq-y") < 0.21 and p.current_vo == "gpu-next" profile-restore=copy hdr-peak-percentile=99.8 [SDR-gamut] # SDR 非 BT.709 内容的色域映射 profile-cond=get("video-params/primaries") ~= "bt.709" and get("video-params/gamma") == "bt.1886" profile-restore=copy gamut-mapping-mode=clip [SDR-target] # SDR 显示目标配置 profile-cond=not get("video-params/max-luma") and not get("inverse-tone-mapping") and p.current_vo == "gpu-next" profile-restore=copy target-colorspace-hint=no [HDR] # HDR 内容自动配置 profile-cond=get("video-params/max-luma") > 203 profile-restore=copy target-peak=auto target-colorspace-hint=auto blend-subtitles=no deband=no vf="" [HDR-PASS] # HDR 直通(仅 HDR 显示模式下生效) profile-cond=get("video-params/max-luma") > 203 and get("video-target-params/max-luma") > 203 and p.current_vo == "gpu-next" profile-restore=copy icc-profile="" icc-profile-auto=no target-colorspace-hint=auto inverse-tone-mapping=no target-prim=auto target-trc=auto target-peak=auto target-contrast=auto [video-sync] # 音频调速超过阈值时切换同步模式,避免明显音高变化 profile-cond=(speed * audio_speed_correction) > 0 and ((speed * audio_speed_correction) < 0.96 or (speed * audio_speed_correction) > 1.04) and not (get("estimated-vf-fps") > 240 or get("display-fps") > 240) profile-restore=copy-equal video-sync=display-tempo [fps-fix] # 极高帧率/刷新率时使用 audio 同步避免异常 profile-cond=get("estimated-vf-fps") > 240 or get("display-fps") > 240 profile-restore=copy video-sync=audio [pgs-fix] # 修复宽屏视频 PGS 字幕比例错位 profile-cond=get("video-params/aspect") > 16 / 9 profile-restore=copy stretch-image-subs-to-screen=yes [audio-filter] # 多声道音频自动启用动态范围调节(适用于双声道设备) profile-cond=get("audio-params/channel-count") > 2 profile-restore=copy-equal af-pre=@dynaudnorm:lavfi=[dynaudnorm=f=500:g=31:p=0.5:m=5:r=0.9] [pause] # 暂停时取消置顶 profile-cond=pause profile-restore=copy ontop=no [maximized] # 最大化时禁止窗口自动调整大小 profile-cond=window_maximized and vid and not get("current-tracks/video/albumart") profile-restore=copy-equal auto-window-resize=no [minimized] # 最小化时自动暂停 profile-cond=window_minimized and vid and not get("current-tracks/video/albumart") profile-restore=copy-equal pause [end] # 播放列表结束后退出全屏 profile-cond=idle_active no-fullscreen no-window-maximized [media-title] # 网络/磁力链接显示媒体标题 profile-cond=path:find('://') ~= nil or path:find('^magnet:') ~= nil profile-restore=copy title=${?pause==yes:⏸}${?mute==yes:🔇}${?ontop==yes:📌}${media-title} osd-playlist-entry=title # ========================================= # Profile 定义:网络优化 # ========================================= [network-optimize] # 网络播放时自动启用 profile-cond=demuxer_via_network profile-restore=copy cache=yes cache-secs=600 demuxer-max-bytes=1GiB demuxer-readahead-secs=120 network-timeout=60 stream-buffer-size=2MiB prefetch-playlist=yes stream-lavf-o-append=reconnect=1 stream-lavf-o-append=reconnect_at_eof=1 stream-lavf-o-append=reconnect_streamed=1 stream-lavf-o-append=multiple_requests=1