mpv 配置

前言 MPV 是一款强大而轻量的开源媒体播放器,支持高度自定义。 当前配置主要优化了以下方面: 使用 GPU 加速和 Anime4K 着色器提升画质 自定义快捷键实现高效操作 通过脚本扩展功能(现代化 OSC、播放列表管理、自动加载等) 优化中日文字幕显示和双字幕支持 核心配置文件 (mpv.conf) mpv.conf 是 MPV 的主配置文件,位于 =~/.config/mpv/mpv.conf=。 # ========== 画质设置 ========== profile=gpu-hq # 使用高画质预设 vo=gpu-next # 使用新的GPU渲染器(mpv 0.36+) gpu-api=auto # 自动选择最佳GPU API dither-depth=auto # 自动抖动深度 hwdec=auto-safe # 自动硬件解码(避免CUDA错误) video-sync=display-resample # 视频同步模式 interpolation # 启用帧插值(运动补偿) # ========== 播放控制 ========== keep-open=always # 每个文件播完后暂停 save-position-on-quit=yes # 退出时保存播放进度 # ========== 音频/字幕 ========== audio-file-auto=fuzzy # 自动加载外挂音轨 audio-channels=stereo # 双声道输出 audio-normalize-downmix=yes # 规范化降混 volume=100 # 默认音量 sub-auto=fuzzy # 自动加载外挂字幕 alang=ja,en,zh # 音轨语言优先级:日语>英语>中文 slang=zh,en,ja # 字幕语言优先级:中文>英语>日语 # 字幕样式 sub-font='Noto Sans CJK SC' # 中文字体 sub-font-size=48 sub-color='#FFFFFF' sub-border-size=3 sub-border-color='#000000' sub-shadow-offset=1 sub-shadow-color='#000000' # 次字幕配置(mpv 0.40+ 内置支持) # 注意:次字幕样式继承主字幕设置,只能调整位置 secondary-sid=auto # 自动选择次字幕轨道 secondary-sub-pos=95 # 位置(0-150,100=屏幕底部) secondary-sub-visibility=yes # 默认显示次字幕 # ========== 界面设置 ========== osc=no # 禁用默认OSC控制条 osd-bar=no # 禁用OSD进度条 border=no # 无窗口边框 autofit-larger=80%x80% # 窗口最大为屏幕80% volume-max=200 # 最大音量200% # ========== Anime4K画质增强 ========== # Optimized shaders for higher-end GPU: Mode A+A (HQ) glsl-shaders="~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl" 画质设置详解 profile=gpu-hq : 启用 MPV 内置的高画质预设,包含多项优化选项 vo=gpu-next : 使用新一代 GPU 渲染器,性能更好,支持更多特性 gpu-api=auto : 自动选择 GPU API(Linux 通常选择 Vulkan 或 OpenGL) hwdec=auto-safe : 启用硬件解码,=auto-safe= 避免某些不稳定的解码器 video-sync=display-resample : 视频同步到显示器刷新率,配合插值使用 interpolation : 帧插值/运动补偿,让 24fps 视频在高刷屏上更流畅 播放控制 keep-open=always : 播放结束后暂停而不是关闭,方便查看最后一帧或重播 save-position-on-quit=yes : 记住播放进度,下次打开同一文件时从上次位置继续 音频和字幕配置 audio-file-auto=fuzzy : 模糊匹配自动加载外挂音轨文件 sub-auto=fuzzy : 模糊匹配自动加载外挂字幕文件 alang/slang : 设置音轨和字幕的语言优先级,我优先日语音轨+中文字幕 字幕样式使用 Noto Sans CJK SC 字体,确保中文显示美观,白色字体配黑色描边和阴影提升可读性。 ...

October 1, 2025 · wang1zhen

借助 cloudflared 配置 DNS over HTTPS

