GIF
格式的动态图片虽然很普及,但是由于其时代的局限性,已经不能满足当下网络信息传递的需求了,会被慢慢淘汰,而其替代者可能有两个:WebP/WebM
和APNG
。
但支持APNG
的网络浏览器和图片浏览器少得可怜,而且APNG
体积巨大。
webp和apng的体积对比
test.mkv
的基础信息:
- 大小 952.3 K
- 宽 1198
- 高 1008
- 时长 25秒
- 比特率 310K/s
- 帧率 30
- 纵横比 1.19:1
转换时均使用默认参数:
ffmpeg -i test.mkv test.apng
ffmpeg -i test.mkv test.webp
生成的图片信息:
-rw-r--r-- 1 thepoy thepoy 191M 2月 14 13:16 test.apng
-rw-r--r-- 1 thepoy thepoy 974K 2月 14 13:20 test.webp
apng
格式更适合对精准的色彩还原和细节有严格需求的场景,但默认参数生成的动图却是原视频的200倍就有些说不过去了。也许是ffmpeg
对apng
的支持还不到位吧。
所以我选择webp
。
转换webp详细参数
先看一条完整的命令:
ffmpeg -v warning -i input.mkv -vcodec libwebp_anim -vf fps=15 -lossless 0 -compression_level 6 -q:v 60 -preset text outpub.webp
ffmpeg通用参数:
-v 显示的日志等级
-i 待转换的视频文件路径
-vcodec 要使用的编码器
-vf 输出图片的一些参数,fps、scale等。fps默认值为30,动图通常用不到这么高的帧率,设置为10-15即可。
编码器libwebp_anim
参数:
-lossless 有损或无损。默认值为0,即有损。
-compression_level 压缩等级。值的范围为0-6的整数,默认为4。
对于有损,值越大,质量越好,编码时间越长。
对于无损,值越大,尺寸越大,编码时间越长。
-q:v 图像质量,值为0-100,默认为75。
对于有损,控制的是图像质量。对于无损,控制的是压缩图片时的工作量和时间。
-preset 预设配置,根据图片常规类型自动进行一些设置。
none 不采取预设配置
default 使用编码器默认的配置
picture 数码照片,如人像
photo 自然光的户外摄影
drawing 具有高对比度的细节的手工或线条绘制的图像
icon 小型彩色图像
text 以文字为主的图像
使用
如果没有特殊的尺寸或精细度要求,使用默认命令就可以了。
ffmpeg -i input.mkv -vf fps=15 output.webp