将本地视频设置为 Windows 桌面动态壁纸的工具。支持单文件播放和目录顺序/随机播放,功能精简无缺陷,专注稳定可靠。
- ✅ 后台守护进程运行 - 一行命令启动,默认静默运行
- ✅ 单文件与目录播放 - 指定视频或包含视频的目录,按文件名顺序或随机播放
- ✅ 随机播放支持 -
--shuffle选项随机打乱目录视频顺序 - ✅ 保持宽高比 - 竖屏、横屏视频均完整显示,不拉伸裁剪
- ✅ 硬件加速解码 - 使用 mpv 的
--hwdec=auto自动启用 DXVA2/D3D11VA - ✅ 智能节能暂停 - 有应用窗口时自动暂停(桌面不可见)、电池供电时暂停、自动恢复
- ✅ 灵活音频控制 - 可选播放声音,静音时完全跳过音频解码节省资源
- ✅ 开机自启支持 - 自动在系统启动时加载上次的壁纸配置
- ✅ 命令行控制 - start/stop/status 等操作
- ✅ 稳定性优先 - 无依赖库,代码结构清晰,充分的日志记录
- 操作系统: Windows 10 或 Windows 11
- mpv 播放器: 需要预先安装(下载地址)
- 确保 mpv.exe 在系统 PATH 中,或放在工作目录
- Go (可选,仅用于从源码编译)
- 版本 1.25 或更高
Windows 推荐方式
# 使用 Chocolatey
choco install mpv
# 或使用 scoop
scoop install mpv手动安装
- 访问 https://mpv.io/installation/
- 下载 Windows 版本的 mpv 预编译包
- 解压到某个目录,将该目录添加到系统 PATH 环境变量
验证安装:
mpv --version编译版本 (推荐)
- 从 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 stoponlywallpaper 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 40onlywallpaper stop- 优雅地停止后台守护进程和 mpv 播放器
- 恢复静态壁纸显示
onlywallpaper status输出示例:
状态: 播放中
视频: C:\Videos\wallpaper.mp4
或(目录模式):
状态: 播放中
目录: C:\Videos\wallpapers\ (5 个视频)
# 启用开机自启
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/D3D11VAauto-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 | 视频分辨率和编码方式影响 |
- 硬件解码启用 (~5-15%):包括后台守护、电源监控
- 硬件解码禁用 (~30-60%):高度依赖视频分辨率,4K 会显著增加
硬件解码已默认启用 (--hwdec=auto)。验证是否生效:
# 查看 mpv 的硬件解码状态(需单独运行 mpv)
mpv --hwdec=auto --info <video_file>
# 输出中会显示 "hwdec-active: yes"解决方案:
- 确保已安装 mpv (https://mpv.io/installation/)
- 验证 mpv 在系统 PATH 中:
mpv --version
- 若能运行 mpv but 工具找不到,重启命令行或 IDE
目录播放默认按文件名的字典序排序。例如:
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这是正常行为,也是设计如此。只有当桌面可见(没有任何应用窗口遮挡)时才播放壁纸,其他情况下自动暂停以节省 CPU/GPU 资源。
若要在所有情况下持续播放,编辑配置文件将 auto_pause_fullscreen 设为 false。
可以。当视频文件超过 100 个时,工具会自动生成临时播放列表文件(%APPDATA%\OnlyWallpaper\playlist.m3u)来避免 Windows 命令行长度限制(32KB),mpv 会从该文件加载播放列表。
当前版本已修复此问题:视频默认保持原始宽高比(--keepaspect=yes),不会强制拉伸。竖屏视频会在两侧显示黑边,内容完整可见。
- 停止动态壁纸:
onlywallpaper stop - 禁用开机自启:
onlywallpaper autostart off - 删除 exe 文件
- (可选) 删除配置目录:
%APPDATA%\OnlyWallpaper\
当前版本不支持。工具将视频嵌入到主显示器的 WorkerW 窗口。多屏支持需要重大架构改动。
节能考虑。大多数用户只想要视觉效果。声音会增加 CPU/内存占用,且许多动态壁纸本身无声。需要时通过 --audio 启用。
可以。这个警告意味着暂停/恢复功能不可用,但视频仍会继续播放。重新启动通常能解决。
日志文件在:%APPDATA%\OnlyWallpaper\daemon.log
# Windows 命令行查看
type %APPDATA%\OnlyWallpaper\daemon.log
# 或用记事本打开
notepad %APPDATA%\OnlyWallpaper\daemon.logOnlyWallpaper-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
-
分离的进程架构
- CLI 进程:处理命令,启动守护进程
- 守护进程:管理播放器,监控系统状态
-
Windows 特定实现
- 使用 Win32 API (user32.dll, kernel32.dll) 操作桌面窗口
- 命名管道 (Named Pipes) 作为 IPC 通信层
- 注册表管理开机自启
-
资源管理
- 硬件解码优先(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 .代码注释详细,每个模块都有文档字符串。若需要修改功能:
- 添加新的视频格式 - 编辑 internal/playlist/playlist.go 中的
SupportedExtensions - 修改监控间隔 - 编辑 internal/power/power.go 中的
checkInterval - 自定义 mpv 参数 - 编辑 internal/player/player.go 中的
Start方法
MIT License - 详见 LICENSE 文件
欢迎提交 Issue 和 Pull Request!