我在 Mac 上有一份 JPG 文件列表。我想将它们导出到每个图像小于 500 千字节的格式中。 我知道如何使用预览应用程序一次一个图像地完成此操作;但我希望能够批量处理,即同时处理多个文件。是否有命令行方式可以这样做,以便我可以编写脚本并在终端中运行它? 或者其他我可以使用的方法?
我在 Mac 上有一份 JPG 文件列表。我想将它们导出到每个图像小于 500 千字节的格式中。 我知道如何使用预览应用程序一次一个图像地完成此操作;但我希望能够批量处理,即同时处理多个文件。是否有命令行方式可以这样做,以便我可以编写脚本并在终端中运行它? 或者其他我可以使用的方法?
这是一个使用命令行的例子,使用 convert (brew info imagemagick
) 命令将目录中所有*.jpg
图像转换为.png
格式。
$ for i in *.jpg; do
convert "$i" "${i%.jpg}.png"
done
你可以在测试之前(dry-run)使用echo
代替<command>
:
$ for i in *.jpg; do
echo "$i" "${i%.jpg}.png"
done
这将在目录中搜索具有扩展名.jpg
的文件,然后执行命令convert
,将文件名$i
作为参数传递,并使用相同的文件名作为输出,删除扩展名并添加新的扩展名.png
,实现方式如下:
"${i%.jpg}.png"
双引号 "
的使用是为了处理文件名中包含空格的情况,更多细节请参考:shell parameter expansion
例如,只需更改文件的质量,您可以使用:
convert "$i" -quality 80% "${i%.jpg}-new.jpg"
或者如果不需要保留原始内容:
mogrify -quality 80% *.jpg
主要的区别在于“convert”通常用于处理单个图像,而“mogrify”则适用于批处理多个文件。安装ImageMagick。(真的..它很轻量级且好用)建议使用Homebrew来安装。然后...
cd [图片文件夹路径] && mogrify -define jpeg:extent=60kb -resize 400 *.JPG
du -sh *
以查看目录中每个文件的大小。注意:*.JPG
必须大写才能正常工作
如何运行:
cd [您的文件夹路径]
将导航到您想要的目录
&&
用于链接命令
mogrify
用于保持相同的文件名
-define jpeg:extent=60kb
设置最大文件大小为60kb
-resize 400
将设置宽度
*.JPG
代表您所在目录中的所有文件。
还有许多可以与imagemagick convert和mogrify一起使用的其他命令。安装完成后,您可以使用man mogrify
查看可以链接到它的命令。
根据文档,“限制JPEG文件的最大大小,例如-define jpeg:extent=400KB
。 JPEG编码器将搜索产生的输出文件不超过该值的最高压缩质量级别。从6.9.2-5版本开始,也将遵守-quality
选项。在6.9.1-0和6.9.2-4之间,添加-quality 100
以使jpeg:extent
正常工作。在6.9.1-0之前,-quality
设置将被忽略。”
从Homebrew或MacPorts或https://imagemagick.org/script/download.php#macosx下载并安装ImageMagick。然后使用mogrify使用-define jpeg:extent = 500KB将文件夹中的所有文件处理为JPG格式,并保存在test2文件夹中。
在我的桌面test1文件夹中有两个文件,处理后会将它们放入桌面上的test2文件夹中。
Before Processing:
mandril.tif 3.22428MB (3.2 MB)
zelda.png 726153B (726 KB)
cd
cd desktop/test1
mogrify -path ../test2 -format jpg -define jpeg:extent=500KB *
After Processing:
mandril.jpg 358570B (359 KB)
zelda.jpg 461810B (462 KB)
请查看https://imagemagick.org/Usage/basics/#mogrify
末尾的 * 表示处理文件夹中的所有文件。如果您想仅限于 jpg,则将其更改为 *.jpg。-format 表示您打算输出为 jpg。
免责声明:请小心,因为以下解决方案是“破坏性”命令,文件将直接被替换为较低质量的文件。
既然您已经阅读了我的免责声明,我建议您获取cwebp,您可以在这里下载。
您还需要并行sudo apt-get install -y parallel
,然后我创造了以下脚本:
parallel cwebp {} -resize 0 640 -m 6 -sns 100 -q 80 -preset photo -segments 4 -f 100 -o {} ::: *.jpg && /
find -name "*.jpg" | parallel 'f="{}" ; mv -- {} ${f:0:-3}webp'
640 是生成文件的像素高度,0 表示宽度会根据宽高比自适应。 我将质量降低到了80%(-q 80),您可能不会注意到太大的区别。
第二行会找到所有已转换但仍然有错误扩展名(.jpg)的文件,然后去除最后3个字符(jpg),并替换为webp。
我从每个文件的5 Mb 减少到约50k(.jpg 图片的尺寸为4000x4000 像素),刚刚节省了20 Gb 的存储空间。希望您喜欢!
如果您不想使用webp格式,可以使用以下方法替代(也许需要安装imageMagick):
parallel convert {} -resize x640 -sampling-factor 4:2:0 -strip -quality 85 \
-interlace JPEG -colorspace RGB -define jpeg:dct-method=float {} ::: *.jpg