You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效压缩数百万张JPG图片?并行处理加速转换的实现方案

MacOS下JPG图片批量并行压缩提速方案

推荐方案:使用GNU Parallel(最省心,性能最优)

GNU Parallel是专门用来并行执行命令行任务的工具,会自动根据CPU核心数控制并发量,还能处理带特殊字符、空格的文件名,非常适合百万级文件的场景:

  1. 先安装工具:brew install parallel
  2. 全量压缩命令(避开参数列表过长问题):
    find . -maxdepth 1 -type f -name "*.jpg" -print0 | parallel -0 convert {} -quality 80% {}
    
    • 可以加-j 数字参数手动指定并行任务数,比如-j 12就是同时跑12个压缩任务,默认和CPU核心数一致
    • 如果要处理子目录里的JPG,删掉-maxdepth 1参数即可

原生Bash实现方案(不需要装额外工具)

如果你不想安装第三方工具,可以用Bash自带的后台任务+并发数控制实现,要求Bash版本不低于4.3:

#!/bin/bash
# 取当前设备CPU核心数作为最大并行任务数
max_concurrent=$(sysctl -n hw.ncpu)
task_count=0

for img in *.jpg; do
    convert "$img" -quality 80% "$img" &
    ((task_count++))
    # 达到并发上限后等待任意一个任务完成再继续
    if (( task_count >= max_concurrent )); then
        wait -n
        ((task_count--))
    fi
done
# 等待所有剩余任务执行完毕
wait

注意:百万级文件场景下不要直接用*.jpg匹配,会触发参数列表过长错误,同样换成find输出文件列表的方式读取即可

额外性能优化技巧

想要更快的压缩速度和更好的压缩比,可以替换默认的ImageMagick编码器为mozjpeg:

  1. 安装mozjpeg:brew install mozjpeg
  2. 把上面命令里的convert {} -quality 80% {}替换为djpeg {} | cjpeg -quality 80 -outfile {}即可,同等画质下压缩率更高,速度也比默认convert快20%以上

重要注意事项

  • 跑全量压缩前一定要先备份原文件,或者先抽几十张测试压缩效果符合预期再全量执行
  • 如果图片存在外接机械硬盘里,不要把并发数开太高,IO带宽会成为瓶颈,反而会拖慢整体速度,建议并发数设为CPU核心数的1/2即可

内容的提问来源于stack exchange,提问作者mmz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:54:05