图片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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意