图片WebP批量转换脚本降低带宽占用

为什么要用WebP批量转换脚本

网站图片体积过大是带宽占用高的主要原因之一。
WebP格式相比JPEG/PNG能压缩30%-80%的文件大小,且不影响显示质量。
手动一张张转换效率太低,批量转换脚本可以一次性处理整个文件夹的图片,既省时间又降低服务器压力。

脚本运行前需要准备这些

  • 一台Linux服务器(本文以CentOS 7+ / Ubuntu 20.04+为例)
  • 安装cwebp工具(Google官方WebP编码器)
  • 存放原图的目标文件夹(建议提前备份)

安装cwebp命令(根据系统选一条执行):

# CentOS / Rocky Linux
yum install -y libwebp-tools

# Ubuntu / Debian
apt-get install -y webp

安装后执行 cwebp -version 确认正常显示版本号。

一键批量转换脚本的完整代码与使用说明

以下脚本会遍历 /data/images/ 下的所有 .jpg.png 文件,在同目录生成同名 .webp 文件,并保留原图(可选)。

创建脚本文件:

nano /opt/batch2webp.sh

粘贴以下内容:

#!/bin/bash
# 图片WebP批量转换脚本 - 降低带宽占用
# 使用方法:bash /opt/batch2webp.sh

INPUT_DIR="/data/images"
QUALITY=80   # 质量参数,80通常平衡体积与画质

for file in "$INPUT_DIR"/*.{jpg,png,JPG,PNG}; do
    if [ -f "$file" ]; then
        filename=$(basename "$file")
        name="${filename%.*}"
        output="${INPUT_DIR}/${name}.webp"
        echo "转换中:$file"
        cwebp -q $QUALITY "$file" -o "$output"
    fi
done

echo "批量转换完成!"

保存退出(Ctrl+X,Y,回车)。
给脚本执行权限:

chmod +x /opt/batch2webp.sh

运行脚本:

bash /opt/batch2webp.sh

脚本会自动跳过不存在的文件,并在控制台打印进度。
转换成功后,会在同目录看到 .webp 文件。

新手最容易踩的四个坑

1. 权限不足导致脚本无法执行
运行前请确保脚本有执行权限,且输入目录可读。如果遇到 Permission denied,先检查 chmod 是否正确。

2. 原图路径包含空格
上述脚本没有处理文件名含空格的情况。如果文件名有空格,建议先用 rename 命令将空格替换为下划线,或者修改脚本使用 find 配合 while read。简单方案:先批量重命名。

find /data/images -name "*.jpg" -o -name "*.png" | while read f; do mv "$f" "$(echo $f | tr ' ' '_')"; done

3. 转换后图片无法显示在网站上
需要确认网站是否支持WebP。如果使用Nginx,可添加 location ~* \.(webp)$ { add_header Content-Type image/webp; }。如果浏览器不支持(如老版Safari),建议保留原图并通过 标签兜底。

4. 批量转换后服务器负载过高
如果图片数量很大(上千张),建议分批次运行,或加上 nice -n 19 降低优先级:

nice -n 19 bash /opt/batch2webp.sh

如何验证转换效果和带宽节省情况

  • 体积对比:查看原图和WebP文件大小,例如:
ls -lh /data/images/*.jpg /data/images/*.webp | awk '{print $5, $9}'

WebP体积通常只有原图的30%-70%。

  • 浏览器检查:按F12打开开发者工具 → Network(网络)选项卡,刷新页面,查看图片的 Content-Type 是否为 image/webp
  • 带宽占用测量:如果你有服务器流量统计(如iftop、vnstat),在访问高峰前后对比流量。或者直接看CDN/云厂商的流量报表,通常会下降明显。

常见问题解答

Q:脚本转换后原图还在,会不会占用双倍空间?
是的。脚本只生成WebP,不删除原图。如果确认所有客户端都支持WebP,可以手动删除原图,或修改脚本在转换成功后加上 rm -f "$file"。但建议做好备份后再删除。

Q:质量参数设置多少合适?
一般场景 -q 80 效果很好。如果对体积要求极高,可降为 -q 60;对画质敏感,可升到 -q 90。可以先对一张图片测试不同参数。

Q:我想保留原目录结构,把转换后的WebP放到另一个目录怎么做?
只需修改脚本中的 OUTPUT_DIR 变量,并用 mkdir -p 创建输出目录。例如:

OUTPUT_DIR="/data/webp_images"
mkdir -p "$OUTPUT_DIR"
output="${OUTPUT_DIR}/${name}.webp"

如果你正在处理图片较多的网站,建议先按本文步骤完整运行一次,看看体积下降比例,再决定是否全站切换。
遇到异常时,优先回顾避坑部分,大部分问题都能在文中找到答案。

分享到:
上一篇
数据库分库分表海量商品存储优化实战指南
下一篇
fail2ban自定义规则拦截跨境扫描IP实操指南
1
系统公告

机房迁移升级通知

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