跳到主要内容
左猫娘右猫娘

博客更新日志 (III)

· 阅读需 6 分钟
Heng_Xin
ここから先は一方通行だ!

最近重构了一些模块, 把独立的模块拆分到子仓库, 然后通过PR同步到主仓库。

一、新增音乐模块 (含字幕)

1.1 音乐模块

依旧非常喜欢 HX-Music 中的 ASS 字幕渲染.

奈何网络上实在没有什么符合我胃口的ass特效歌词 (太难找了), 有很多都是内嵌. 没有外挂 ass, 找到了也只能看. 不清楚如何实现的.

而且还找到了:

它使用的不是标准的 libass 支持的ass格式. 而是 VSFilterMod 扩展标签.

为了更好的在前端能渲染, 我还 fork 其源码, 支持了 部分 VSFilterMod 扩展 (未支持的就等我碰到再说吧qwq...)

此外, 因为 ass 比较大, 甚至 CDN (免费的) 都无法接受 (> 20 MB)

所以为了提速. 我还开发了 HX-CDN-Forge (一个灵活的 React + TypeScript CDN 节点选择器; 内置 Github 的国内 CDN, 自动选择延迟最低的; 并且可并行分块加载) 充分白嫖 CDN

对应的音乐什么的. 存放于子模块: HXLoLi-Music

1.2 Ass 预裁剪

对于 Ass 特效歌词. 因为原本其是为视频适配的. 所以尺寸是 1920x1080 的.

但是如果只是渲染歌词的话. 显然不需要这些尺寸.

同时还需要兼容 歌词上下分离的场景 (比如: 顶部是中文歌词, 底部是日语歌词), 所以需要预裁剪.

Tip

因为我们是静态博客. 所以这些都可以直接预处理. 不用像 HX-Music 中需要考虑客户端本地情况. 而采用 TBB 本地播放前实时裁剪.

特别的, 还要支持一些特别情况. 比如 有时候 左上右下 两个位置需要渲染歌词.

使用朴素的算法就比较难对付. 因为 max/min 得到的框框, 会过大, 导致字幕很小.

为了优化这种情况. 还采用 平滑裁剪 算法, 对于每一个时刻的情况, 都记录下来. 然后平滑裁剪过渡.

这样不会导致字幕过小, 也不会因为裁剪位置变化过大导致抖动、抽搐. 影响体观感~

二、分离子仓库

2.1 CDN 请求 tag 而不是 commit_id

原本的 CDN 方案是:

  • 本仓库提交 (工作流可能会需处理数据); 获取到新版 commit_id, 然后再回写仓库中; 用于 CDN 请求.

Tip

不直接使用 主分支 是因为 CDN 的缓存有 1 年时间. 所以都是旧信息. (虽然有api可以清空. 但是太麻烦了)

所以, 我们才需要指定 commit_id 进行请求. 而坏处是会而外引入一次 git 提交. 让仓库 git log 变得很卢瑟.

更好的解决方案是, 我们在提交前, 先商量好一个 tag_id, 这样就可以随着上一次提交一起提交. 无需额外提交.

之后再让 工作流 新增一个tag就行了.

2.2 分离仓库

既然如此. 那顺便就把 ANiMe 和 Music 都分离在子仓库了. 这样即便子仓库被封了. 也不会影响我主仓库的数据 awa

然后他们还可以使用我上面的方案生成 CDN. 至于如何同步给主仓库他们的 tag ? 直接工作流提 PR 即可!

真不错!

三、私有笔记

简单说明一下. 目前博客是在公开仓库部署的 (因为工作流是免费的)

但是我也是有 私有 笔记的需求的. 那如何展示在主站呢?!

简单的说. 就是笔记存档到私有仓库. 主仓库构建时候, 在工作流可以拉取私有仓库的内容.

然后合并即可. 对于加密的话. 类似于 Https 的思路. 非对称 + 对称 这种.

所以我专门写了个插件: HXLoLi-NaGaMe 用于查看私有笔记.

自带解密. 很神奇吧?

请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...