开发提效- Cwebp 一键将图片转化为webp格式

一、Cwebp 相关参数说明

cwebp [options] input_file -o output_file.webp

说明

cwebp 使用 WebP 格式压缩图片。输入格式可以是 PNG、JPEG、TIFF、WebP 或原始 Y'CbCr 样本。 注意:不支持 PNG 和 WebP 动画文件。

二、选项

基本选项包括:

-o string

指定输出 WebP 文件的名称。如果省略,cwebp 将执行 压缩,但只报告统计信息。 使用"-"作为输出名称将会将输出定向到"stdout"。

-- string

明确指定输入文件。如果输入文件以"-"开头,此选项会很有用。此选项必须显示 last。之后的任何其他选项都会被忽略。

-h, -help

简短的使用情况摘要。

-H, -longhelp

所有可能选项的摘要。

-version

输出版本号(格式为 major.minor.revision)并退出。

-lossless

编码图片,不会造成任何损失。对于包含完全透明区域的图片,只有使用 -exact 选项时,不可见的像素值 (R/G/B 或 Y/U/V) 才会保留。

-near_lossless int

指定近乎无损图片预处理的级别。此选项会调整像素值以提高压缩率,但对视觉质量的影响微乎其微。它会自动触发无损压缩模式。范围为 0(最大预处理)到 100(无预处理,默认值)。一般值约为 60。请注意,-q 100 有损 有时可能会带来更好的效果。

-q float

指定 RGB 通道的压缩系数,介于 0100 之间。默认值为 75

如果是有损压缩(默认),较小的系数会产生较小的 质量较低的文件使用值 100 可实现最佳画质。

对于无损压缩(由 -lossless 选项指定), 较小的系数可以加快压缩速度,但生成的文件较大。 通过使用值 100,可以实现最大压缩。

-z int

开启 lossless 压缩模式,并指定级别(介于 0 到 9 之间),其中级别 0 表示最快,级别 9 表示最慢。与速度较慢的模式相比,快速模式生成的文件大小更大。建议采用 -z 6 作为默认值。 此选项实际上是质量和方法的一些预定义设置的快捷方式。如果随后使用选项 -q-m,它们将使此选项失效。

-alpha_q int

指定介于 0100 之间的 Alpha 压缩压缩系数。使用值 100 可实现对 alpha 的无损压缩,而较低的值会导致有损压缩。默认值为 100

-preset string

指定一组预定义参数,以适应特定类型的源材料。可能的值包括:defaultphotopicturedrawingicontext

由于 -preset 会覆盖其他参数的值(-q 除外),因此此选项应优先按参数顺序显示。

-m int

指定要使用的压缩方法。此参数用于控制 编码速度与压缩文件大小和质量之间的差距。 可能的值范围为 06。默认值为 4。 较高时 那么编码器会花更多时间检查 编码可能性并决定质量增益。较小的值可以 但处理速度较快,但文件较大和 降低压缩质量。

-crop x_position y_position width height

将来源剪裁为左上角位于坐标处的矩形 (x_positiony_position),尺寸为 width x height。此剪裁 必须完全包含在源矩形内。注意:剪裁会在任何缩放之前应用。

-resize width height

将源大小调整为大小为 width x height 的矩形。如果其中任一情况 (但不是两者)宽度或高度参数为 0,则值将 保留宽高比值。注意:缩放是在应用时间之后 剪裁。

-mt

如有可能,请使用多线程进行编码。

-low_memory

通过将四倍于压缩后压缩文件的大小 尺寸(通常)。这会减慢编码速度 在大小和失真方面稍有不同此标志仅适用于方法 3 及更高版本,默认处于关闭状态。请注意,如果不启用此标志,将会对比特流产生一些副作用:它会强制使用某些比特流功能,例如分区数量(强制设为 1)。请注意,使用此选项时,cwebp 会输出比特流大小的更详细报告。

有损选项

这些选项仅在进行有损编码(默认 或不使用 alpha 值)。

-size int

指定要尝试为压缩包覆盖的目标大小(以字节为单位) 输出。压缩器将进行多次部分编码,以尽可能接近此目标。如果同时使用 -size-psnr,则 -size 值将优先。

-psnr float

指定要尝试达到压缩输出的目标 PSNR(以 dB 为单位)。 压缩器将进行多次部分编码,以尽可能接近此目标。如果同时使用 -size-psnr,则 -size 值将优先。

-pass int

设置选项 -size-psnr 在二分法期间要使用的最大传递次数。最大值为 10,默认值为 1。如果选项 使用了 -size-psnr,但未指定 -pass(默认值) /"6"卡券。如果指定了 -pass,但未指定 -size-psnr,则将使用 40dB 的目标 PSNR。

-af

开启自动过滤功能。此算法将花费更多时间进行优化 过滤强度以达到平衡的质量。

-jpeg_like

更改了内部参数映射,以更好地匹配 JPEG 压缩的预期大小。此标志通常会生成 尺寸与其等效的 JPEG 类似(对于相同的 -q 设置),但使用 减少视觉失真

高级选项:

-f int

指定去块滤波器的强度,介于 0(不滤波)之间 和 100(最大过滤)。值为 0 会关闭所有过滤。值越高,在解码图片后应用的滤除流程的强度就越大。值越高,图片看起来越流畅。典型值通常介于 2050 之间。

-sharpness int

指定滤镜的锐度(如果使用)。范围为 0(最锐利)到 7(最不锐利)。默认值为 0

-strong

使用强效过滤(如果由于 -f 选项而使用过滤)。强力过滤功能默认处于开启状态。

-nostrong

停用强效过滤(如果使用了 -f 的过滤功能) 选项),并改用简单的过滤。

-sharp_yuv

