图片WebP批量转换自动化脚本节省海外带宽

海外独立站或轻量应用服务器最头疼的问题之一就是图片流量:一张未压缩的PNG可能几百KB,访客每次翻页都要完整下载,月底看到带宽账单才后悔。
把图片批量转成WebP格式可以显著缩小体积,通常能减少 30%~70% 的传输量。
本文用一套可自动执行的Shell脚本,带你在Linux服务器上完成从图片扫描、转换到输出验证的完整流程,全程不需要手动拖拽处理,适合零基础用户照做。

先确认服务器环境:装好转换核心工具

转换的核心工具是 Google 开源的 cwebp,它包含在 webp 软件包中。
在 Debian/Ubuntu 系统上执行:

sudo apt update
sudo apt install -y webp

在 CentOS/Rocky/Alibaba Cloud Linux 上执行:

sudo yum install -y libwebp-tools

装好后输入 cwebp -version,能输出版本号就代表环境就绪。
如果提示找不到命令,检查一下是否使用了与系统匹配的包管理器,或者用宝塔面板的“软件商店”搜索安装。

自动扫描图片:按目录批量转换并保留原图

脚本逻辑很简单:用 find 找出指定目录下所有 .jpg.jpeg.png 文件,再逐张调用 cwebp 转成 .webp
为了避免误操作,建议先复制原始文件到新目录再转换,或者指定输出目录。

创建脚本文件 convert_webp.sh

#!/bin/bash
# 将 /www/wwwroot/example.com/wp-content/uploads 下的图片批量转成 WebP
SOURCE_DIR="/www/wwwroot/example.com/wp-content/uploads"
OUTPUT_DIR="/www/wwwroot/example.com/webp_output"
QUALITY=80

mkdir -p "$OUTPUT_DIR"

find "$SOURCE_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read -r img; do
    # 获取相对路径,保持目录结构
    rel_path="${img#$SOURCE_DIR/}"
    dest="$OUTPUT_DIR/${rel_path%.*}.webp"
    mkdir -p "$(dirname "$dest")"
    cwebp -q "$QUALITY" "$img" -o "$dest"
done

echo "转换完成,输出目录:$OUTPUT_DIR"

保存后赋予执行权限并运行:

chmod +x convert_webp.sh
./convert_webp.sh

如果图片数量特别多(比如上万张),建议配合 screentmux 在后台运行,避免 SSH 断开导致任务中断。

把任务交给Crontab:定时自动处理新增图片

手动跑一次还不够,之后上传的新图片也需要自动转换。
把脚本放入定时任务,每分钟检查一次即可。
执行 crontab -e 添加:

* * * * * /root/convert_webp.sh >> /var/log/webp_convert.log 2>&1

这样脚本每分钟扫描一次,只对尚未生成 WebP 的文件执行转换。
为避免重复处理,可以在脚本开头加一个判断:如果目标 .webp 已存在且源文件更旧,就跳过。
例如:

if [ -f "$dest" ] && [ "$img" -ot "$dest" ]; then
    continue
fi

修改后完整脚本会更稳妥,也适合长时间运行。

避坑说明:别让转换后的图片反而变慢

很多新手容易踩几个坑,这里提前列出来:

  • 不要过度压缩-q 参数建议设置在 75~85 之间。低于 60 时,文字和渐变背景会出现明显色块。
  • PNG 透明通道cwebp 默认支持透明,但如果源图带 Alpha 通道,请尽量保持原尺寸,避免额外缩放。
  • 目录权限:脚本执行用户必须对 $SOURCE_DIR 有读取权限,对 $OUTPUT_DIR 有写入权限,否则会遇到 Permission denied
  • 原图保留:转换后不要把原始图片立即删除,先确认 WebP 在浏览器和 CDN 上都显示正常再清理。
  • CDN 缓存问题:如果站点接了 CDN,WebP 路径和原图路径不同,需要先在 CDN 后台刷新缓存,否则访客可能仍然命中旧的图片版本。

如何验证是否真的节省了带宽

打开输出目录,用 ls -lh 对比原图和 WebP 的体积:

ls -lh /www/wwwroot/example.com/webp_output/sample.webp
ls -lh /www/wwwroot/example.com/wp-content/uploads/sample.png

通常能明显看到体积下降。
更严谨的做法是在网页层面验证:用浏览器开发者工具的 Network 面板,勾选 “Disable cache” 后刷新页面,查看图片请求的 Transfer Size 合计值。
如果站点已启用 WebP 访问,这个数值会比之前低不少。

如果你用的是 Nginx,还可以在 location ~* \.(jpg|png)$ 中加一段 try_files 规则,当同名 .webp 存在时直接输出 WebP 文件,让浏览器无需修改任何图片标签就能生效。
不过这一步涉及更复杂的配置,建议先跑通基础脚本,再根据实际需求做进一步优化。

遇到转换失败时,优先检查脚本中的 SOURCE_DIR 路径是否存在、cwebp 是否安装成功,以及日志文件 /var/log/webp_convert.log 中的错误信息。
按照上述步骤操作,海外站点的图片流量很快就能看到明显下降。

分享到:
上一篇
FRP多隧道分流AI中转、NAS存储、站点后台访问
下一篇
数据库读写分离部署高并发外贸商城完整方案
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意