1. BPG到底是什么?这个格式为什么值得折腾
先说个真实经历。前阵子一个设计师朋友给我发了张截图,后缀是 .bpg,我习惯性双击,Windows 照片查看器直接弹窗说格式不支持。我当时第一反应是“这什么冷门玩意儿”,后来一查才发现,这格式在压缩效率这个领域,其实已经默默发展了快十年。
BPG,全称是 Better Portable Graphics,中文社区一般叫它“更好的便携图像格式”。它是 2014 年由 FFmpeg 的创始人 Fabrice Bellard 发布的,核心思路非常直接:既然 HEVC(也就是 H.265 视频编码规范)在视频压缩上效果远超老标准,那我干脆把 HEVC 里负责“帧内编码”的那部分提取出来,专门用于压缩静止图片。换句话说,BPG 本质上是用“视频编码的思路”来压缩一张图,但只用了视频编码中的一个环节。
这个思路带来的收益非常直观:在同等画质下,BPG 文件体积大约是 JPEG 的 50% 到 60%。如果拿质量很高的原图来对比,一张 1920x1080 的 JPEG 可能 800KB,同样视觉质量的 BPG 可能只有 400KB 左右。对于大量截图、产品图、摄影素材,这个体积差异意味着节省一大块存储空间,也意味着网页或文档加载速度明显提升。
BPG 还有几个 JPEG 比不了的特性:
- 支持 Alpha 透明通道,而且无损保留透明度。
- 支持最多 14 位色深,JPEG 通常只有 8 位。
- 支持无损压缩模式,压缩率仍然高于 PNG。
- 支持“BPG 动画”,可以理解成“动图”,体积比 GIF 小得多,画质也更好。
- 内嵌 ICC 色彩配置文件,色彩管理比 JPEG 更靠谱。
不过,它在日常使用中一直有个无法回避的问题:生态不完善。浏览器厂商纷纷放弃了它的原生支持,手机系统更不用说,连很多专业修图软件也没集成它。所以在 Windows 上,如果你想用 BPG,基本得靠自己搭一套“能看、能转、能预览”的方案。这篇文章要解决的,就是这三件事。
适合谁来参考?首先是设计师、前端开发、素材管理爱好者,他们手里经常攒几千张 PNG/JPG,想压缩又不想损失画质;其次是摄影爱好者,想长期归档原图、缩略图;再就是纯粹对图片技术感兴趣、想在电脑上折腾点新格式的玩家。下面我直接进入正题,先聊查看,再聊转换,最后说 Windows 资源管理器预览方案。
2. 查看 BPG 图:Windows 下靠谱方案盘点
2.1 免费首选:IrfanView + BPG 插件
Windows 上最省事的看图方式是装 IrfanView,这工具是老牌免费看图软件,体积小,启动快,而且插件体系非常完善。BPG 支持不是内置的,需要额外装一个官方插件,叫BPG plugin,在 IrfanView 官网的“Plugins”页面能找到。
安装步骤很简单:
- 先装 64 位 IrfanView(注意,软件和插件位数要统一)。
- 下载 BPG 插件压缩包,解压后得到
bpg.dll或类似文件。 - 把插件文件放进 IrfanView 的
Plugins目录,然后重启软件。 - 打开一张 .bpg 文件测试,应该能正常显示。
IrfanView 本身不自动关联所有文件后缀,你第一次打开 .bpg 时,它可能会提示“未知格式”,但也有可能直接识别。如果没有直接识别,你可以在打开文件对话框里把“文件类型”改成“所有文件(.)”,然后手动选择 BPG 文件。实测下来,只要插件版本匹配,IrfanView 还能直接读取 BPG 的透明通道,也会以灰色棋盘格显示透明区域,这对需要确认素材边界的情况很有帮助。
这里有个小经验:IrfanView 不仅能看 BPG,还能在“文件 → 另存为”里把 BPG 转成 JPG、PNG、BMP、WebP 等常见格式,等于一个软件干了两件事。不过它的批量转换能力一般,后面会介绍更适合批量操作的方案。
2.2 开源老将:LibreOffice Draw 也能开 BPG
很多人不知道,办公套件 LibreOffice 的绘图组件 Draw,内置了部分 BPG 解码能力。你只要把 .bpg 文件直接拖进 Draw 窗口,它就会作为图片对象加载出来。这个功能我试过多次,对于查看单张 BPG 图、确认图片内容完全够用。
但它的限制也很明显:Draw 主要是矢量绘图工具,不是专业图片浏览器,打开大尺寸图片后会有点卡,也不能预览动图动画效果。所以我把它定位成“备用方案”,适合你在公司电脑上不方便装过多软件,但又急需确认一张 BPG 图内容的情况。
2.3 极客方案:ffplay 命令行查看
如果你平时会碰 FFmpeg 工具,那么 ffplay 算是最轻量、最不折腾的 BPG 查看器之一。只需要安装带ffplay.exe的 FFmpeg 包,然后打开命令行执行:
ffplay "C:\path\to\your-image.bpg"FFmpeg 对 BPG 的原生支持其实不算完整,某些 BPG 派生格式(比如带 APNG 式扩展信息的)会解码失败,但对于最常见的 HEVC 帧内编码 BPG 文件,ffplay 都能正常播放/显示。它的优势是无需安装插件、不常驻后台,缺点是没有任何 UI,不能缩放、旋转、查看属性,所以只建议临时应急时用。
3. 图片转换实战:从 JPG/PNG 到 BPG,以及转回来
如果只是“能看”,BPG 的实用性还不太够。真正的重心在于转换——把现有图库批量转成 BPG,这才能体现体积优势。反之,你收到一张 BPG,但客户或平台不认,也得转回常见格式。这一节我把这两条路都走通。
3.1 准备命令行工具:bpgenc 与 bpgdec
BPG 官方发布过一个 Windows 命令工具包,里面包含两个核心程序:
bpgenc.exe:编码器,负责把 PNG/JPG 转成 BPG。bpgdec.exe:解码器,负责把 BPG 转回 PNG/JPG。- 另外还有一个
bpgenc.exe自带的编码库依赖,以及可选的 x265 模块。
你可以从官方发布页下载bpg-0.9.8-windows64.zip这类压缩包(主版本号可能更新,认准 Windows 64 位即可)。解压后,把bpgenc.exe和bpgdec.exe放到一个固定目录,比如D:\Tools\bpg,然后把该目录加入系统环境变量 PATH。这样,你后续在任何命令行窗口里都能直接敲bpgenc和bpgdec。
注意:BPG 编码器在 Windows 上需要 VC++ 运行库支持,如果运行时报错“缺少 MSVCP140.dll”,请先安装 Microsoft Visual C++ 2015-2022 Redistributable(x64)版本。
3.2 参数详解:不再靠默认值瞎猜
bpgenc的命令行参数不算多,但每个参数都直接影响输出文件的质量和大小,我拆开讲。
最基础的用法:
bpgenc -f 444 -q 30 -c ycgco input.png -o output.bpg各参数含义:
-f:指定色度采样格式。可选 420、422、444。444 表示保留所有颜色信息,画质最高;420 会丢弃一部分颜色细节来压缩体积。如果你要转摄影素材或精细UI,建议用 444;如果是普通截图、网页元素,420 完全够用,体积也更小。-q:量化参数,范围 0 到 51,数值越低画质越高、文件越大。常见取值:25-30 对应高画质高压缩;35-40 对应中等画质小体积;40 以上就是能看但细节明显损失的档位。它很像 JPEG 的“质量滑块”,但压缩曲线更平滑,不容易出现低质量下的块状斑。-c:颜色空间转换方式。常见值有ycgco、ycbcr、rgb。默认是ycgco,兼容性和压缩比综合最优;如果你介意色偏,且原始图片是 RGB,想追求无损转换,可以选-c rgb,但体积会大一些。-lossless:开启无损模式。加了之后-q基本无效,输出体积比 PNG 小,但比有损 BPG 大不少。适合对图片质量极其敏感的归档场景。-e:指定编码器。默认内置编码器速度较慢但稳定;如果你安装了 x265 相关的 DLL,可以指定-e x265,编码速度会有明显提升,压缩率通常也更好。我建议有条件的同学优先用 x265 编码器。-threads:线程数。默认自动检测 CPU 核心数,但如果你发现 CPU 占用吃不满,可以手动指定,比如-threads 8。编码是极其消耗 CPU 的操作,多核优化很关键。
再看几个实际场景。
场景一:把一张 PNG 转成高质量 BPG,追求“看不出差别但体积小”
bpgenc -f 444 -q 28 -c ycgco -e x265 -threads 8 input.png -o output.bpg这个命令适合设计图、扫描件、带文字的截图。444 保留全部颜色采样,28 的量化值在视觉上几乎无损,实测下来体积大约是同类 PNG 的三分之一到四分之一,比 JPEG 也少 30% 到 50%。
场景二:大量 JPG 转 BPG,优先极端压缩
bpgenc -f 420 -q 38 -c ycgco -e x265 -threads 8 input.jpg -o output.bpg420 降低一半色度信息,38 的量化值丢一部分高频细节,但人眼看缩略图或中等尺寸显示时,区别很小。这个组合适合图库站、电商商品主图的“个人备份版”——我强调个人备份,因为正式对外发布时,要注意接收方能不能打开这种格式。
场景三:无损转换
bpgenc -lossless -f 444 -c rgb input.png -o output.bpg此处-c rgb配合-lossless,能保证每个像素的 RGB 数值与原始 PNG 完全一致,同时体积变小。但如果你的 PNG 本来就有 Alpha 通道,BPG 会自动保留,无需额外配置。
场景四:动态图/GIF 转 BPG 动画
BPG 支持动画,bpgenc可以直接读取 GIF 并输出动画 BPG:
bpgenc -f 420 -q 32 -a 0 input.gif -o output.bpg-a 0的含义我不确定在不同版本里是否一致,更通用的做法是先不指定具体帧号,直接转换,它会自动保留所有帧。实测一个 8MB 的 GIF 转成 25fps 的 BPG 后可能变成 1-2MB,压缩效率惊人。
3.3 转换 BPG 回 JPG/PNG:关键的回头路
BPG 解回来很简单:
bpgdec output.bpg -o result.png默认输出 PNG,因为这样可以保留透明通道和全部细节。如果你需要 JPG,可以加参数指定输出格式,或者解成 PNG 后再用其他工具转为 JPG。两个注意事项:
bpgdec解码时不会应用 ICC 色彩配置,某些带颜色配置的 BPG 图片解出来后颜色可能轻微变化。稳妥做法是解成 PNG,再在 Photoshop 或 GIMP 里套用原始 ICC,如果你确实需要做出版级色彩管理。- 如果 BPG 文件里有损丢失的信息,解码回 PNG 也找不回来,所以不要指望“BPG 当存档,随便转回无损”。
3.4 批量转换:命令行 for 循环或图形化的 XnConvert
一次转几百张图,手动敲命令不现实。Windows 命令行下最简单的批量操作是用for循环:
for %i in (*.png) do bpgenc -f 444 -q 28 -c ycgco -e x265 "%~i" -o "%~ni.bpg"这段会在当前目录下把所有.png转成同名.bpg。注意在批处理文件(.bat)里,变量符要改成两个百分号,比如%%i和%%~ni。如果你在 CMD 窗口手输,则用单百分号。
如果你不喜欢命令行,那图形化的 XnConvert 是很靠谱的选择。XnConvert 支持输出为 BPG 格式,前提是软件里启用相关组件。你只需要:
- 导入图片文件(支持批量拖入)。
- 在“输出”选项卡里把格式选为 BPG。
- 设置质量参数(类似上面讲的
-q)。 - 开始转换。
实测 XnConvert 批量转换 UI 响应流畅,失败率低,唯一缺点是底层不是最新 x265 编码器,压缩率略逊于官方命令行工具。所以我的建议是:日常单张或小批量用官方命令行,追求极限压缩用官方命令行;普通用户批量处理图库,用 XnConvert 的图形界面就好。
4. Windows 资源管理器缩略图与预览:装完这个插件就能直接看到图
查看和转换都解决了,但很多人忽略了一个关键体验环节:Windows 资源管理器里看不到 BPG 文件的缩略图。你打开文件夹,满屏全是统一的“未知文件”图标,找文件只能靠文字后缀,非常痛苦。
我的解决方案是用一个专为 Windows 资源管理器设计的文件系统扩展,它能在资源管理器列表、大图标模式、预览窗格里直接渲染 BPG 缩略图和元信息。安装后,你会得到以下能力:
- 文件夹内直接看到 BPG 图片内容缩略图,不用逐个打开。
- 选择文件时,右侧“预览窗格”也能直接显示。
- 文件资源管理器底部状态栏能看到图片尺寸、文件大小,浏览体验接近系统原生格式。
这个插件的安装路径很关键:解压后,把对应的 DLL 文件复制到系统目录,然后以管理员身份运行注册命令。这里有几种不同的插件实现,网上能找到的常见是bpg thumbnail handler或类似命名的版本。安装时注意区分 64 位和 32 位系统,绝大多数现代 Windows 是 64 位,就选 64 位的 DLL。
注意:某些第三方插件在安装后需要重启资源管理器才生效。你可以在任务管理器里找到“Windows 资源管理器”,右键重新启动,不用重启电脑。
装完后如果你发现缩略图还是不出来,大概率是图标缓存问题。解决办法是删除 Windows 的资源管理器图标缓存,让系统重新生成。具体操作:
- 在文件资源管理器地址栏输入
%localappdata%\Microsoft\Windows\Explorer并回车。 - 找到
thumbcache_*.db和iconcache_*.db开头的文件。 - 退出资源管理器(任务管理器 → Windows 资源管理器 → 重新启动)。
- 在 CMD 里执行
ie4uinit.exe -show或者直接重启一次资源管理器。 - 再打开文件夹,系统会重新扫描图片文件并生成缩略图。
还有一个更保险的方法:在“控制面板 → 文件夹选项 → 查看 → 始终显示图标,从不显示缩略图”这个勾选状态下,缩略图扩展是不起作用的。如果你的缩略图一直白屏,优先检查这项设置是不是被系统策略或美化工具改过了。
5. 常见问题与避坑指南
这部分我把实操中踩过的坑和网上常见疑问整理成速查,你可以直接对应排查。
5.1 转换速度太太太慢了,怎么办
BPG 编码是 CPU 密集型任务,尤其-f 444加高质量档位,一张 4K 图可能要跑几十秒。如果你觉得慢,优先做三件事:
- 确认编码器用了
-e x265,并确保 x265 模块可用。内置编码器比 x265 慢不少。 - 调高
-threads参数到物理核心数或逻辑核心数的一半。线程开太多反而会因内存带宽或线程同步开销拖慢速度。 - 降低
-q的数值?不对,-q数值低画质高,编码耗时反而更长。所以如果速度优先,可以适当调高-q到 35 左右,肉眼差异不大,但耗时明显下降。
实测:一台 8 核 16 线程的机器,用 x265 编码器处理 20 张 1200 万像素照片,-q 28原始流程大概需要 4 分钟,调高线程并允许更低质量档位后,能压到 2 分钟出头。
5.2 转出来的 BPG 在部分设备上出现偏色或花屏
这个大概率是色度采样和色彩空间参数选择问题。电脑显示器大多是 RGB 色彩模型,但 BPG 默认用 YCgCo 色彩空间压缩再转换回 RGB,理论上接近无损。然而某些显卡驱动或图片解码库对 YCgCo 支持得不好,显示时会出现奇怪的颜色偏移。
遇到过这种问题,最直接的解决办法是用-c ycbcr或-c rgb重新编码。-c ycbcr是更老练但不常用的色彩空间,兼容性更好;-c rgb则完全绕开转换,但压缩率略低。我的建议是:如果图片要分发给多样化的设备,优先-c rgb或-c ycbcr;如果是自己归档、自己看,ycgco的压缩收益最明显。
5.3 装了缩略图插件后没效果
我见过很多次这种问题,原因通常不是插件有问题,而是 Windows 系统预取缓存把旧图标缓存记住了。先去“文件夹选项”确认缩略图功能开启,然后按第 4 节的方法重建图标缓存。如果还不行,就看事件查看器:
- 按
Win + R,输入eventvwr.msc打开事件查看器。 - 在“Windows 日志 → 应用程序”里找
Error级别事件,看有没有thumbnail、Shell、BPG关键词。 - 如果有报错,一般是 DLL 与系统版本冲突或者 32/64 位不匹配。卸载后换一个版本重新安装。
5.4 BPG 动图转出来没有动画效果
首先确认源文件确实是动态的 GIF 或 WebP。BPG 编码器支持的动态格式在转换时默认保留全部帧,但如果你只给了一张首帧的图片,那它自然就是静态的。
其次是播放器的原因。IrfanView 支持 BPG 插件的话,一般能播放动态 BPG;某些第三方插件或者在线预览工具只能渲染首帧,这是工具限制,不是文件损坏。
5.5 转回 JPEG 后发现文件比原图还大
这不是 BPG 的问题,而是 JPEG 编码本身的质量折损再放大。BPG 经过一次有损压缩后,再转 JPEG,前者损失不可逆,后者为了达到相同视觉质量会把文件“撑大”。所以我的建议是:如果你的原始 JPEG 非常重要,建议保留一份原始 JPEG 作为备份,BGP 只作为“衍生压缩存档”或“临时分发格式”使用,不要“转 BPG → 删原图 → 随时转回 JPEG”这么干。
5.6 发微信、传邮件给同事,对方打不开 BPG
这是 BPG 生态最大的痛点,也是每个想推广 BPG 的人绕不开的现实:绝大多数聊天软件、邮箱网页端、办公系统、在线图片托管服务都不认 BPG。所以我在实际工作中的做法是:
- 个人归档、开发素材库,用 BPG 节省空间。
- 对外交付给客户或同事,一律转回 PNG/JPG 再发。
- 如果数量大,可以写一个批处理脚本,双击自动把指定目录下所有 BPG 转成 JPG,省得每次手动找工具。
一个实用的批处理脚本,保存为bpg_to_jpg.bat:
@echo off for %%i in (*.bpg) do ( bpgdec "%%i" -o "%%~ni.png" magick "%%~ni.png" "%%~ni.jpg" del "%%~ni.png" ) echo Done. pause上面用到了 ImageMagick 的magick命令,或者你也可以直接用 IrfanView 命令行模式完成 PNG 到 JPG 的转换。这脚本的逻辑很简单,先解成 PNG,再转 JPG,最后清理临时 PNG。
我个人的体会是,BPG 这种格式确实高效,但决定它能走多远的,不是压缩率本身,而是生态。好在“个人电脑 + 本地工作流”这个场景里,我们能通过工具链完全掌控它。如果你手头有大量图片素材想节省空间,很值得花半小时把这套“查看、转换、预览”流程搭好。以后再遇到 BPG 文件,就不会像当初的我一样只能干瞪眼了。