安装配置步骤 安装 cloudflared sudo pacman -S cloudflared 创建 systemd 服务文件 sudo vim /etc/systemd/system/cloudflared.service [Unit] Description=DNS over HTTPS proxy client Wants=network-online.target nss-lookup.target Before=nss-lookup.target [Service] AmbientCapabilities=CAP_NET_BIND_SERVICE CapabilityBoundingSet=CAP_NET_BIND_SERVICE DynamicUser=yes ExecStart=/usr/bin/cloudflared proxy-dns --port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query [Install] WantedBy=multi-user.target 启动 cloudflared 服务 # 重载 systemd 配置 sudo systemctl daemon-reload # 启用开机自启 sudo systemctl enable cloudflared # 立即启动服务 sudo systemctl start cloudflared # 检查服务状态 sudo systemctl status cloudflared 确认服务显示为 active (running) 。 ...

October 1, 2025 · wang1zhen

linux-to-go-debian

配置 Live 环境 切换到 root shell sudo -i 定义系统 ID 定义一个系统标识符,用作将要安装的文件系统的简短名称。 export ID=debian 配置和更新 APT cat <<EOF > /etc/apt/sources.list deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free deb-src http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free EOF apt update 注意: 已添加 non-free 源以支持 NVIDIA 驱动等专有软件 将 deb.debian.org 替换为本地镜像源可能会获得更快的下载速度 安装辅助工具 apt install debootstrap gdisk dkms linux-headers-$(uname -r) apt install zfsutils-linux arch-install-scripts 生成 /etc/hostid zgenhostid -f 定义磁盘变量 为方便操作并减少出错可能性,设置环境变量来引用将在安装过程中配置的设备。 重要: 对于 Linux To Go 系统,**必须使用** /dev/disk/by-id/ 路径来引用磁盘。这样可以确保在不同机器上插入 USB 设备时,磁盘标识保持持久性和唯一性,避免因设备顺序变化导致的启动问题。 ...

September 29, 2025 · wang1zhen

zfs 备份

硬盘初始化 确认设备 lsblk 清除旧分区表(可选) sudo wipefs -a /dev/sda 使用 gdisk 分区 sudo gdisk /dev/sda 输入 o → 新建空 GPT 表 输入 n → 新建分区(整盘) 类型代码:=BF00= (Solaris / ZFS) 输入 w → 写入 完成后得到 /dev/sda1 创建 ZFS 池 sudo zpool create -f backup /dev/sda1 优化设置 sudo zfs set mountpoint=/mnt/backup backup sudo zfs set compression=zstd backup 卸载/挂载池 sudo zpool export backup # 卸载 sudo zpool import # 查看可导入的池 sudo zpool import -d /dev/disk/by-id backup # 重新挂载(指定设备路径) 检查池状态 ...

September 26, 2025 · wang1zhen

用 podman 部署 file browser (免登录)

Quadlet 配置 路径:~/.config/containers/systemd/filebrowser.container [Unit] Description=<description> After=network-online.target [Container] Image=docker.io/filebrowser/filebrowser:latest ContainerName=<name> UserNS=keep-id PublishPort=<port>:8080 Volume=/share/web:/srv:ro Volume=/share/filebrowser/database:/database Volume=/share/filebrowser/config:/config Environment=FB_NOAUTH=true AutoUpdate=registry [Service] Restart=always TimeoutStartSec=900 [Install] WantedBy=default.target settings.ini /config/settings.ini { "port": 8080, "baseURL": "", "address": "", "log": "stdout", "database": "/database/filebrowser.db", "root": "/srv" } 配置要点 UserNS=keep-id:容器使用当前用户 UID/GID,避免权限错乱 Volume 映射 /share/web:/srv:ro:网站根目录,只读 /share/filebrowser/database:/database:数据库持久化 /share/filebrowser/config:/config:配置持久化 Restart=always:异常退出自动重启 AutoUpdate=registry:容器会根据镜像仓库版本自动更新 初次运行时必须确保 /database 是空的,否则 noauth 不生效! 自动升级机制 AutoUpdate=registry 启用后,Podman 的 systemd 集成会在 systemd.timer 定期触发时检查镜像更新 默认检查周期:每日(受 podman-auto-update.timer 控制) 升级时机: 如果仓库有新版本镜像 → 下载新镜像 自动重启受影响的服务,使用新镜像运行容器 可手动触发: systemctl --user start podman-auto-update.service 启动流程 mkdir -p /share/web \ /share/filebrowser/database \ /share/filebrowser/config loginctl enable-linger $USER systemctl --user daemon-reload systemctl --user enable --now filebrowser.service 验证 systemctl --user status filebrowser journalctl --user -u filebrowser.service -f podman ps | grep filebrowser 访问:<http://<宿主机ip>:8080>

