Skip to content

Bronya0/OnlyWallpaper-Win

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OnlyWallpaper-Win

将本地视频设置为 Windows 桌面动态壁纸的工具。支持单文件播放和目录顺序/随机播放,功能精简无缺陷,专注稳定可靠。

License Platform Go Version

功能特性

  • 后台守护进程运行 - 一行命令启动,默认静默运行
  • 单文件与目录播放 - 指定视频或包含视频的目录,按文件名顺序或随机播放
  • 随机播放支持 - --shuffle 选项随机打乱目录视频顺序
  • 保持宽高比 - 竖屏、横屏视频均完整显示,不拉伸裁剪
  • 硬件加速解码 - 使用 mpv 的 --hwdec=auto 自动启用 DXVA2/D3D11VA
  • 智能节能暂停 - 有应用窗口时自动暂停(桌面不可见)、电池供电时暂停、自动恢复
  • 灵活音频控制 - 可选播放声音,静音时完全跳过音频解码节省资源
  • 开机自启支持 - 自动在系统启动时加载上次的壁纸配置
  • 命令行控制 - start/stop/status 等操作
  • 稳定性优先 - 无依赖库,代码结构清晰,充分的日志记录

系统要求

  • 操作系统: Windows 10 或 Windows 11
  • mpv 播放器: 需要预先安装(下载地址
    • 确保 mpv.exe 在系统 PATH 中,或放在工作目录
  • Go (可选,仅用于从源码编译)
    • 版本 1.25 或更高

安装步骤

1. 安装 mpv 播放器

Windows 推荐方式

# 使用 Chocolatey
choco install mpv

# 或使用 scoop
scoop install mpv

手动安装

  • 访问 https://mpv.io/installation/
  • 下载 Windows 版本的 mpv 预编译包
  • 解压到某个目录,将该目录添加到系统 PATH 环境变量

验证安装:

mpv --version

2. 获取 OnlyWallpaper-Win

编译版本 (推荐)

  • 从 Release 页面下载预编译的 onlywallpaper.exe
  • 放在任意位置即可

从源码编译

git clone https://github.com/your-repo/OnlyWallpaper-Win.git
cd OnlyWallpaper-Win
go build -o onlywallpaper.exe .

使用方法

快速开始

# 启动动态壁纸(播放单个视频)
onlywallpaper start --video "C:\Videos\wallpaper.mp4"

# 启动动态壁纸(播放目录中的所有视频)
onlywallpaper start --video "C:\Videos\wallpapers\"

# 查看运行状态
onlywallpaper status

# 停止动态壁纸
onlywallpaper stop

完整命令参考

start - 启动动态壁纸

onlywallpaper start [选项]

选项:

  • --video <路径> (必需) - 视频文件或包含视频的目录
  • --audio (可选) - 启用声音播放(默认关闭以节省资源)
  • --volume <0-100> (可选) - 音量大小,仅在 --audio 启用时有效(默认 50)
  • --shuffle (可选) - 随机打乱目录中的视频播放顺序(默认按文件名顺序)

示例:

# 基础:静音播放单个视频
onlywallpaper start --video ".\nature.mp4"

# 带声音播放
onlywallpaper start --video ".\wallpaper.mp4" --audio

# 指定音量(自动启用声音)
onlywallpaper start --video "C:\Videos\beach.mp4" --volume 30

# 播放目录中的视频(按文件名顺序)
onlywallpaper start --video "C:\Videos\city\"

# 目录随机播放
onlywallpaper start --video "C:\Videos\city\" --shuffle

# 目录随机播放 + 带声音
onlywallpaper start --video "D:\动态壁纸\" --shuffle --audio --volume 40

stop - 停止动态壁纸

onlywallpaper stop
  • 优雅地停止后台守护进程和 mpv 播放器
  • 恢复静态壁纸显示

status - 查看状态

onlywallpaper status

输出示例:

状态: 播放中
视频: C:\Videos\wallpaper.mp4

或(目录模式):

状态: 播放中
目录: C:\Videos\wallpapers\ (5 个视频)

autostart - 配置开机自启

# 启用开机自启
onlywallpaper autostart on

# 禁用开机自启
onlywallpaper autostart off

# 查看当前状态
onlywallpaper autostart

开启后,系统每次启动都会自动加载并播放上次配置的视频/目录。

配置文件

配置文件位置:%APPDATA%\OnlyWallpaper\config.json

示例配置:

{
  "video_path": "C:\\Videos\\wallpaper.mp4",
  "enable_audio": false,
  "volume": 50,
  "hwdec": "auto",
  "shuffle": false,
  "auto_pause_fullscreen": true,
  "auto_pause_battery": true
}

配置项说明:

  • video_path - 上次启动的视频路径或目录
  • enable_audio - 是否播放声音 (true/false)
  • volume - 音量 (0-100)
  • shuffle - 目录模式下是否随机播放 (true/false)
  • hwdec - 硬件解码模式
    • auto (默认) - 自动选择最优,支持 DXVA2/D3D11VA
    • auto-safe - 安全模式选择
    • d3d11va - 强制使用 Direct3D 11 解码
    • dxva2 - 强制使用 DXVA2 解码
    • no - 禁用硬件解码(不推荐,CPU 占用高)
  • auto_pause_fullscreen - 有应用窗口时自动暂停(回到桌面自动恢复)
  • auto_pause_battery - 电池供电时自动暂停

支持的视频格式

  • .mp4 - MPEG-4 视频(推荐)
  • .mkv - Matroska 容器
  • .webm - WebM 格式
  • .avi - Audio Video Interleave
  • .mov - QuickTime 容器

大部分视频格式都可以通过 mpv 播放。建议使用 H.264 编码的 MP4 文件以获得最佳兼容性和硬件解码支持。

智能节能功能

OnlyWallpaper-Win 内置智能节能机制,在特定条件下自动暂停壁纸以节省资源:

应用窗口检测

工作原理:

  • 后台监控前台窗口 (每 2 秒检查一次)
  • 只要有任何普通应用窗口在前台,就自动暂停壁纸
  • 回到桌面(最小化所有窗口)后自动恢复
  • 自动忽略任务栏、系统托盘等系统窗口

场景:

  • 使用浏览器、编辑器、游戏等任何应用时,壁纸自动暂停节省资源
  • Win + D 回到桌面后,壁纸自动恢复播放

电池供电检测

工作原理:

  • 监控系统电源状态 (CPU 占用极低)
  • 使用电池时自动暂停壁纸
  • 切换到交流电时自动恢复

场景:

  • 笔记本电脑使用电池时,自动停止播放以延长续航时间
  • 接入电源后恢复播放

配置禁用

若要禁用某个节能功能,编辑配置文件:

{
  "auto_pause_fullscreen": false,
  "auto_pause_battery": false
}

注意: 禁用 auto_pause_fullscreen 后,壁纸将在所有情况下持续播放(包括使用其他应用时),会持续占用 GPU 资源。

性能优化

内存占用

内存占用 说明
静音播放 (--no-audio) ~80-120 MB 推荐。完全跳过音频解码
有声播放 ~120-150 MB 视频分辨率和编码方式影响

CPU 占用

  • 硬件解码启用 (~5-15%):包括后台守护、电源监控
  • 硬件解码禁用 (~30-60%):高度依赖视频分辨率,4K 会显著增加

启用硬件解码

硬件解码已默认启用 (--hwdec=auto)。验证是否生效:

# 查看 mpv 的硬件解码状态(需单独运行 mpv)
mpv --hwdec=auto --info <video_file>
# 输出中会显示 "hwdec-active: yes"

常见问题 (FAQ)

Q: 启动时提示 "未找到 mpv"

解决方案:

  1. 确保已安装 mpv (https://mpv.io/installation/)
  2. 验证 mpv 在系统 PATH 中:
    mpv --version
  3. 若能运行 mpv but 工具找不到,重启命令行或 IDE

Q: 目录播放时,视频顺序不对

目录播放默认按文件名的字典序排序。例如:

1-intro.mp4
2-main.mp4
10-outro.mp4  # 这会排在末尾,不是倒数第二

解决方案: 使用前缀数字让文件名有序:

01-intro.mp4
02-main.mp4
10-outro.mp4

或使用 --shuffle 启用随机播放,不关心顺序:

onlywallpaper start --video "C:\Videos\" --shuffle

Q: 壁纸回到桌面才播放,打开其他窗口就暂停了?

这是正常行为,也是设计如此。只有当桌面可见(没有任何应用窗口遮挡)时才播放壁纸,其他情况下自动暂停以节省 CPU/GPU 资源。

若要在所有情况下持续播放,编辑配置文件将 auto_pause_fullscreen 设为 false

Q: 目录中有大量视频文件(几百个)能否正常播放?

可以。当视频文件超过 100 个时,工具会自动生成临时播放列表文件(%APPDATA%\OnlyWallpaper\playlist.m3u)来避免 Windows 命令行长度限制(32KB),mpv 会从该文件加载播放列表。

Q: 竖屏视频显示不全,两边被裁剪?

当前版本已修复此问题:视频默认保持原始宽高比(--keepaspect=yes),不会强制拉伸。竖屏视频会在两侧显示黑边,内容完整可见。

Q: 如何完全卸载?

  1. 停止动态壁纸:onlywallpaper stop
  2. 禁用开机自启:onlywallpaper autostart off
  3. 删除 exe 文件
  4. (可选) 删除配置目录:%APPDATA%\OnlyWallpaper\

Q: 能否在多显示器上播放不同壁纸?

当前版本不支持。工具将视频嵌入到主显示器的 WorkerW 窗口。多屏支持需要重大架构改动。

Q: 为何默认静音?

节能考虑。大多数用户只想要视觉效果。声音会增加 CPU/内存占用,且许多动态壁纸本身无声。需要时通过 --audio 启用。

Q: mpv IPC 连接失败警告可以忽略吗?

可以。这个警告意味着暂停/恢复功能不可用,但视频仍会继续播放。重新启动通常能解决。

Q: 如何查看日志?

日志文件在:%APPDATA%\OnlyWallpaper\daemon.log

# Windows 命令行查看
type %APPDATA%\OnlyWallpaper\daemon.log

# 或用记事本打开
notepad %APPDATA%\OnlyWallpaper\daemon.log

开发相关

项目结构

OnlyWallpaper-Win/
├── main.go                  # CLI 入口和命令处理
├── go.mod / go.sum          # Go 模块依赖
├── internal/
│   ├── config/              # 配置文件管理
│   ├── desktop/             # Windows WorkerW 窗口操作
│   ├── ipc/                 # CLI-守护进程通信协议
│   ├── player/              # mpv 子进程生命周期管理
│   ├── playlist/            # 目录视频扫描和排序
│   ├── power/               # 电源和全屏监控
│   ├── autostart/           # 开机自启注册表管理
│   └── daemon/              # 守护进程主循环
└── README.md / LICENSE

核心设计

  1. 分离的进程架构

    • CLI 进程:处理命令,启动守护进程
    • 守护进程:管理播放器,监控系统状态
  2. Windows 特定实现

    • 使用 Win32 API (user32.dll, kernel32.dll) 操作桌面窗口
    • 命名管道 (Named Pipes) 作为 IPC 通信层
    • 注册表管理开机自启
  3. 资源管理

    • 硬件解码优先(DXVA2/D3D11VA)
    • 静音时完全跳过音频解码
    • 智能暂停避免浪费资源

依赖库

  • github.com/Microsoft/go-winio - Windows 命名管道支持
  • golang.org/x/sys/windows/registry - 注册表操作

编译

# 标准编译
go build -o onlywallpaper.exe .

# 优化二进制大小
go build -ldflags="-s -w" -o onlywallpaper.exe .

# 交叉编译(在 Linux 编译 Windows 版本)
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -o onlywallpaper.exe .

扩展和修改

代码注释详细,每个模块都有文档字符串。若需要修改功能:

  1. 添加新的视频格式 - 编辑 internal/playlist/playlist.go 中的 SupportedExtensions
  2. 修改监控间隔 - 编辑 internal/power/power.go 中的 checkInterval
  3. 自定义 mpv 参数 - 编辑 internal/player/player.go 中的 Start 方法

许可证

MIT License - 详见 LICENSE 文件

参与开发

欢迎提交 Issue 和 Pull Request!

About

windows动态壁纸

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages