用自动化脚本批量转换图片为WebP格式,新手也能轻松上手

如果你有一堆图片要转为WebP格式,用自动化脚本一次性完成比手动一张张转快得多。
本文给出一个可以直接执行的bash脚本,配合cwebp工具,能在Linux服务器上批量处理整个文件夹,并保留目录结构。
整个过程对新手也很友好,照着命令行粘贴即可。

为什么要用WebP?

WebP是Google推出的图片格式,相同画质下文件体积比JPEG小20%-30%,比PNG更省75%以上。
对于网站加速来说,转换后图片能显著减少带宽消耗和加载时间。
如果你用的是云服务器(比如泽御云提供的Linux实例),直接在服务器上跑脚本转换,再替换原图,是最省事的方式。

准备条件:安装cwebp

大部分Linux发行版自带libwebp工具包中的cwebp转换命令。
如果没装,执行以下命令:

# Ubuntu/Debian
sudo apt update && sudo apt install webp -y

# CentOS/RHEL 7+ (需要EPEL)
sudo yum install epel-release -y && sudo yum install libwebp-tools -y

装完后输入 cwebp -version 验证,看到版本号代表成功。
如果系统没有包管理器,也可以去Google官方下载编译好的二进制文件,这里不展开。

核心步骤:编写批量转换脚本

创建一个文件,比如 batch_webp.sh,内容如下:

#!/bin/bash
# 批量转换图片为WebP格式,保留原目录结构

SRC_DIR="./images"            # 源图片目录
DEST_DIR="./images_webp"      # 输出目录
QUALITY=80                     # 质量参数(0-100),越大图片质量越好

# 创建目标目录(如果不存在)
mkdir -p "$DEST_DIR"

# 查找所有常见图片格式(可自行扩展)
find "$SRC_DIR" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" \) | while read file; do
    # 获取相对路径并替换后缀为.webp
    rel_path="${file#$SRC_DIR/}"
    dir_name="$(dirname "$rel_path")"
    base_name="$(basename "$file")"
    no_ext="${base_name%.*}"
    output_dir="$DEST_DIR/$dir_name"
    output_file="$output_dir/${no_ext}.webp"

    # 创建子目录
    mkdir -p "$output_dir"

    # 执行转换
    cwebp -q "$QUALITY" "$file" -o "$output_file"

    echo "已转换: $file -> $output_file"
done

echo "全部转换完成!"

使用步骤:

  1. 将脚本保存后,通过 chmod +x batch_webp.sh 赋予执行权限。
  2. 修改脚本顶部的 SRC_DIRDEST_DIR 为你自己的路径。
  3. 在终端运行 ./batch_webp.sh
  4. 等待脚本执行完毕,检查 DEST_DIR 下的结果。

脚本的核心逻辑是:用 find 找出源目录下的所有图片文件,然后用 cwebp 逐张转换,并保持原目录结构。
你也可以根据自己的需求调整 QUALITY 值——80是平衡体积和质量的常用值,如果对画质要求不高,可以降到70或60。

避坑指南:新手最容易遇到的问题

  • 文件名含空格或特殊符号:脚本中已经用双引号包裹变量,避免分割错误。如果仍有问题,可以给文件名加转义。
  • 找不到cwebp命令:未安装或安装路径不在PATH,检查是否装了对的包。
  • 转换后图片尺寸异常:某些WebP预览软件对透明通道支持不佳,但浏览器中正常。不需要担心。
  • 内存不足:如果图片非常大(如几十MB),建议分批次或调低线程数(cwebp不支持多线程,可以用xargs -P并行)。
  • 覆盖原图:脚本输出到独立目录,不会覆盖原图,放心使用。如果想直接覆盖,可以自行修改输出路径为原路径,但建议先备份。

效果验证:对比文件大小和画质

转换完成后,用 ls -lh 对比原图和WebP文件:

# 在源目录和输出目录分别执行
ls -lh ./images/some.jpg
ls -lh ./images_webp/some.webp

通常WebP体积会小30%-60%。
你也可以打开两张图片,肉眼对比画质,在80质量下几乎看不出差异。
如果需要更严格的验证,可以用ImageMagick的 compare 命令,但新手不必深究。

常见问题解答

问题1:脚本能处理GIF动图吗?
可以,但cwebp只转换第一帧为静态WebP。要保留动画,需要使用gif2webp命令(同样来自libwebp工具),脚本中替换为 gif2webp 即可。

问题2:转换速度太慢怎么办?
如果图片数量极多,可以使用GNU parallel或xargs并行处理。例如将最后的 while read 改成 find ... | xargs -P4 -I{} sh -c 'cwebp ...',但需要小心变量传递。新手建议单线程慢慢跑,不会出错。

问题3:Windows服务器能用吗?
本文脚本基于bash,Windows需要WSL、Git Bash或Cygwin环境。或者可以使用PowerShell版脚本,原理类似,但cwebp需在Windows下编译。推荐直接在Linux云服务器(如泽御云)上操作。

问题4:如何只转换某天的新增图片?
可以结合 find-mtime-newer 参数。例如只转换24小时内修改过的图片:find "$SRC_DIR" -type f -mtime -1 ...,其余逻辑不变。

总结

通过一个简单的bash脚本配合cwebp工具,就能快速完成图片批量转换WebP。
整个过程不需要复杂软件,只需一行安装命令加一段脚本。
如果你是一名站长或运维,建议将转换脚本加入定时任务(crontab),每天扫描并转换新图片,实现自动化。
遇到问题先回看“避坑指南”部分,大部分情况都能解决。

分享到:
上一篇
数据库分库分表存储百万级跨境商品数据
下一篇
Nginx完整多域名配置搭建多语言外贸站点
1
系统公告

机房迁移升级通知

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