【问题标题】:How to reduce the file size on JPEG images in batch (/Mac)?如何批量减小 JPEG 图像的文件大小(/Mac)?
【发布时间】:2018-12-01 18:19:12
【问题描述】:

我有一个 Mac 上的 .JPG 文件列表。我想将它们导出为每张图像小于 500 KB 的格式。 我知道如何使用预览应用程序一次一张图像来做到这一点;但我希望能够批量执行相同的操作,这意味着一次处理多个文件。有没有一种命令行方法可以让我编写一个脚本并在终端中运行它? 还是我可以使用的其他方式?

【问题讨论】:

  • 您想要使用的所需空间更少的输出格式是什么?在 ImageMagick 中,您可以使用 mogrify 命令在一个命令行中处理整个图像文件夹。见imagemagick.org/Usage/basics/#mogrify。如果输出也是 JPG,那么您只需在命令行中更改 -quality 值。您可以使用 Homebrew 或 MacPorts 或从 ImageMagick 二进制文件安装 ImageMagick。见imagemagick.org/script/download.php#macosx

标签: command-line jpeg batch-processing


【解决方案1】:

这是使用convert (brew info imagemagick) 将一个目录中的所有*.jpg 图像转换为.png 的命令行示例:

$ for i in *.jpg; do
convert "$i" "${i%.jpg}.png"
done

要在(试运行)之前进行测试,您可以使用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”用于批处理多个文件。

【讨论】:

    【解决方案2】:

    安装ImageMagick。 (真的.. 它轻巧而神奇)使用Homebrew 安装非常好。那么……

    1. 打开终端。
    2. cd [FilepathWithImages] && mogrify -define jpeg:extent=60kb -resize 400 *.JPG
    3. 等到该过程完成(如果您有很多图像,可能需要几分钟)
    4. 要检查文件大小,请尝试du -sh * 查看您所在目录中每个文件的大小。

    注意:*.JPG 必须为大写才能正常工作

    这是如何工作的:
    cd [yourfilepath] 将导航到您想要进入的目录
    && 用于链接命令
    mogrify 用于当您想要保持相同的文件名时
    -define jpeg:extent=60kb 将最大文件大小设置为 60kb
    -resize 400 将设置宽度
    *.JPG 适用于您所在目录中的所有文件。

    还有许多其他命令可以与 imagemagick convert 和 mogrify 一起使用。安装后,您可以使用man mogrify 查看可以链接到它的命令。

    根据the docs,“限制最大JPEG文件大小,例如-define jpeg:extent=400KB。JPEG编码器将搜索导致输出文件不超过该值的最高压缩质量级别。@987654335 @ 选项也将从版本 6.9.2-5 开始受到尊重。在 6.9.1-0 和 6.9.2-4 之间,添加 -quality 100 以使 jpeg:extent 正常工作。在 6.9.1-0 之前,-quality 设置被忽略。"

    【讨论】:

      【解决方案3】:

      从 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。

      【讨论】:

        【解决方案4】:

        免责声明:请小心,因为以下解决方案是“破坏性”命令,文件会直接替换为质量较低的文件

        既然您已经阅读了我的免责声明,我建议您获取cwebp,您可以下载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
        

        【讨论】:

          猜你喜欢
          • 2012-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-20
          • 1970-01-01
          • 2012-06-19
          相关资源
          最近更新 更多