Waifu2x-Extension-GUI
Waifu2x-Extension-GUI copied to clipboard
Gif & Animated Webp & Apng variable frame rate support and dedup
- [ ] Gif variable frame rate
- [ ] gif dedup
- [ ] apng variable frame rate
- [ ] apng deduplication
- [x] Webp VFR
- [ ] Webp Dedup
建议描述 典型(LINE 贴图)的 APNG 存在重复帧。由于 APNG 为无损压缩,拆分后可以直接计算各帧的 hash 来去重,升采样时就没有必要重复处理重复帧。已经在实际的 LINE 贴图上验证过这是可行且高效的。
您设想的解决方案
- APNG 拆分
- 计算各帧 hash,建立实际帧(存在重复)到逻辑帧(无重复)之间的映射
- 升采样所有逻辑帧
- 从先前建立的映射,将升采样后的逻辑帧恢复为实际帧
- 组装 APNG
补充内容 图像完全相同即可视为重复帧,而它们的持续时间则不一定是相同的。
好, 以后会做, 先加到待办列表里了 顺便问一下, 能提供张line贴图给我做测试吗? 我不用LINE
顺便问一下, 能提供张line贴图给我做测试吗? 我不用LINE
为了避免版权上的争议,直接给贴图不是太合适。从 [REDACTED] 下载吧:
这里随便选了一个动态贴图集: [REDACTED] ,animation@2x
目录里为动态贴图。
比如 <REDACTED>[email protected]
是一张帧重复率比较高的贴图。而 <REDACTED>[email protected]
则是另一种代表:由于 LINE 贴图似乎有时长必须为整数秒的限制,所以这张贴图是 3 个有效帧重复出现 6 次,且持续时间也一致;另外这张贴图的帧率是非标准的 18fps(非标准的帧率在 LINE 贴图中不少见),被 W2xEX 处理后就变成 20fps 了,不知道能不能解决这个问题。(对于这种贴图也许 APNG 优化的时候也许可以优化成只剩 3 帧?不过这是另一个话题了。)
EDIT: 为了避免版权上的争议,在您下载到后,抹去了相关内容。
好的, 下载到贴图了, 谢谢
另外这张贴图的帧率是非标准的 18fps(非标准的帧率在 LINE 贴图中不少见),被 W2xEX 处理后就变成 20fps 了
还发现一个问题:有些贴图不同帧的持续时间是不同的,存在一些帧的持续时间会更长。被 W2xEX 处理后,所有帧的持续时间都变成帧率的倒数了。
另外这张贴图的帧率是非标准的 18fps(非标准的帧率在 LINE 贴图中不少见),被 W2xEX 处理后就变成 20fps 了
还发现一个问题:有些贴图不同帧的持续时间是不同的,存在一些帧的持续时间会更长。被 W2xEX 处理后,所有帧的持续时间都变成帧率的倒数了。
目前不支持可变帧率, 为了保证正常播放会统一所有帧的播放时长(统一帧率)
另外这张贴图的帧率是非标准的 18fps(非标准的帧率在 LINE 贴图中不少见),被 W2xEX 处理后就变成 20fps 了
还发现一个问题:有些贴图不同帧的持续时间是不同的,存在一些帧的持续时间会更长。被 W2xEX 处理后,所有帧的持续时间都变成帧率的倒数了。
目前不支持可变帧率, 为了保证正常播放会统一所有帧的播放时长(统一帧率)
应该是因为 apngasm 不支持为每帧指定持续时间?但 W2xEX 只是将每帧的帧率都统一,而不是创造重复帧来契合时轴。LINE 贴图里,甚至会有贴图存在一帧占据的时间就达到贴图的一半时长的状况,这种情况下统一帧率而不创造重复帧的观感就非常奇怪了。
除了创造重复帧可以解决这个问题以外,我搜寻了一些资料,发现通过 ffmpeg (测试使用的版本为 5.0) 的 concat 可以创建可变帧率的 APNG。(我猜测这就是 LINE 创造贴图的方式) 像这样写一个 concat file:
file 01.png
duration 0.1
file 02.png
duration 0.3
file 03.png
duration 0.5
file 04.png
duration 1
file 01.png
duration 0.3
file 02.png
duration 0.1
file 03.png
duration 0.1
file 04.png
duration 0.7
ffmpeg -f concat -i concat.txt -y variable_framerate.apng # 不要指定帧率,否则 ffmpeg 会创造重复帧来契合时轴
即可得到一个可变帧率的 APNG。 另外也不难留意到,这种方式非常便于在 APNG 升采样前进行帧去重,因为升采样后直接把从逻辑帧反映射出实际帧的结果写到 concat file 里就行了,不必创建实际帧的文件。
谢谢,我没在用apngasm,目前用的就是ffmpeg,我只是没细研究apng罢了
问题是怎么批量获取每一帧的 duration 呢? 我一直觉得比较麻烦就没细研究.
毕竟apng和GIF都大不到哪去, 只要你的电脑不是特别垃圾, 重复帧不会造成多少时间损失
QQ上联系你了
一年过去了我才想起来这个, 现在软件要开始支持动态webp了, 我便一起把可以通用的"可变帧率"模块写出来了, 先给动态webp用, 后面apng和gif都会支持上 就是有些太晚了....