如何批量减小JPEG图片的文件大小(/Mac)?
How to reduce the file size on JPEG images in batch (/Mac)?
我在 Mac 上有一个 .JPG 文件列表。我想将它们导出为每张图像占用少于 500 KB 的格式。
我知道如何使用预览应用程序一次处理一张图像;但我希望能够批量执行相同的操作,即同时处理多个文件。是否有命令行方式来执行此操作,以便我可以编写脚本并在终端中 运行 它?
或者我可以使用的其他方式?
这是一个命令行示例,使用 convert (brew info imagemagick
) 将一个目录中的所有 *.jpg
图像转换为 .png
:
$ for i in *.jpg; do
convert "$i" "${i%.jpg}.png"
done
要在 (dry-运行) 之前进行测试,您可以使用 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
The main difference is that ‘convert‘ tends to be for working on individual images, whereas ‘mogrify‘ is for batch processing multiple files.
安装ImageMagick. (Really.. it's lightweight and amazing) It's nice to install using Homebrew。那么...
- 打开终端。
cd [FilepathWithImages] && mogrify -define jpeg:extent=60kb -resize 400 *.JPG
- 等到该过程完成(如果您有很多图像,可能需要几分钟)
- 要检查文件大小,请尝试
du -sh *
查看您所在目录中每个文件的大小。
注意:*.JPG
必须大写才能生效
这是如何工作的:
cd [yourfilepath]
将导航到您想要进入的目录
&&
用于链接命令
mogrify
当你想保持相同的文件名时使用
-define jpeg:extent=60kb
将最大文件大小设置为 60kb
-resize 400
将设置宽度
*.JPG
适用于您所在目录中的所有文件。
还有许多其他命令可用于 imagemagick convert 和 mogrify。安装后,您可以使用 man mogrify
查看可以链接到它的命令。
根据the docs、"Restrict the maximum JPEG file size, for example -define jpeg:extent=400KB
. The JPEG encoder will search for the highest compression quality level that results in an output file that does not exceed the value. The -quality
option also will be respected starting with version 6.9.2-5. Between 6.9.1-0 and 6.9.2-4, add -quality 100
in order for the jpeg:extent
to work properly. Prior to 6.9.1-0, the -quality
setting was ignored."
从 Homebrew 或 MacPorts 或 https://imagemagick.org/script/download.php#macosx 安装 ImageMagick。然后使用 mogrify 处理文件夹中的所有文件,使用 -define jpeg:extent=500KB 保存为 JPG.
我的桌面文件夹 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。
免责声明:请小心,因为以下解决方案是 "DESTRUCTIVE" 命令,文件被直接替换为较低质量
既然您已经阅读了我的免责声明,我建议您获取 cwebp that you can download here。
您还需要并行 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
我在 Mac 上有一个 .JPG 文件列表。我想将它们导出为每张图像占用少于 500 KB 的格式。 我知道如何使用预览应用程序一次处理一张图像;但我希望能够批量执行相同的操作,即同时处理多个文件。是否有命令行方式来执行此操作,以便我可以编写脚本并在终端中 运行 它? 或者我可以使用的其他方式?
这是一个命令行示例,使用 convert (brew info imagemagick
) 将一个目录中的所有 *.jpg
图像转换为 .png
:
$ for i in *.jpg; do
convert "$i" "${i%.jpg}.png"
done
要在 (dry-运行) 之前进行测试,您可以使用 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
The main difference is that ‘convert‘ tends to be for working on individual images, whereas ‘mogrify‘ is for batch processing multiple files.
安装ImageMagick. (Really.. it's lightweight and amazing) It's nice to install using Homebrew。那么...
- 打开终端。
cd [FilepathWithImages] && mogrify -define jpeg:extent=60kb -resize 400 *.JPG
- 等到该过程完成(如果您有很多图像,可能需要几分钟)
- 要检查文件大小,请尝试
du -sh *
查看您所在目录中每个文件的大小。
注意:*.JPG
必须大写才能生效
这是如何工作的:
cd [yourfilepath]
将导航到您想要进入的目录
&&
用于链接命令
mogrify
当你想保持相同的文件名时使用
-define jpeg:extent=60kb
将最大文件大小设置为 60kb
-resize 400
将设置宽度
*.JPG
适用于您所在目录中的所有文件。
还有许多其他命令可用于 imagemagick convert 和 mogrify。安装后,您可以使用 man mogrify
查看可以链接到它的命令。
根据the docs、"Restrict the maximum JPEG file size, for example -define jpeg:extent=400KB
. The JPEG encoder will search for the highest compression quality level that results in an output file that does not exceed the value. The -quality
option also will be respected starting with version 6.9.2-5. Between 6.9.1-0 and 6.9.2-4, add -quality 100
in order for the jpeg:extent
to work properly. Prior to 6.9.1-0, the -quality
setting was ignored."
从 Homebrew 或 MacPorts 或 https://imagemagick.org/script/download.php#macosx 安装 ImageMagick。然后使用 mogrify 处理文件夹中的所有文件,使用 -define jpeg:extent=500KB 保存为 JPG.
我的桌面文件夹 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。
免责声明:请小心,因为以下解决方案是 "DESTRUCTIVE" 命令,文件被直接替换为较低质量
既然您已经阅读了我的免责声明,我建议您获取 cwebp that you can download here。
您还需要并行 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