如何用单条ImageMagick命令批量转换PNG为不同质量的AVIF
解决ImageMagick v7单命令生成多质量AVIF文件的问题
你的脚本核心问题在于ImageMagick的命令行执行逻辑:默认情况下只有最后一个输出路径会触发文件写入,前面的-quality设置和路径不会生效,因为缺少明确的写入指令。要实现单命令加载一次输入并输出多质量文件,需要用-write参数在处理流程中保存每个版本。
修正后的完整脚本
#!/bin/zsh if [ $# -eq 0 ]; then echo "Input file required (.png)" exit 1 fi infile=$1 basename="${infile%.*}" mkdir -p avif magick "$infile" \ -quality 50 -write "avif/$basename-50.avif" \ -quality 60 -write "avif/$basename-60.avif" \ -quality 70 "avif/$basename-70.avif"
关键说明
- 用
magick替代magick convert:ImageMagick v7推荐直接使用magick作为主命令,convert是兼容旧版本的别名,无需额外调用。 -write参数的作用:每次设置-quality后,通过-write将当前配置下的图像写入指定文件,同时保持输入图像在内存中,继续处理后续的质量设置。最后一个输出可以省略-write,因为它是流程的最终输出节点。- 效率保障:输入文件仅被加载解析一次,所有后续的质量转换都基于内存中的图像数据,完全避免了多次读取磁盘文件的开销。
内容的提问来源于stack exchange,提问作者David J.
相关产品推荐
相关产品推荐