使用更准确、更清晰的 RGB 向 YUV 转换。请注意,此过程的速度比默认的"快速"RGB 转换为 YUV 慢。

-sns int

指定空间噪声形状的振幅。空间噪声形状调整 (简称 sns)是指内置算法的常规集合 用于确定图片的哪个区域应该使用相对较少的位, 以及在哪里能更好地传输这些位可能的范围为 0(算法处于关闭状态)到 100(最大效果)。默认值为 50

-segments int

更改在 sns 算法分段期间要使用的分区数量。细分应介于 14 之间。默认值为 4。 除非使用 -low_memory,否则此选项对方法 3 及更高版本没有影响。

-partition_limit int

通过限制某些宏块使用的位数来降低画质。范围介于 0(无降级,默认值)和 100(完全降级)之间。对于中等大的图片,有用的值通常为 30-70 左右。在 VP8 格式中,所谓的控制分区上限为 512k,用于存储以下信息:是否跳过宏块、它属于哪个分块、它是编码为内部 4x4 模式还是内部 16x16 模式,以及最后要为每个子块使用的预测模式。对于非常大的图片,512k 只会为每个 16x16 宏块留出几个位。绝对最小值为每个宏块 4 位。跳过、分段和模式信息可能会占用这 4 位中的几乎所有位(尽管这种情况不太可能),这对于非常大的图片来说会造成问题。partition_limit 系数用于控制使用最耗位模式(4x4 内)的频率。如果达到 512k 的限制并显示以下消息,此操作会很有用:错误代码:6 (PARTITION0_OVERFLOW: Partition #0 is too big to fit 512k)。如果使用 -partition_limit 不足以满足 512k 的限制,则应使用较少的片段,以便为每个宏块节省更多标头位。请参阅 -segments 选项。请注意,-m-q 选项也会影响编码器的决策和达到此限制的能力。

日志记录选项

这些选项用于控制输出级别:

-v

输出额外信息(特别是编码时间)。

-print_psnr

计算并报告平均 PSNR(峰值信噪比)。

-print_ssim

计算并报告平均 SSIM(结构相似性指标,如需了解详情,请参阅 https://en.wikipedia.org/wiki/SSIM)。

-print_lsim

计算并报告局部相似性指标(相邻像素邻居之间最低误差之和)。

-progress

以百分比报告编码进度。

-quiet

不输出任何内容。

-short

仅出于测试目的输出简要信息(输出文件大小和 PSNR)。

-map int

输出编码信息的其他 ASCII 映射。可能的地图值范围为 16。这仅用于帮助调试。

其他选项

更多高级选项包括:

-s width height

指定输入文件实际包含原始 Y'CbCr 样本 ITU-R BT.601 建议,采用 4:2:0 线性格式。亮度平面大小为 width x height

-pre int

指定一些预处理步骤。使用值 2 将会触发 RGBA->YUVA 转换期间依赖于质量的伪随机抖动 (仅限有损压缩)。

-alpha_filter string

为 Alpha 平面指定预测过滤方法。nonefastbest 之一,复杂性和速度依次递增。默认值为 fast。在内部,系统使用四种可能的预测(无、水平、垂直、梯度)执行 Alpha 滤除。best 模式会依次尝试每种模式,并从中选择 。fast 模式只会尝试形成先验性猜测,而不会测试所有模式。

-alpha_method int

指定用于 Alpha 压缩的算法:01。算法 0 表示不压缩,1 使用 WebP 无损格式进行压缩。 默认值为 1

-exact

保留透明区域中的 RGB 值。默认为关闭 可压缩性。

-blend_alpha int

此选项会使用 以十六进制形式指定为 0xrrggbb 的背景颜色。之后,Alpha 通道会重置为不透明值 255

-noalpha

使用此选项将舍弃 Alpha 通道。

-hint string

指定有关输入图片类型的提示。可能的值包括:photopicturegraph

-metadata string

要从输入复制到输出的元数据(如果有)的逗号分隔列表。有效值:allnoneexificcxmp。默认值为 none

请注意,每种输入格式可能并不支持所有组合。

-noasm

停用所有汇编优化。

错误

示例

复制代码
cwebp -q 50 -lossless picture.png -o picture_lossless.webp
cwebp -q 70 picture_with_alpha.png -o picture_with_alpha.webp
cwebp -sns 70 -f 50 -size 60000 picture.png -o picture.webp
cwebp -o picture.webp -- ---picture.png

三、shell 脚本一键转化webp

bash 复制代码
#!/bin/bash


read -p "Please enter the path of the file you want to convert: " input_dir

if [ ! -d "$input_dir" ]; then
    echo "Error: The directory '$input_dir' does not exist."
    exit 1
fi

read -p "Please enter the webp file path you want to save: " output_dir

if [ ! -d "$output_dir" ]; then
    echo "Error: The directory '$output_dir' does not exist."
    exit 1
fi
# 检查 cwebp 是否安装
if ! command -v cwebp &> /dev/null; then
    echo "Error: cwebp is not installed. Please install it first."
    exit 1
fi

# 创建输出文件夹
mkdir -p "$output_dir"

find "$input_dir" -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" \) | while read -r img; do
    filename=$(basename "$img")
    output_file="$output_dir/${filename%.*}.webp"
    cwebp  -q 10  "$img" -o "$output_file"
    if [ $? -eq 0 ]; then
        echo "Converted: $img -> $output_file"
    else
        echo "Failed to convert: $img"
    fi
done

echo "All images have been converted to WebP format and saved in $output_dir."
相关推荐
江畔柳前堤18 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术18 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客18 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术19 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO20 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术20 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架20 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab20 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI20 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
冬奇Lab21 小时前
【无标题】
人工智能·开源