September 25, 2025 · wang1zhen

podman 安装 immich

目录与环境变量 建议使用绝对路径。 样例目录 /share/immich/library /share/immich/postgres 环境文件路径 ~/.config/containers/systemd/immich/.env mkdir -p /share/immich/{library,postgres} mkdir -p ~/.config/containers/systemd/immich .env 样例 # 必填 - 改为绝对路径 UPLOAD_LOCATION=/share/immich/library DB_DATA_LOCATION=/share/immich/postgres # 版本标签 IMMICH_VERSION=release # 时区 TZ=Asia/Tokyo # 数据库 DB_PASSWORD=postgres DB_USERNAME=postgres DB_DATABASE_NAME=immich Quadlet 网络与命名卷 # ~/.config/containers/systemd/immich-network.network [Network] NetworkName=immich [Install] WantedBy=default.target # ~/.config/containers/systemd/model-cache.volume [Volume] VolumeName=model-cache [Install] WantedBy=default.target Valkey # ~/.config/containers/systemd/immich-redis.container [Unit] Description=Immich Redis (Valkey) [Container] Image=docker.io/valkey/valkey:8-bookworm ContainerName=immich_redis Network=immich RestartPolicy=always [Install] WantedBy=default.target Postgres # ~/.config/containers/systemd/immich-postgres.container [Unit] Description=Immich Postgres (vectorchord + pgvector) After=network-online.target Wants=network-online.target [Container] EnvironmentFile=%h/.config/containers/systemd/immich/.env Environment=POSTGRES_PASSWORD=%E{DB_PASSWORD} Environment=POSTGRES_USER=%E{DB_USERNAME} Environment=POSTGRES_DB=%E{DB_DATABASE_NAME} Environment=POSTGRES_INITDB_ARGS=--data-checksums Image=ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0 ContainerName=immich_postgres Volume=%E{DB_DATA_LOCATION}:/var/lib/postgresql/data ShmSize=128m Network=immich RestartPolicy=always [Install] WantedBy=default.target Machine Learning - CPU 基础版 # ~/.config/containers/systemd/immich-machine-learning.container [Unit] Description=Immich Machine Learning After=immich-redis.service immich-postgres.service Wants=immich-redis.service immich-postgres.service [Container] EnvironmentFile=%h/.config/containers/systemd/immich/.env Image=ghcr.io/immich-app/immich-machine-learning:%E{IMMICH_VERSION} ContainerName=immich_machine_learning Volume=model-cache:/cache Network=immich RestartPolicy=always [Install] WantedBy=default.target Server - CPU 基础版 # ~/.config/containers/systemd/immich-server.container [Unit] Description=Immich Server After=immich-redis.service immich-postgres.service Wants=immich-redis.service immich-postgres.service [Container] EnvironmentFile=%h/.config/containers/systemd/immich/.env Image=ghcr.io/immich-app/immich-server:%E{IMMICH_VERSION} ContainerName=immich_server PublishPort=2283:2283 Volume=%E{UPLOAD_LOCATION}:/data Volume=/etc/localtime:/etc/localtime:ro Network=immich RestartPolicy=always [Install] WantedBy=default.target 启动与管理 systemctl --user daemon-reload systemctl --user enable --now immich-network.network model-cache.volume systemctl --user enable --now immich-postgres.service immich-redis.service systemctl --user enable --now immich-machine-learning.service immich-server.service # 查看日志 journalctl --user -u immich-server.service -f journalctl --user -u immich-machine-learning.service -f GPU 加速 - 总览 只改两处:immich-machine-learning.container 与 immich-server.container。 NVIDIA - CUDA 推理与 NVENC 转码 主机准备 安装专有驱动与 NVIDIA Container Toolkit(启用 OCI Hook)。 确认 usr/share/containers/oci/hooks.d 存在 nvidia hook。 immich-machine-learning.container [Container] EnvironmentFile=%h/.config/containers/systemd/immich/.env Image=ghcr.io/immich-app/immich-machine-learning:%E{IMMICH_VERSION}-cuda ContainerName=immich_machine_learning Volume=model-cache:/cache Network=immich Environment=NVIDIA_VISIBLE_DEVICES=all Environment=NVIDIA_DRIVER_CAPABILITIES=compute,video,utility Device=/dev/nvidiactl Device=/dev/nvidia0 Device=/dev/nvidia-uvm RestartPolicy=always immich-server.container [Container] EnvironmentFile=%h/.config/containers/systemd/immich/.env Image=ghcr.io/immich-app/immich-server:%E{IMMICH_VERSION} ContainerName=immich_server PublishPort=2283:2283 Volume=%E{UPLOAD_LOCATION}:/data Volume=/etc/localtime:/etc/localtime:ro Network=immich Environment=NVIDIA_VISIBLE_DEVICES=all Environment=NVIDIA_DRIVER_CAPABILITIES=video,utility Device=/dev/nvidiactl Device=/dev/nvidia0 Device=/dev/nvidia-uvm RestartPolicy=always AMD - ROCm 推理与 VA-API 转码 主机准备 安装 ROCm 运行时。 将用户加入 render 与 video 组。 sudo usermod -aG render,video "$USER" newgrp render immich-machine-learning.container [Container] EnvironmentFile=%h/.config/containers/systemd/immich/.env Image=ghcr.io/immich-app/immich-machine-learning:%E{IMMICH_VERSION}-rocm ContainerName=immich_machine_learning Volume=model-cache:/cache Network=immich Device=/dev/kfd Device=/dev/dri RestartPolicy=always immich-server.container [Container] EnvironmentFile=%h/.config/containers/systemd/immich/.env Image=ghcr.io/immich-app/immich-server:%E{IMMICH_VERSION} ContainerName=immich_server PublishPort=2283:2283 Volume=%E{UPLOAD_LOCATION}:/data Volume=/etc/localtime:/etc/localtime:ro Network=immich Device=/dev/dri RestartPolicy=always 改动后重载 systemctl --user daemon-reload systemctl --user restart immich-machine-learning.service immich-server.service 映射目录与设备说明 Volume=%E{UPLOAD_LOCATION}:/data Immich 媒体与派生数据的根。 典型结构 original/ 原始媒体 thumbs/ 缩略图与预览 encoded-video/ 转码缓存 backup/ 应用内部备份 faces/ clips/ index/ 特征与向量索引缓存 Volume=%E{DB_DATA_LOCATION}:/var/lib/postgresql/data Postgres 数据目录。 结构 base/ 表文件 pg_wal/ 预写式日志 global/ 全局元数据 其他系统目录 Volume=model-cache:/cache ML 模型与推理缓存,避免重复下载或编译。 Volume=/etc/localtime:/etc/localtime:ro 容器时间与宿主同步,日志时间正确。 Device=/dev/dri 暴露渲染节点给容器,开启 VA-API 或 QuickSync。 Device=/dev/nvidiactl /dev/nvidia0 /dev/nvidia-uvm 直通 NVIDIA 设备,配合 OCI Hook 启用 CUDA 与 NVENC。 故障排查 权限 rootless 需加入 render、video 组。检查 ls -l /dev/dri。 编码失败 查看 ffmpeg 日志 journalctl --user -u immich-server.service -f Intel 可尝试设置 LIBVA_DRIVER_NAME=iHD。 CUDA 不可见 检查 NVIDIA OCI Hook 是否存在。 确认容器内可运行 nvidia-smi。 模型重复下载 确认 /cache 已挂载命名卷 model-cache。

