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

图片越多,网站带宽压力越大。
把图片批量转换成 WebP 格式,通常能在画质几乎不变的情况下减小 30%-70% 体积,从而显著节省带宽和存储成本。
本文面向零基础用户,直接用一套自动化脚本完成批量转换,并讲清楚如何配置、排错和验证结果,适合图片站、图床、商城网站或任何图片较多且带宽紧张的服务器场景。

WebP 为什么能省带宽

WebP 是 Google 推出的图片格式,同等画质下体积比 JPG、PNG 更小。
对网页来说,图片体积减小,用户加载页面的流量就少,服务器的出网带宽占用也跟着下降。
尤其当网站有大量商品图、文章配图或相册时,把图片转换为 WebP 往往是成本最低、见效最快的优化手段。

你不需要改图片显示位置,只要把文件格式换掉,再让网页指向新文件即可。
如果配合 Nginx 的 try_files 规则或前端 标签,还能实现「支持 WebP 的浏览器显示 WebP,不支持的就回落原格式」。
不过本文先解决最核心的批量转换问题。

第一步:准备环境并安装转换工具

操作前请确认你的服务器是 Linux 系统,最好有 root 或 sudo 权限。
网站面板(如宝塔)用户可以在终端中执行以下命令,不影响面板使用。

Debian/Ubuntu 系统执行:

sudo apt update
sudo apt install webp

CentOS/RHEL 系统执行:

sudo yum install libwebp-tools

装好后验证一下:

cwebp -version

如果能输出版本号,说明工具可用了。cwebp 就是负责把 JPG/PNG 转成 WebP 的命令行工具。

第二步:编写批量转换脚本

新建一个脚本文件,例如 /root/convert_webp.sh

vim /root/convert_webp.sh

粘贴以下内容,注意把 SRC_DIR 换成你网站图片所在的真实目录:

#!/bin/bash
# 批量将 JPG/JPEG/PNG 转换为 WebP,已转换的文件自动跳过
SRC_DIR="/www/wwwroot/example.com/images"
QUALITY=80

find "$SRC_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read img; do
  out="${img%.*}.webp"
  if [ ! -f "$out" ]; then
    cwebp -q "$QUALITY" "$img" -o "$out" && echo "已转换: $img"
  fi
done

-q 80 表示质量 80,这是兼顾画质与体积的常用值。
保存后给脚本加执行权限:

chmod +x /root/convert_webp.sh

先手动跑一次看看效果:

bash /root/convert_webp.sh

正常会逐行显示“已转换: 图片路径”。
如果提示 cwebp: command not found,说明工具没装成功,回到第一步检查安装命令是否有报错。

第三步:设置定时任务,实现全自动转换

图片是不断新增的,手动跑不是长久之计。
用 crontab 定时执行脚本即可。
执行:

crontab -e

如果第一次使用,会提示选择编辑器,选 nanovim 都行。
在文件末尾加一行:

0 * * * * /root/convert_webp.sh >/dev/null 2>&1

这行意思是在每小时的第 0 分钟自动执行一次转换脚本,错误信息不输出,避免日志刷屏。
保存后,定时任务就生效了。

如果你的服务器上已经部署了 CDN 或对象存储,还可以把脚本中的路径换成挂载目录,这样每次新增图片都会在源站自动生成 WebP 文件,CDN 回源时就能直接拿到新格式。

避坑要点:这几件事不注意容易出问题

别急着删原图。 转换完成后先确认 WebP 文件能正常访问,再把原图移动到备份目录,不要立即删除。
部分老旧浏览器或个别图片插件对 WebP 支持不好,原图留着可以做兜底。

检查图片路径是否一致。 脚本生成的新文件放在原图同目录,文件名相同、后缀是 .webp
如果你的网站代码写死了 .jpg 后缀,需要手动改网页模板,或者用 Nginx rewrite 规则自动指向 WebP。

质量参数别盲目拉满。 很多人以为质量越高越好,其实 -q 90 以上体积降幅明显变小,画质也很难感知。
建议用 75-85,优先保证体积收益。

图片量大时分批跑。 几万张图片一次性转换会拉高 CPU 和磁盘 IO,可能导致网站响应变慢。
可以在脚本里加上 find-mtime 参数只处理近期新增图片,或者一次只处理一个子目录。

WebP 显示空白? 先检查服务器 MIME 类型是否正确。
Nginx 环境下在站点配置中加入:

location ~*\.webp$ {
    add_header Content-Type image/webp;
}

如果是 Apache,可以在 .htaccess 中添加 AddType image/webp .webp

怎么验证带宽确实省了

转换完成后,用 ls -lh 对比同一张图片的 JPG 和 WebP 大小:

ls -lh /www/wwwroot/example.com/images/

通常 WebP 文件会比原图小一半以上。
想统计整个目录总体积变化,可以执行:

du -sh /www/wwwroot/example.com/images/

转换前后各记一次数字,差值就是节省下来的存储空间。
而带宽层面的效果,建议观察一周的服务器出网流量,或者 CDN 的流量报表。
如果图片请求量稳定,流量下降 20%-50% 都很正常。

另外,在浏览器开发者工具的 Network 面板里刷新页面,找到图片请求,也能直接看到传输大小。
配合浏览器插件开启“强制 WebP”后,还能对比两种格式的加载耗时。

如果你正在处理自动化脚本批量转换图片 WebP 节省带宽这件事,建议先按本文步骤完整执行,再根据自己的环境做微调。
遇到图片不显示、脚本报错或定时任务不执行时,优先回看上面的避坑部分,大部分问题都出在路径、权限或 MIME 配置上。
批量转换确实能让网站变轻,但前提是每步都验证到位。

分享到:
上一篇
WooCommerce外贸商城多币种支付完整配置
下一篇
宝塔自动化脚本一键升级修复Nginx CVE漏洞完整教程
1
系统公告

机房迁移升级通知

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