市场上有很多批量转avif格式的软件或在线平台,通通试过一次感觉还是没ImageMagick好用,ImageMagick支持多平台。
Windows 安装方法:(windows版)
下载并安装 ImageMagick:
ImageMagick 下载地址 https://imagemagick.org/script/download.php
在安装时确保勾选 “Install legacy utilities (e.g. convert)”。
检查安装是否成功:
magick -version
ImageMagick 基本用法: (在图片8866.jpg的文件夹内打开cmd终端)
magick 8866.jpg -quality 80 8866.avif
批量转换:(在图片的文件夹内打开cmd终端)
magick mogrify -quality 80 -format avif *.jpg
有人说去掉mogrify更佳:
magick -quality 80 -format avif *.jpg
常用参数:
-quality 80:设置图片质量;
-resize 800×800:调整图片尺寸;
-strip:去除 EXIF 信息;
-background white -flatten:去除透明背景。
批量转换脚本:
Windows 批处理脚本(保存为 convert_to_avif.bat):
@echo off setlocal enabledelayedexpansion REM 设置输入和输出目录 set input_dir=.\images\ set output_dir=.\output\ REM 创建输出目录 mkdir !output_dir! REM 批量转换 JPG -> AVIF for %%f in (!input_dir!*.jpg) do ( echo Converting %%f... magick "%%f" -quality 80 "!output_dir!%%~nf.avif" ) echo All files converted! pause
@echo off setlocal enabledelayedexpansion REM 设置输入和输出目录 set input_dir=.\images\ set output_dir=.\output\ REM 创建输出目录(如果不存在) if not exist "!output_dir!" mkdir "!output_dir!" REM 检查 ImageMagick 是否已安装 magick -version >nul 2>&1 if errorlevel 1 ( echo ImageMagick 未正确安装或未加入系统 PATH 中。 pause exit /b ) REM 批量转换 JPG -> AVIF for %%f in (!input_dir!*.jpg) do ( echo 正在转换 %%f ... magick "%%f" -strip -resize 1200x1200 -background white -flatten -quality 80 "!output_dir!%%~nf.avif" if errorlevel 1 ( echo 转换 %%f 失败! ) else ( echo 转换 %%f 成功! ) ) echo 所有图片已转换完成! pause【增强版】
支持子目录递归转换、文件大小判断、处理非 .jpg 格式等
高级脚本:convert_all_jpg_to_avif.bat@echo off setlocal enabledelayedexpansion REM 自定义配置 set "min_width=20" set "min_height=20" set "max_size=800x800" set "quality=80" REM 当前目录 set "source_dir=%cd%" set "output_dir=%cd%\converted_avif" REM 创建输出目录 if not exist "%output_dir%" mkdir "%output_dir%" REM 遍历所有 .jpg 文件 for /r "%source_dir%" %%f in (*.jpg) do ( REM 获取相对路径(去掉前缀) set "filepath=%%~dpf" set "relpath=!filepath:%source_dir%=!" set "outfile=%output_dir%!relpath!\%%~nf.avif" REM 创建输出子目录 if not exist "!outfile!\.." mkdir "!outfile!\.." echo 正在处理:%%f REM 用 magick 获取宽高 for /f "tokens=1,2 delims=x " %%a in ('magick identify -format "%%w x %%h" "%%f"') do ( set "imgw=%%a" set "imgh=%%b" ) REM 判断尺寸是否超过阈值 set /a check=0 if !imgw! GEQ %min_width% if !imgh! GEQ %min_height% set /a check=1 if !check! EQU 1 ( magick "%%f" -strip -resize %max_size% -background white -flatten -quality %quality% "!outfile!" if errorlevel 1 ( echo ❌ 转换失败:%%f ) else ( echo ✅ 已保存:!outfile! ) ) else ( echo ⏩ 跳过尺寸过小的图片:%%f ) ) echo. echo ✅ 所有符合条件的图片已处理完成,AVIF 文件保存在 %output_dir% pause