Avif使用说明

avif —— 相片瘦身与拍摄时刻修复

本文链接:https://www.cnblogs.com/fitmap/p/23187392

avif 是一个命令行工具,做两件事:
① 把照片的"最后修改时刻"恢复成拍摄时刻;② 把照片压成 .avif 格式省空间。
全程不联网、不删原相片。
默认把当前文件夹(含所有子文件夹)都处理一遍;也可以只处理你指定的那几张、那几个文件夹(见 §4)。


1. 解决什么问题

  • 节假日出游留下大量相片;手机、相机分辨率越来越高,导出的相片越来越大,几万张就能占掉 1TB;
  • 存储产品在人工智能需求驱动下价格暴涨;
  • 相片经过复制、导出、同步,"最后修改时刻"变成"操作时刻",照片在"按日期排序"的相册里会被打乱,看不出实际拍摄日期。

avif 一次解决这两件事:先把最后修改时刻改回拍摄时刻,再把相片压成体积小得多的 AVIF 格式——
同样的画质,体积通常只有原来的 1/20 到 1/2。

  • 不动原文件,只新增一个同名 .Avif 文件;
  • 已经转换过的目录再运行一次也不会重复转换;
  • 可整可零:不带参数处理整个文件夹,带上文件名/目录名就只处理你指定的那些(见 §4.2)。

2. 下载地址

包 链接
安装包 avif_exe.7z https://share.weiyun.com/BF3xlGo3 密码:thy75u
源程序(非程序员可不下载) avif_src.7z https://share.weiyun.com/4qw3vVmc 密码:n5s6mi

注:安装包打开后是安装程序 avifsetup.exe,双击它即可安装(见 §3)。
avif.exe 不依赖任何外部动态链接库(只使用 Windows 自带的系统 DLL)。


3. 安装方法

  1. 打开 avif_exe.7z,双击运行 avifsetup.exe;
  2. avif.exe 程序会自动安装到 C:\Program Files\avif,并把这个目录加进你的 Path 环境变量。

环境要求:64 位 Windows(Windows 10 / 11 均可)。
注:若有其它目录下的 avif.exe 请自行删除。


4. 使用方法

avif 有两种用法:不带东西就处理整个文件夹;带上东西就只处理你指定的那些照片。

4.1 用法一:整个文件夹(最常用)

:: 1) 打开要处理的那个文件夹,在地址栏敲 cmd 回车(即"在这个目录找开命令行窗口")
:: 2) 在命令行窗口输入下列命令并回车:
avif

它会递归处理当前目录及其所有子目录,每个文件夹单独汇总。

4.2 用法二:只处理指定的照片 / 指定的子目录

在 avif 后面跟上"要处理什么"就行,可以写多个(用空格隔开):

avif  IMG_0001.Jpg                  :: 只处理这一张
avif  IMG_0001.Jpg IMG_0002.Jpg     :: 只处理这两张
avif  *.jpg                         :: 当前文件夹里所有 jpg
avif  sub\*.png                     :: sub 文件夹里所有 png
avif  "D:\我的 照片\*.jpg"           :: 别的盘上的文件夹(路径含空格时用双引号)
avif  D:\我的照片                    :: 整个文件夹(含它下面所有子目录)
avif  *.jpg sub\*.png               :: 混着写也行

只有三条规则要记住:

规则 说明
* 只管一层 *.jpg 只匹配当前这一层的 jpg,不会钻进子目录。子目录里的要另外写(sub\*.jpg),或者写成 *\*.jpg(每个子目录各匹配一层)
写文件夹名 = 整个文件夹 直接写 D:\我的照片 或 sub,会递归处理它下面所有子目录 —— 和"用法一"完全一样
.Avif 跟着原图走 产物一律生成在原图所在的那个文件夹里,两种用法没有区别

⚠ 只写"要处理的原图",别把产物 .Avif 也写进去。
写在后面的文件名,程序会在动手转换之前先把它们逐个核对一遍;那一刻本次要生成的
.Avif 还不存在,于是会多出一句 找不到:xxx.Avif(退出码 1)—— 转换本身是照常完成的,
第二次再跑也没有这句提示,但没必要这么写。
正例:avif IMG_0001.Dng  反例:avif IMG_0001.Dng IMG_0001.Avif

处理内容也完全一致:先修最后修改时刻、再压缩;已经转换过的用 <已有> 跳过,不会重复转换。

两点提醒

  1. avif 没有 --help 之类的选项开关。写在后面的东西一律当成"要处理的文件",
    写错了它会明确告诉你"找不到",不会猜你的意思。
  2. 路径里有空格时要用双引号包起来:avif "D:\我的 照片\*.jpg"。
    路径里没有空格时加不加引号都一样。

Q:双击 avif.exe 好像没反应?
它处理的是命令行"当前目录",而且做完就退出,双击时窗口一闪而过看不到结果。
请按上面的方法在命令窗口里运行它。


