批量转WebP/WebM小工具

关于图片

博客搭建过程中, 涉及图片的加载, 可能会遇到

  1. 来源海外站点, 国内访问失败
  2. 图片本身较大, CDN带宽又不够

第一种就需要CDN了, 目前处理第二种图片稍较大问题, 网络存储图片一般都是用webp格式, 体积小
较多这种转换webp软件还收费, 简单功能有点没必要

Mac

cwebp, 支持多种格式, WebP, JPEG, PNG, PNM (PGM, PPM, PAM), TIFF

借助工具, 写了个脚本

默认压缩质量75(0~100), 直接执行

$ ./当前脚本.sh 目录名/
#!/bin/sh
clear

function cwebp_files 
{
    folder="$1"
    prefix="$2"
    extension="$3"

    # 检查文件个数
    count=`ls -1 "$folder"/"$prefix"*"$extension" 2>/dev/null | wc -l`
    printf "  扩展"$extension"文件个数: $count \n"
    if [ $count != 0 ]; then
        # 执行处理
        for f in "$folder"/"$prefix"*"$extension"
        do
            printf "  $f\n"
            # cwebp -vmt -q 90 $f -o "$(dirname -- "$f")/$(basename -- "$f" .jpg).webp"
            # cwebp -v -mt -q 90 $f -o ${f%.*}.webp
            cwebp $f -q 75 -o ${f%.*}.webp -quiet
        done
    fi
}

function gif2webp_files 
{
    folder="$1"
    prefix="$2"
    extension=".gif"

    # 检查文件个数
    count=`ls -1 "$folder"/"$prefix"*"$extension" 2>/dev/null | wc -l`
    printf "  扩展"$extension"文件个数: $count \n"
    if [ $count != 0 ]; then
        # 执行处理
        for f in "$folder"/"$prefix"*"$extension"
        do
            printf "  $f\n"
            gif2webp $f -q 75 -o ${f%.*}.webp -quiet
        done
    fi
}

# 定义目标目录
dir=$1
# ext=$2

echo '====================== Webp Tools ======================'
printf "  \x1B[32m处理目录: \x1B[0m"${dir}"\n"
printf "  \x1B[32m处理格式: \x1B[0mPNG, JPG, GIF\n"
echo '--------------------------------------------------------'

if ! [ -x "$(command -v cwebp)" ]; then
	printf "\n\x1B[33mWARNING \x1B[0m 未找到webp, 将尝试安装webp...\n"
    brew install webp
fi

if ! [ -x "$(command -v cwebp)" ]; then
	printf "\n\x1B[31mERROR \x1B[0m 尝试安装webp失败...\n"
    exit 1
fi

if [ "$dir" != "" ] && [ -d "$dir" ]; then
	printf "  \x1B[32mINFO \x1B[0m 开始处理...\n"
    # touch -c "$dir"/*
    # ls -l "$dir"
    # 调用函数, 传递文件夹路径、前缀及扩展名
    # cwebp_files "$dir" "" "$ext"
    cwebp_files "$dir" "" ".png"
    cwebp_files "$dir" "" ".jpg"
    # cwebp_files "$dir" "" ".jpeg"
    gif2webp_files "$dir" ""
	printf "  \x1B[32mINFO \x1B[0m 处理完成...\n"
else
	printf "  \x1B[31mERROR \x1B[0m 输入错误,请返回重新指定待处理目录...\n"
fi

关于视频

Mac

#!/bin/sh -xe
ffmpeg -i "$1" -b:v 0 -crf 30 -pass 1 -an -f webm -y /dev/null
ffmpeg -i "$1" -b:v 0 -crf 30 -pass 2 "${1%.mp4}.webm"