September 24, 2025 · wang1zhen

hyprland 配置

安装软件包 sudo apt update sudo apt install -y \ hyprland waybar \ kitty dolphin \ wofi firefox-esr spectacle \ pavucontrol blueman brightnessctl wl-clipboard \ hyprpaper swayidle 检查显示器名称并写入配置 先运行: hyprctl monitors 示例输出: Monitor eDP-1 (ID 0): 1920x1080@60.000Hz Monitor HDMI-A-1 (ID 1): 2560x1440@144.000Hz 配置文件写法(~/.config/hypr/hyprland.conf): monitor=eDP-1,1920x1080@60,0x0,1 monitor=HDMI-A-1,2560x1440@144,1920x0,1 swayidle 用法 在配置中添加: exec-once = swayidle -w \ timeout 300 'hyprctl dispatch dpms off' \ resume 'hyprctl dispatch dpms on' 解释: -w :阻塞运行,保证进程驻留 timeout 300 'cmd' :空闲 300 秒执行命令(这里是关闭屏幕) resume 'cmd' :恢复活动后执行命令(这里是点亮屏幕) 输入设备配置 input { kb_layout = us touchpad { natural_scroll = true # 反向滚动 } } 快捷键设置 # 基础 bind=SUPER,RETURN,exec,kitty bind=SUPER,E,exec,dolphin bind=SUPER,B,exec,firefox bind=SUPER,D,exec,wofi --show drun # 窗口管理 bind=SUPER,Q,killactive bind=SUPER,F,fullscreen # 真全屏 bind=SUPER,SHIFT,F,fullscreen,1 # maximized (伪全屏,保留UI) bind=SUPER,SPACE,togglefloating bind=SUPER,P,togglepseudo # 浮动窗口操作(仅对浮动窗口有效) bind=SUPER,arrowup,moveactive,0 -50 bind=SUPER,arrowdown,moveactive,0 50 bind=SUPERCTRL,arrowup,resizeactive,0 -50 bind=SUPERCTRL,arrowdown,resizeactive,0 50 # 截图(Spectacle) bind=SUPER,SHIFT,S,exec,spectacle bind=SHIFT,PRINT,exec,spectacle -f -o ~/Pictures # 全屏保存 bind=CTRL,PRINT,exec,spectacle -c # 截图复制到剪贴板 # 音量 bind=XF86AudioRaiseVolume,exec,pactl set-sink-volume @DEFAULT_SINK@ +5% bind=XF86AudioLowerVolume,exec,pactl set-sink-volume @DEFAULT_SINK@ -5% bind=XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle # 亮度 bind=XF86MonBrightnessUp,exec,brightnessctl s +10% bind=XF86MonBrightnessDown,exec,brightnessctl s 10%- 窗口美化 decoration { active_opacity = 0.9 inactive_opacity = 0.8 blur = yes blur_size = 5 blur_passes = 3 blur_new_optimizations = on rounding = 8 } 说明: ...

September 18, 2025 · wang1zhen

Linux 下 fio 测试硬盘读写性能

核心选项说明 –name: 任务名 –rw: I/O 模式 read: 顺序读 write: 顺序写 rw: 顺序读写交替 randread: 随机读 randwrite: 随机写 randrw: 随机读写交替 –bs: 块大小(block size),如 4k, 1M –size: 测试文件大小 –filename: 目标文件或设备路径 –runtime: 测试时长 –time_based: 基于时间运行,而不是直到写满 size –group_reporting: 汇总结果 –numjobs: job 数量,即多少线程/进程同时运行相同任务 –iodepth: 每个 job 可挂起的并发 I/O 请求数(队列深度) numjobs × iodepth ≈ 总并发请求数 准备测试文件 fio --name=prepare --rw=write --bs=1M --size=1G --filename=testfile --numjobs=1 --group_reporting 顺序吞吐量测试(CDM Seq QD=8 T=1) 顺序读 fio --name=seqread --rw=read --bs=1M --size=1G --filename=testfile --numjobs=1 --iodepth=8 --runtime=30 --time_based --group_reporting 顺序写 fio --name=seqwrite --rw=write --bs=1M --size=1G --filename=testfile --numjobs=1 --iodepth=8 --runtime=30 --time_based --group_reporting 随机延迟测试(CDM Rnd4K QD=1 T=1) 随机读 fio --name=latread --rw=randread --bs=4k --size=1G --filename=testfile --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting 随机写 fio --name=latwrite --rw=randwrite --bs=4k --size=1G --filename=testfile --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting 随机 IOPS 高并发(CDM Rnd4K QD=32 T=1) 随机读 fio --name=randread --rw=randread --bs=4k --size=1G --filename=testfile --numjobs=1 --iodepth=32 --runtime=60 --time_based --group_reporting 随机写 fio --name=randwrite --rw=randwrite --bs=4k --size=1G --filename=testfile --numjobs=1 --iodepth=32 --runtime=60 --time_based --group_reporting 随机 IOPS 超高并发(CDM Rnd4K QD=32 T=16) 随机读 fio --name=randread_mt --rw=randread --bs=4k --size=1G --filename=testfile --numjobs=16 --iodepth=32 --runtime=60 --time_based --group_reporting 随机写 fio --name=randwrite_mt --rw=randwrite --bs=4k --size=1G --filename=testfile --numjobs=16 --iodepth=32 --runtime=60 --time_based --group_reporting 混合负载(模拟真实业务) fio --name=randrw --rw=randrw --rwmixread=70 --bs=4k --size=1G --filename=testfile --numjobs=4 --iodepth=32 --runtime=60 --time_based --group_reporting 清理 rm testfile

September 18, 2025 · wang1zhen

tailscale cli 设置 exit 节点

查看可用 Exit 节点 tailscale status 指定 Exit 节点 # 节点名或 Tailscale 内网 IP tailscale up --exit-node=mynode 保留本地局域网访问 tailscale up --exit-node=mynode --exit-node-allow-lan-access=true 取消 Exit 节点 tailscale up --exit-node= 参数说明 `–exit-node=<节点名或IP>` 指定出口节点 `–exit-node-allow-lan-access` 允许访问本地局域网,否则所有流量都走 exit 节点

September 18, 2025 · wang1zhen

kdenlive 制作切片

工具与素材准备 剪辑:Kdenlive 字幕生成:Whisper(medium 模型) 字幕美化:Aegisub AI 分离:Demucs(–two-stems=vocals) 音频统一规格:48 kHz,双声道,WAV。 # 从录播提取音频 ffmpeg -i record.mp4 -vn -ac 2 -ar 48000 record.wav 人声与伴奏分离 使用 Demucs two-stems: demucs --two-stems=vocals record.wav 输出目录:./separated/htdemucs/record/ vocals.wav → 人声轨 no_vocals.wav → 伴奏轨 自动字幕生成(Whisper medium) 仅对人声生成字幕: whisper vocals.wav --model medium --language ja --task transcribe --output_format srt vocals.wav → 输入音频文件(人声轨) –model medium –language ja → 指定语言(日语,中文 zh,英文 en) –task transcribe → 转写模式(保持原语言) –output_format srt → 输出带时间戳的 .srt 输出:vocals.srt 字幕美化 在 Aegisub 打开 vocals.srt。 创建样式: Style: SongStyle,Noto Sans CJK JP,48,&H00FFFFFF,&H000000FF,&H00FACE87,&H64000000,0,0,0,0,100,100,0,0,1,3,1,2,10,10,30,1 白字 &H00FFFFFF ...

September 16, 2025 · wang1zhen