Files
SpineWallpaper/.scratch/wallpaper-optimization/issues/02-audio-and-image-size.md
T
Shuery a391021041 perf: 体积从 105.1 MB 降到 28.9 MB(音频转 Opus、图片无损 WebP)
- 两首 flac 母带移入 masters/(gitignore,不入库),转 Opus 128k VBR:3.35 + 3.16 MB
- xilian 三张真 PNG RGBA → 无损 WebP(3.39→1.80、5.01→2.83、3.38→1.76 MB)
- kv37_xilian.png → 无损 WebP 5.13→2.75 MB
- kv37 五张图本来就是 WebP(扩展名误写成 .png),本次只改名并把 atlas 页名改为 .webp
- 删除死文件 dist/jsconfig.json
- 新增 tools/rawdiff.mjs(区分可见差异与仅透明下差异)、tools/atlas-pages.mjs

验证:check-paths 11/11;0 个非 favicon 的 404;无损 WebP 可见像素 0 差异;
libwebp 会改写完全透明像素下的 RGB(xilian 三图 32-49% 像素),渲染级对拍
与 PNG 版相差 0.052/255、热力图全空,确认未因 Linear 过滤渗色。
2026-09-19 19:41:41 +08:00

54 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 02 体积:音频转码 + 未引用资源归位
Status: resolved
## 现状
- `dist` 合计 105.1 MB,其中音频占 77.3 MB:
- `昔涟立绘/audios/「再度和你」.flac` 37.3 MB / 205.1 s / 1.52 Mbps
- `昔涟立绘/audios/昔涟.flac` 37.7 MB / 186.7 s / 1.69 Mbps(此前零引用,现已声明为第二音源)
- `「成为昨日的明天」/audios/pv37.mp3` 2.3 MB / 81 s
- CEF 的解码白名单含 vorbis / libopus / flac / mp3 / pcm_*(不含 aac,`m4a` 大概率不可用)。
## 步骤
1. 无损母带移出 `dist/`,存到 `masters/`(已 gitignore,不入库)。
2. 两首 flac 转 Opus(`libopus` 128k VBR)。保留 `pv37.mp3` 原样。
3. 核对转码未截断、无解码错误。
4. 图片转码**仅在对拍证明无可见差异后**决定(atlas 页要整组转,并同步改 `.atlas` 里的页名)。
## 验收
- `dist` 总体积 ≤35 MB。
- `check-paths` 全绿;转码后的音频可完整解码。
- 每个比例的对拍像素无回归。
## 结果
`dist` 105.1 MB → **28.92 MB**。
- 音频:`再度和你.ogg` 3.35 MB、`昔涟.ogg` 3.16 MB,均通过完整解码与电平检查。
`昔涟.flac` 源文件末尾一帧损坏(186.671 s 处 invalid frame header),但全长音频都在。
- 图片:**全部走无损 WebP**(放弃有损路线,因为目标已达成,没必要冒险)。
- xilian 三张真 PNG RGBA → 无损 WebP:3.39→1.80、5.01→2.83、3.38→1.76 MB
- `kv37_xilian.png` → 无损 WebP 5.13→2.75 MB
- kv37 的五张图**本来就是 WebP,只是扩展名写成 `.png`**,本次只改名——这也顺带证明 WebP 在本机 WE 环境可用(线上版本一直在用)
- atlas 页名同步改为 `.webp`(`tools/atlas-pages.mjs`;注意这两个 .atlas 是 CRLF 行尾)
- 删除死文件 `dist/jsconfig.json`;`README.txt` 是 Workshop 描述(BBcode),保留。
## 验证
- `check-paths`:11/11 声明路径存在。
- 浏览器:0 个非 favicon 的 404。
- 无损 WebP 与源 PNG 的可见像素 **0 差异**。libwebp 会改写完全透明像素下的 RGB
(`tools/rawdiff.mjs` 证实 xilian 三张图有 32–49% 像素属此类),而本项目贴图是 Linear 过滤、
透明像素 RGB 会渗进边缘,所以额外做了渲染级对拍:与 PNG 版同冻结设置相比
**0.052/255、热力图全空**,确认无渗色。
- 全尺寸矩阵留档于 `tools/shots/step02/`。
## 教训
**先验证再删除**。中途 `-preset default` 让无损编码退化成有损(产物只剩 0.03–0.54 MB),
而源 PNG 当时已被删除;只因为源都在 git 里(`09ff322`)才得以还原。
另外 `-quality` 在这个 ffmpeg 的 libwebp 封装里被忽略,要用 `-q:v`;`-exact` 选项不存在。