5. 支持的照片格式(12 种)

类别 扩展名 说明
常见照片 .jpg .jpeg .png .gif .bmp
专业/无损 .tif .tiff 含 LZW、ZIP(Deflate)压缩的 TIFF
网络图片 .webp
苹果手机 .heic .heif iPhone 默认拍照格式
专业 RAW .dng 手机(苹果/安卓/鸿蒙)/相机的 RAW
已转换 .avif 不重复转换,只修正它的"最后修改时刻"

大小写都认(.JPG、.Dng 一样处理)。视频不在处理范围内,不在支持列表里的格式一律跳过。


6. 压缩效果(实测数据)

用 16 张 4096×3072 的手机照片(合计 35.6 MB)实测:

结果
原始总量 35,645,963 字节(约 35.6 MB)
转成 AVIF 后 3,643,532 字节(约 3.6 MB)
压缩率 10.2% —— 省下约 89.8% 的空间

RAW(DNG)也能直接转。实测:

源文件 产物
24 MB 的 DNG(4000×3000,画面较简单) 86 KB
141 MB 的 DNG(11904×5952) 464 KB

RAW 文件本身保存的是"传感器原始数据",压缩率看起来特别夸张是正常的;
普通照片按 §6 的比例(约 1/10)估算更实际。

⚠ 实际压缩率随相片内容而异。手机/相机相片通常在 1/2 ~ 1/20 之间;
已经压过很多次的图(比如微信转发过的)省得少一些。

速度快:12 兆像素的照片约 2~3 秒/张;上面那个 70 兆像素的 DNG 约 15 秒。
它使用的是高质量编码设置——慢一点,换来更小的体积和更好的画质。
已经转换完的目录再跑一遍几乎不花时间(约 3 毫秒/文件),所以可以放心反复运行。


7. 画质影响

日常照片:肉眼看不出差别。

  • 客观相似度(SSIM,满分 1.000)为 0.975;
  • 在手机、电脑屏幕、电视上正常浏览和投屏,与原始相片看不出区别;
  • 只有把两张图放大到 100% 并排逐像素比对,才能在极细的纹理处找到差别。

需要注意的三点:

  1. 截图、图表、界面图、彩色文字这类"色块锐利"的图,压缩后可能有轻微色彩边缘
    。照片不受影响。
  2. 转换是有损的。不适合还要在这张图上做大幅后期(重度调色、大比例裁剪放大)的
    专业用途——那种情况请保留原始文件。
  3. 如果你要长期保存原件,请保留源文件(本工具本来就只新增 .Avif、不删原图)。
    真正重要的照片建议另存一份原始文件到别处。

8. 输出怎么读

★★★ 深度=0 .
     1 2026-10-03 08:37:34 IMG_0001.Jpg 4873684 => .Avif  1053722  21.62%     2.39s
     2 2026-10-03 08:37:34 IMG_0002.Jpg 4873684 => .Avif  1053722  21.62%        - <已有>
合计 2 个: 转换 1, 跳过(已有) 1, 已是 .Avif 0
时刻: 已修 2, 一致 0, 无 0
原 9747368 => 现 2107444 字节, 总压缩率 21.62%, 用时 2.4 秒
用时: 合计 2.4 秒(读取元数据 0.2 秒, 转换 2.2 秒)
列 含义
★★★ 深度=0 . 正在处理哪一层目录(. 是当前目录,./sub 是子目录)
时刻 这张照片的拍摄时刻(也就是修好之后的"最后修改时刻")
源文件名 / 原大小 原文件
.Avif / 宿大小 转换产物及其体积
压缩率 产物 ÷ 原文件
最后的 2.39s 处理这个文件花了多少秒;显示 - 表示这个文件没有转换
<已有> 之前已经转换过了,本次跳过(不是错误)

★★★ 行里的目录名:在当前文件夹里面的用相对写法(.、./sub);
若是用 §4.2 指定了别的盘/别的路径,就直接显示完整路径(D:\我的照片),
方便你一眼看出这次动的是哪儿。

时刻列的两种特殊显示:

  • ====== —— 照片最后修改时刻本来就是对的不需要改;
  • ****** —— 这张照片里没有可用于判断的拍摄时刻,于是原样保留它的"最后修改时刻"。

拍摄时刻从哪来:优先用相片自带的拍摄时刻(EXIF,手机相片都有);
没有 EXIF 时(微信发送会删掉 EXIF),从文件名里的日期时刻串推断
(如 IMG_20260927_123415.jpg);两者都没有才显示 ******。


9. 退出码

退出码 含义 该怎么办
0 全部成功 —
1 至少有一个文件出错(读不了、写不了),或者你给的文件/文件夹根本不存在 看输出末尾的 错误 列表,逐条核对
2 启动失败(参数写成了空 / 程序自身初始化失败) 检查命令行参数

