如何用FFmpeg批量将GIF转APNG且不增大文件体积?
批量将数字命名GIF转换为APNG(控制体积)
使用ffmpeg工具可以实现批量转换,同时通过编码参数严格控制输出体积,避免第三方在线工具的体积膨胀问题。先确保你已安装ffmpeg(可通过系统包管理器或官方渠道下载)。
Windows CMD 命令
for /L %i in (1,1,100) do ffmpeg -i "%i.gif" -c:v apng -f apng -compression_level 9 -filter:v "split[s0][s1];[s0]palettegen=stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=3" "%i.apng"
- 调整
(1,1,100)中的数字范围,匹配你的文件编号区间(比如从1到50就改成(1,1,50)) -compression_level 9:启用最高PNG压缩级别,最大化体积缩减- 调色板滤镜组合:生成单帧调色板+拜耳抖动,在保留画质的前提下避免体积暴涨
Linux/macOS Bash 命令
for i in {1..100}; do ffmpeg -i "$i.gif" -c:v apng -f apng -compression_level 9 -filter:v "split[s0][s1];[s0]palettegen=stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=3" "$i.apng"; done
- 调整
{1..100}的数字范围适配你的文件编号 - 参数逻辑与Windows版本一致
额外优化建议
- 若需进一步压缩体积,可将
bayer_scale=3改为bayer_scale=2(弱化抖动),或直接替换为dither=none(关闭抖动,可能出现轻微色块) - 先测试单个文件验证体积和画质:
ffmpeg -i 1.gif -c:v apng -f apng -compression_level 9 -filter:v "split[s0][s1];[s0]palettegen=stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=3" 1.apng
内容的提问来源于stack exchange,提问作者Sensei
相关产品推荐
相关产品推荐

