一次 ImageMagick CLI 调用即可转换多种质量

问题描述 投票:0回答:2

我的具体目标是将 PNG 转换为例如一次调用 ImageMagick (v7) 命令行界面即可获得具有多种品质的 AVIF。为什么不多次调用?效率。这个想法是告诉 ImageMagick 它只需要加载输入文件一次,将其保留在内存中,同时输出具有不同质量设置的多个文件。

此脚本显示了我正在尝试执行的操作,但最后一个命令的语法不正确:

#!/bin/zsh
if [ $# -eq 0 ]; then
  echo "Input file required (.png)"
  exit 1
fi
infile=$1
basename="${infile%.*}"
mkdir -p avif
magick convert "$infile" \
-quality 50 "avif/$basename-50.avif" \
-quality 60 "avif/$basename-60.avif" \
-quality 70 "avif/$basename-70.avif"

我 (a) 搜索了 IM CLI 文档 并 (b) 向各种 AI 工具寻求帮助。到目前为止,还没有运气。

command-line-interface imagemagick
2个回答
0
投票

通过隔离括号内的写入操作,ImagcMagick 可以通过单个命令写入输入图像的多个版本。这是解决此问题的一种方法的示例......

infile=$1
basename="${infile%.*}"
mkdir -p avif

magick convert "$infile" \
   \( -clone 0 -quality 50 -write "avif/$basename-50.avif" \) \
   \( -clone 0 -quality 60 -write "avif/$basename-60.avif" \) \
   \( -clone 0 -quality 70 -write "avif/$basename-70.avif" \) \
      null:

该命令读取输入图像,将其克隆到括号内,设置质量,并写入输出,然后继续执行该命令。可以对其他克隆执行相同甚至不同的操作并将其写入磁盘。我在命令末尾使用了“null:”,因为 ImageMagick 期望命令以输出文件名结尾,并且我们的输出已经写入。


0
投票

可以对每个子命令使用括号处理,并使用 +write XXX 保存结果和 MPR: 代替 -clone 来节省内存。同样对于 Imagemagick 7,请使用 magick,而不是 magick Convert。

#!/bin/zsh
if [ $# -eq 0 ]; then
  echo "Input file required (.png)"
  exit 1
fi
infile=$1
basename="${infile%.*}"
mkdir -p avif
magick "$infile" +write MPR:img +delete \
\( MPR:img -quality 50 +write "avif/$basename-50.avif" +delete \) \
\( MPR:img -quality 60 +write "avif/$basename-60.avif" +delete \) \
MRP:img -quality 70 "avif/$basename-70.avif"
© www.soinside.com 2019 - 2024. All rights reserved.