「某个通配符一个文件都没匹配到」(例如目录里没有 png 却写了 avif *.png)
不算错误:它会打印一行 〓 无匹配:*.png 提示你,但退出码仍是 0,
所以放在批处理里连写几种格式也不会动不动就"失败"。
而路径写错(比如 avif D:\没有这个目录)是错误,退出码 1 —— 这种情况必须让你知道。

另有一类会得到 1 的写法:把本次将要生成的 .Avif 也写进命令行(见 §4.2 的提醒)。
转换照样完成、文件照样能看,但那句"找不到"会让退出码变成 1。


10. 想省主机空间?把老照片挪到 U 盘 / 移动硬盘

主机/系统盘空间紧张时,这是最划算的做法——先转换、再转移、观察一阵再清理:

  1. 先转换:在照片目录运行一次 avif,得到体积只有约 1/10 的 .Avif。
  2. 再核实:随便抽几张 .Avif 打开看看,确认画质与最后修改时刻都正常。
  3. 再转移:把 .Avif 与原始 .Jpg 一起拷到 U 盘 / 移动硬盘
    (源文件是你唯一的"无损底片",不要只留 .Avif)——是转移,不是删除,万一后悔还有退路。
  4. 观察一段时间(比如一两个月):用起来没问题,再考虑删除主机上的原图;
    主机上保留 .Avif 即可继续正常浏览。
  5. 重要照片建议两份介质 + 一处云端(U 盘会丢、会坏,这是常态)。

11. 怎么查看 .Avif 文件

  • Windows 10/11:可以用Edge浏览器直接打开;
    安装 "AV1 Video Extension"(Microsoft Store 里搜这个名字,免费);
    不装的话资源管理器可能显示不出缩略图、双击打不开;照片应用也无法浏览。
  • 也可以用支持 AVIF 的看图软件(如 ImageMagick、XnView、IrfanView + 插件、新版 Photoshop 等);
  • 关于 AVIF 格式本身的更多介绍,参见
    [AVIF简介] https://www.cnblogs.com/fitmap/p/15861245。

12. 卸载

  • 打开 设置 → 应用 → 已安装的应用,找到 avif,点卸载;或
  • 直接运行 C:\Program Files\avif\avifuninst.exe(需要管理员确认)。

卸载会:从 Path 中移除安装目录、删除注册表项、删掉安装目录与自身。
你转换出来的照片完全不受影响。


13. 常见问题

Q:转出来的 .Avif 会比原图还大?
一般不会。但已经高度压缩过的图、或者极小的图,可能压缩率很差甚至变大
(例如一张 3 KB 的缩略图)。这是格式本身的特性,不是故障。

Q:运行报"不是内部或外部命令"?
avif 所在目录不在 Path 里,或安装后还没开过新的命令行窗口。见 §3。

Q:想批量处理很多目录?
在每个照片目录各运行一次即可(它是递归的,选一个够上层的目录跑一次就够);
也可以把目录名写在后面一次交给它,例如 avif D:\照片A D:\照片B,会按顺序各处理一遍。

Q:我只想转几张,不想整棵树,怎么做?
用 §4.2 的写法:avif IMG_0001.Jpg IMG_0002.Jpg,或者 avif sub\*.jpg。
产物还是生成在原图所在的文件夹里,不会跑到别处去。

Q:avif *.jpg 怎么没处理子目录里的照片?
* 只管当前这一层,这是刻意设计的(免得在照片总目录里手一抖就动了全部几万张)。
子目录里的要么单独写 sub\*.jpg,要么写 *\*.jpg(每个子目录各匹配一层),
要么干脆用 §4.1 的用法一(不带参数 = 整棵树)。

Q:路径里有空格怎么办?
用双引号包起来:avif "D:\我的 照片\*.jpg"。没有空格时加不加都一样。

Q:avif 支持 --help 或 -r 这类开关吗?
不支持,也没有。avif 后面写的东西一律当成"要处理的文件"。
所以 avif --help 会告诉你"找不到:--help"(退出码 1)—— 不是故障,是它真的在找一个叫 --help 的文件。

Q:我写了 avif IMG_0001.Dng IMG_0001.Avif,为什么报"找不到 IMG_0001.Avif"?
因为程序是"先把你要处理的文件名全部核对一遍,再开始动手"的 —— 核对那一刻 .Avif 还没生成,
所以报了一句"找不到",而后面的转换其实照常完成了(文件能正常看到)。
只写要处理的原图就行:avif IMG_0001.Dng。.Avif 是产物,不需要写进命令行。
若不信,把同一条命令再跑一次,这句提示就没了(那时 .Avif 已经在了)。

posted @ 2026-10-02 23:27  飞麦  阅读(48)  评论(0)    收藏  举报