#1 - 2021-9-24 03:14
OO雷达
抛砖引玉,我用的是 mpv 播放器播放视频和截图,本质是使用 ffmpeg 进行截图,mpv 截图支持 jpg、png 和 webp 三种格式,可设置图片质量和压缩等级。当然,各位列举的配置可以不局限于 mpv(最好支持 GNU/Linux),目标是图片能准确还原画面的情况下体积尽可能小。
以下是 mpv 影响截图质量的主要参数,可在 mpv.conf 中修改,详细说明见此:
screenshot-format=<type> (图片格式,default: jpg)
screenshot-jpeg-quality=<0-100> (jpg 图片质量,default: 90)
screenshot-png-compression=<0-9> (png 图片压缩等级,default: 7)
screenshot-png-filter=<0-5> (过滤器,default: 5)
screenshot-webp-lossless=<yes|no> (是否无损,若设置为 yes 则忽略 quality,default: no)
screenshot-webp-quality=<0-100> (webp 图片质量,default: 75)
screenshot-webp-compression=<0-6> (webp 图片压缩等级,仅影响有损的图片质量,default: 4)
我各种试了下,webp quality 75 的默认图片质量明显低于另两个格式,所以以90为最低值测试,png 的参数只能设置压缩等级,质量为无损。相近质量下的图片体积,png >> jpg > webp,而图片质量方面在明亮场景下肉眼观看基本一致,但在画面偏暗的环境下就出现了比较明显的区别,有损 webp 和 jpg 格式截出的图片会有一些色块,而 png 和无损 webp 则要好很多,但 png 格式截出的图片体积实在是太大,无损 webp 虽然比 png 小了很多但还是接近了1MB。
以下是以 [喵萌奶茶屋&JKHouse] 剃须。然后捡到女高中生 - 01 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕] 00:02:07.711处进行测试的部分有代表性的对比图(不要吐槽为什么是这里,正好碰到的能明显反应区别的场景)。为了减小页面大小,我只贴出一张完整的图片,其他的图以链接的形式放出。
png, filter:5, compression: 9, size: 7.6MB;
https://files.catbox.moe/ucj4ll.png
暗部特写(完美还原,袜子颜色十分纯净!胖次的明暗过渡也很自然,不过体积也很大,而各种过滤器肉眼没看出区别,图片体积变化不大)
webp, lossless: yes, quality: 90, compression: 5, size: 941.1KB;
https://files.catbox.moe/k97hxq.webp
暗部特写(无损 webp 的图片质量与 png 基本一致,体积也缩减了很多,但还是偏大了)
webp, lossless: no, quality: 90, compression: 6, size: 65.6 KB;
https://files.catbox.moe/it7wiv.webp
暗部特写(比较糟糕,袜子和胖次处出现明显色块)
webp, lossless: no, quality: 100, compression: 6, size: 188.9 KB;
https://files.catbox.moe/vtw5ms.webp
暗部特写(体积变为3倍,袜子和胖次处出现色块情况略有改善,但仍肉眼可见)
webp, lossless: no, quality: 100, compression: 0, size: 261.8 KB;
https://files.catbox.moe/5nsrcx.webp
暗部特写(不压缩,体积增大,质量还是差不多)
jpg, quality: 90, size: 201.8KB;
https://files.catbox.moe/0yqq8m.jpg
暗部特写(比有损 webp 情况好,但袜子处有纹路,胖次处有小色块)
jpg, quality: 100, size: 1.1MB;
https://files.catbox.moe/cehf1n.jpg
暗部特写(体积变为5倍,轻微改善)
小结:webp 在体积压缩上很出色,但有损 webp 对于暗处场景的处理并不令我满意,无损 webp 体积又大了一些,这就是我的纠结之处。所以我目前使用的方案是平时用90 quality 的 webp 截图,如果截图时遇到较暗的场景就临时设置为无损 webp。
还有一种思路是得到质量好的截图再压缩或转换,不过我试了没有得到好的效果,相同格式不损失质量压不动。不同格式的话我尝试了下最新的 avif 格式,使用 avifenc -l 可将 7.6MB png 无损转换为 3.8MB 的 avif,webp 转 avif 则暂未支持。ffmpeg 也还没支持 avif,以后支持了再来测测。
以下是 mpv 影响截图质量的主要参数,可在 mpv.conf 中修改,详细说明见此:
screenshot-format=<type> (图片格式,default: jpg)
screenshot-jpeg-quality=<0-100> (jpg 图片质量,default: 90)
screenshot-png-compression=<0-9> (png 图片压缩等级,default: 7)
screenshot-png-filter=<0-5> (过滤器,default: 5)
screenshot-webp-lossless=<yes|no> (是否无损,若设置为 yes 则忽略 quality,default: no)
screenshot-webp-quality=<0-100> (webp 图片质量,default: 75)
screenshot-webp-compression=<0-6> (webp 图片压缩等级,仅影响有损的图片质量,default: 4)
我各种试了下,webp quality 75 的默认图片质量明显低于另两个格式,所以以90为最低值测试,png 的参数只能设置压缩等级,质量为无损。相近质量下的图片体积,png >> jpg > webp,而图片质量方面在明亮场景下肉眼观看基本一致,但在画面偏暗的环境下就出现了比较明显的区别,有损 webp 和 jpg 格式截出的图片会有一些色块,而 png 和无损 webp 则要好很多,但 png 格式截出的图片体积实在是太大,无损 webp 虽然比 png 小了很多但还是接近了1MB。
以下是以 [喵萌奶茶屋&JKHouse] 剃须。然后捡到女高中生 - 01 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕] 00:02:07.711处进行测试的部分有代表性的对比图(不要吐槽为什么是这里,正好碰到的能明显反应区别的场景)。为了减小页面大小,我只贴出一张完整的图片,其他的图以链接的形式放出。
png, filter:5, compression: 9, size: 7.6MB;
https://files.catbox.moe/ucj4ll.png
暗部特写(完美还原,袜子颜色十分纯净!胖次的明暗过渡也很自然,不过体积也很大,而各种过滤器肉眼没看出区别,图片体积变化不大)
webp, lossless: yes, quality: 90, compression: 5, size: 941.1KB;
https://files.catbox.moe/k97hxq.webp
暗部特写(无损 webp 的图片质量与 png 基本一致,体积也缩减了很多,但还是偏大了)
webp, lossless: no, quality: 90, compression: 6, size: 65.6 KB;
https://files.catbox.moe/it7wiv.webp
暗部特写(比较糟糕,袜子和胖次处出现明显色块)
webp, lossless: no, quality: 100, compression: 6, size: 188.9 KB;
https://files.catbox.moe/vtw5ms.webp
暗部特写(体积变为3倍,袜子和胖次处出现色块情况略有改善,但仍肉眼可见)
webp, lossless: no, quality: 100, compression: 0, size: 261.8 KB;
https://files.catbox.moe/5nsrcx.webp
暗部特写(不压缩,体积增大,质量还是差不多)
jpg, quality: 90, size: 201.8KB;
https://files.catbox.moe/0yqq8m.jpg
暗部特写(比有损 webp 情况好,但袜子处有纹路,胖次处有小色块)
jpg, quality: 100, size: 1.1MB;
https://files.catbox.moe/cehf1n.jpg
暗部特写(体积变为5倍,轻微改善)
小结:webp 在体积压缩上很出色,但有损 webp 对于暗处场景的处理并不令我满意,无损 webp 体积又大了一些,这就是我的纠结之处。所以我目前使用的方案是平时用90 quality 的 webp 截图,如果截图时遇到较暗的场景就临时设置为无损 webp。
还有一种思路是得到质量好的截图再压缩或转换,不过我试了没有得到好的效果,相同格式不损失质量压不动。不同格式的话我尝试了下最新的 avif 格式,使用 avifenc -l 可将 7.6MB png 无损转换为 3.8MB 的 avif,webp 转 avif 则暂未支持。ffmpeg 也还没支持 avif,以后支持了再来测测。
--screenshot-webp-lossless=<yes|no>
Write lossless WebP files. --screenshot-webp-quality is ignored if this is set. The default is no.
--screenshot-webp-compression=<0-6>
Set the WebP compression level. Higher means better compression, but takes more CPU time. Note that this also affects the screenshot quality when used with lossy WebP files. The default is 4.
--screenshot-png-filter=<0-5>
Set the filter applied prior to PNG compression. 0 is none, 1 is "sub", 2 is "up", 3 is "average", 4 is "Paeth", and 5 is "mixed". This affects the level of compression that can be achieved. For most images, "mixed" achieves the best compression ratio, hence it is the default.
比如这个帖子的第一张图,1.1MB 的 webp 动图,由下面链接中的 572.9KB 的 webm 视频转换而来,质量体积都劣于视频但远好于 gif,视频直接转换为 gif 会得到一张 2.4MB 且充满噪点的动图,用 gifski 来转体积就又翻数倍。
请问上面提到的"支持无需重新编码的剪辑软件"常见的有哪些? 另外支持"把视频转换成所需图片格式"的软件有没有什么推荐的?
归根结底自己对视频&音频参数之类的就一窍不通, 知道个AVC&AAC还是因为收藏压制作品时顺手查了下。过去没有碰到图片处理的问题也没有在这方向深入了解的动力, 看来还是绕不开啊...得找找适合入门的文章了。