SidCK09/aerialize

GitHub: SidCK09/aerialize

通过逆向工程修复 macOS Tahoe 航拍壁纸引擎的视频格式要求,让用户可以用自己的视频作为系统内置壁纸。

Stars: 0 | Forks: 0

# 序列化 **使用你自己的视频作为 macOS Tahoe 航拍壁纸——使用内置播放器,播放你的素材。无需第三方应用,无需 sudo,无需更改 SIP。** 互联网上所有“替换航拍视频文件”的技巧在 macOS 26 上都已失效。你替换了文件,它在屏幕保护程序中播放一次,当你回到桌面时:**壁纸永久变黑**,直到你终止壁纸进程。本项目是对*原因*进行逆向工程的结果——并修复了它。 ## 快速开始 ``` # requirements: macOS 26 (Tahoe), Homebrew ffmpeg, Xcode Command Line Tools brew install ffmpeg git clone https://github.com/SidCK09/aerialize cd aerialize # 查看哪些 aerials 已缓存在你的 Mac 上(通过 System Settings → Wallpaper 进行下载) ./aerialize.sh --list # 转换你的视频并将其安装到你选择的 aerial 之上 ./aerialize.sh ~/Movies/myclip.mp4 --install F88CDF4A-9681-4D1F-88FE-34F1A3C6A62B.mov ``` 然后打开**系统设置 → 壁纸**,点击一个不同的壁纸,然后重新选择你替换的那个。完成。在进行任何操作之前,原始文件会被备份到 `./backups/`,而 `--restore` 会将其恢复。 ## 它的实际工作原理 | 阶段 | 原因 | |---|---| | HEVC `hvc1` 3840×2160 编码,裁剪填充至 16:9,SDR,无音频 | 这是壁纸 pipeline 所期望的基准;标记为 `hev1` 的文件会渲染为黑色,而尺寸过小的文件无法生成桌面静止图像 | | **每 1 秒一个 IDR 关键帧,闭合 GOP** | 减速结束时的定格帧会在内部截止时间前,从前一个关键帧解码到精确的停止帧。5 秒的 GOP 有一半的时间会输掉这场竞争;开放式 GOP(CRA)流则会彻底失败 | | 通过 AVFoundation 重封装 | Apple 的封装器会写入系统工具所期望的 sample-table atoms(`cslg`、`sdtp`、`tapt`)| | 从真实的航拍视频中移植 `tscl`/`tsas` sample groups 和 `hvcC` temporal-layer count | 这是关键发现。引擎的减速过程会*根据 temporal level* 选择帧(日志中的 `RAMP-DOWN switch from level 1 to level 2`)。如果没有 grouping 元数据,sample 读取就会失败(`Code=4`),并且壁纸会黑屏且无法恢复 | 由于所有移植的帧都映射到 base layer,每个 temporal-level 子集都会解析为完整的帧集——这是有效的,而且减速过程无论如何都会重新调整帧的时间,因此看起来是正确的。 包含日志证据的完整调查:[TECHNICAL.md](TECHNICAL.md)。 ## 环境要求 - macOS 26 "Tahoe"(在 26.5.2,Apple Silicon 上开发并测试) - `ffmpeg` / `ffprobe` (Homebrew) - Xcode Command Line Tools(`swiftc` —— AVFoundation 重封装器会在首次运行时编译) - 本地缓存的航拍壁纸(在系统设置 → 壁纸中选择一个以下载它) ## 安全性 - 所有操作都在 `~/Library/Application Support/com.apple.wallpaper/` 中进行——这是**你**的用户库。永远不需要 sudo,也不需要禁用 SIP。 - 原始航拍视频在替换之前会进行校验和备份。`--restore ` 可进行还原。 - macOS 可能会在系统更新后重新下载原始文件;只需再次运行安装即可。 - 你的源视频永远不会被修改。 ## 故障排除 | 症状 | 修复方法 | |---|---| | 壁纸仍然是旧的 | 系统设置 → 选择另一个壁纸 → 重新选择。如果无效:`killall WallpaperAerialsExtension WallpaperAgent`(它们会自动重启)| | 退出屏幕保护程序后变黑 | 使用 aerialize 输出时不应发生。恢复方法:执行上面的 `killall`。然后检查你的文件:`./aerialize.sh --verify out.mov` | | 设置中缺少预览 | 同样使用 `killall`,然后重新打开设置 | ## 致谢 由 [@SidCK09](https://github.com/SidCK09) 逆向工程并构建,Claude (Anthropic) 负责进行日志取证和 bitstream 分析。 基于 MIT 许可。与 Apple 无关。请使用你拥有权利的视频素材。
标签:Cutter, FFmpeg, 云资产清单, 多媒体处理, 桌面定制, 系统工具, 视频编码, 逆向工程