批量转WebP/WebM小工具
关于图片
博客搭建过程中, 涉及图片的加载, 可能会遇到
- 来源海外站点, 国内访问失败
- 图片本身较大, 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"