nearest-exact、bilinear、area、bicubic 还是 lanczos?放大算法实测对比
ComfyUI 和 FFmpeg 里的缩放算法对边缘和细节做了什么?我们实测了清晰度、光晕,以及缩小时 bilinear、bicubic 会出摩尔纹的问题。
要点速览
- 放大照片和视频画面,lanczos 和 bicubic 保留的细节最多。我们的 4 倍放大测试里,它们比 nearest-exact 高约 5 dB,比 bilinear 高约 2.5 dB。
- lanczos 和 bicubic 看起来更锐,是因为它们会在边缘处“冲过头”,高反差的线条旁边会出现一圈淡淡的光晕。
- 在 ComfyUI 里按整数倍放大时,area 的结果和 nearest-exact 逐像素相同;在 FFmpeg 里,area 放大的效果等同 bilinear。
- 在 ComfyUI 里缩小图片,请选 lanczos 或 area。那里的 bilinear 和 bicubic 不做抗锯齿,会留下明显的摩尔纹。
- 这些算法都不会增加细节。想要细节,得用 AI 放大,那是另一类工具。
放大时选 lanczos 或 bicubic,边缘细节保留得最多,代价是轻微的光晕。nearest-exact 只适合像素画和遮罩;bilinear 偏软,但没有光晕。缩小则是另一回事:在 ComfyUI 里用 bilinear 和 bicubic 缩小会出摩尔纹,应该改用 lanczos 或 area。
这几个名字会出现在 ComfyUI 的 Upscale Image 节点、FFmpeg 的 scale 滤镜,以及大多数图片编辑软件里。本文会讲清每种算法在做什么、我们实测出了什么、不同任务该选哪一种,以及传统缩放算法的尽头在哪里、AI 放大又从哪里开始。
目录
- 什么是放大算法
- 五种算法,一句话说清
- 我们的测试:一张照片,五种算法,两个工具
- 光晕:边缘更锐的代价
- ComfyUI 里缩小图片的陷阱
- 该选哪种算法?
- FFmpeg:对应的 flags 写法
- 缩放算法不够用的时候
- 在 KwaFlux 里对比两种放大
- 问题排查
- 常见问题
什么是放大算法
放大算法(也叫重采样滤镜)是程序改变图像尺寸时,用已有像素算出新像素的规则。 它决定参考周围多少个像素、每个像素占多大权重。它造不出拍摄时没记录下来的细节,只决定中间补出来的像素看起来是更柔和还是更清脆。
ComfyUI 的 Upscale Image 节点提供五种:nearest-exact、bilinear、area、bicubic 和 lanczos。处理潜空间(latent)的放大节点把 lanczos 换成了 bislerp,后者是给潜空间数据用的,不是给成品图片用的。
五种算法,一句话说清
| 算法 | 新像素怎么来 | 看起来 |
|---|---|---|
| nearest-exact(最近邻) | 直接复制距离最近的原像素 | 一格一格的方块,不模糊,没有光晕 |
| bilinear(双线性) | 对最近的 2 × 2 个像素取平均 | 柔和平滑,没有光晕 |
| area(区域平均) | 把落进新像素范围的原像素全部取平均 | 缩小时干净;放大时要看具体工具 |
| bicubic(双三次) | 按一条曲线给最近的 4 × 4 个像素加权 | 比双线性锐,有轻微光晕 |
| lanczos 算法 | 用基于 sinc 函数的曲线给更大范围加权(Pillow 和 FFmpeg 里是 6 × 6) | 边缘最清脆,光晕也是这几种里最明显的 |
旁注: 在 ComfyUI 里,其中四种算法都走 PyTorch 的 interpolate 函数,用的是默认参数。lanczos 走的是另一条路:先把每张图转成 8 位,再在 CPU 上用 Pillow 库缩放。所以批量处理很多帧时它可能更慢,而且画面会被取整到 8 位。
我们的测试:一张照片,五种算法,两个工具
我们找了一张细节丰富的 1920 × 1080 城市夜景照片,把宽高各缩到四分之一(480 × 270),再用每种算法放大回去,然后用 PSNR 和原图比较。PSNR 衡量像素层面有多接近原图,数值越高越接近。
| 算法 | ComfyUI 放大 4 倍 | FFmpeg 放大 4 倍 | ComfyUI 放大 2 倍 |
|---|---|---|---|
| nearest-exact(FFmpeg 里叫 neighbor) | 测得 30.40 dB | 测得 30.40 dB | 测得 36.55 dB |
| bilinear(双线性) | 测得 33.04 dB | 测得 33.04 dB | 测得 40.35 dB |
| area(区域平均) | 测得 30.40 dB | 测得 33.04 dB | 测得 36.55 dB |
| bicubic(双三次) | 测得 35.39 dB | 测得 35.14 dB | 测得 43.62 dB |
| lanczos 算法 | 测得 35.56 dB | 测得 35.58 dB | 测得 44.46 dB |
另外三张样张的排序相同,只有画面最柔和的那张,4 倍放大时 bicubic 比 lanczos 高了 0.07 dB。有两点值得注意:
- 放大时,两个工具里的 area 不是一回事。 在 ComfyUI 里,它算出的画面和 nearest-exact 逐像素相同;在 FFmpeg 里,它和 bilinear 逐像素相同。区域平均只有在多个原像素合并成一个新像素时才起作用,也就是缩小的时候。
- lanczos 和 bicubic 差距很小。 4 倍放大时 0.2 到 0.4 dB 的差别肉眼很难分辨。真正拉开差距的,是从 bilinear 换到这两种之一。

光晕:边缘更锐的代价
bicubic 和 lanczos 显得更锐,是因为它们的加权曲线有一段低于零。到了硬边缘旁边,暗的一侧会被压得比原值更暗,亮的一侧会被推得比原值更亮。我们用一条从灰度 40 跳到 215 的边缘,放大 4 倍测了一下:
| 算法 | 边缘旁最暗的值 | 边缘旁最亮的值 |
|---|---|---|
| nearest-exact 和 bilinear | 40(没有过冲) | 215(没有过冲) |
| FFmpeg 的 bicubic | 灰度 25 | 灰度 230 |
| ComfyUI 的 bicubic | 灰度 20.8 | 灰度 234.2 |
| lanczos(Pillow 和 FFmpeg) | 灰度 19 | 灰度 236 |
在普通照片上,这一点很少能看出来。但在文字、线稿、界面截图,以及暗色天空里的亮灯旁边,它会变成一圈细细的亮边或暗边。
在 ComfyUI 里,bicubic 还可能让数值超出纯白或纯黑的范围。我们的夜景照片放大 4 倍后,裁剪之前的取值范围是正常范围的 -4.6% 到 113%。裁剪会把超出的部分藏起来,但很亮的区域会损失一点层次。
ComfyUI 里缩小图片的陷阱
很多人也用同一个 Upscale Image 节点来缩小图片,比如把图缩到模型要求的输入尺寸。恰恰在这里,算法选错影响最大。
缩小图片时,那些对新尺寸来说太细的纹理必须先被模糊掉,否则它们会折叠成并不存在的假图案,也就是混叠或摩尔纹。PyTorch 的 interpolate 只有在你明确要求时才会先做这一步模糊,而 ComfyUI 没有要求。所以在 ComfyUI 里,用 bilinear 和 bicubic 缩小时参考的像素太少了。
我们把一张由细密圆环组成的测试图从 1024 像素缩到 256 像素,量了残留的假图案有多强:0 最理想,90 左右说明假图案一点没被压住。
| 算法 | 残留的假图案 |
|---|---|
| ComfyUI 的 bicubic | 测得 93.3 |
| ComfyUI 的 nearest-exact | 测得 90.1 |
| ComfyUI 的 bilinear | 测得 73.4 |
| ComfyUI 的 area | 测得 29.3 |
| ComfyUI 的 lanczos(经 Pillow) | 测得 11.8 |
| FFmpeg 的 bicubic | 测得 13.0 |
| FFmpeg 的 lanczos | 测得 11.8 |
| FFmpeg 的 bilinear | 测得 10.3 |

FFmpeg 和 Pillow 会自动先模糊再缩小,所以它们的平滑类算法表现都不错。在 ComfyUI 里缩小,请用 lanczos 或 area。
该选哪种算法?
| 任务 | 选择 | 理由 |
|---|---|---|
| 放大照片或视频画面 | lanczos 或 bicubic | 细节最多;自然画面上的光晕通常看不出 |
| 放大文字、界面或线稿 | bilinear,嫌软再换 bicubic | 避免锐利边缘旁出现描边 |
| 放大像素画或遮罩 | nearest-exact(最近邻) | 保住硬像素边缘和精确数值 |
| 在 ComfyUI 里缩小 | lanczos 或 area | 那里只有这两种能压住摩尔纹 |
| 在 FFmpeg 或修图软件里缩小 | bicubic、lanczos 或 bilinear 均可 | 都会先模糊再缩小,按喜好选 |
| 在 ComfyUI 里放大潜空间 | bislerp 或 bilinear | 潜空间节点不提供 lanczos |
小技巧: 如果放大之后还要锐化,或者再过一遍 AI 模型,放大算法就没那么重要了,因为下一步会重新塑造边缘。默认用 bicubic 就行,把精力放在后面那一步上。
FFmpeg:对应的 flags 写法
FFmpeg 的 scale 滤镜在不写 flags 时默认用 bicubic。我们实测,不写 flags 得到的文件和 flags=bicubic 逐字节相同。
# Upscale to 1080p with Lanczos
ffmpeg -i input.mp4 -vf "scale=1920:1080:flags=lanczos" -c:v libx264 -crf 18 -c:a copy output.mp4
# Keep the aspect ratio: set the height, let FFmpeg pick an even width
ffmpeg -i input.mp4 -vf "scale=-2:2160:flags=lanczos" -c:v libx264 -crf 18 -c:a copy output_2160p.mp4
# Pixel art: nearest neighbor, exact 4x
ffmpeg -i sprite.png -vf "scale=iw*4:ih*4:flags=neighbor" sprite_4x.png第一条把视频放大到 1080P,第二条保持原比例、只指定 2160 的高度,第三条把像素画按最近邻精确放大 4 倍。FFmpeg 还有 spline,在我们的测试里得分介于 bicubic 和 lanczos 之间(35.39 dB),光晕比 lanczos 略小。更多缩放细节见怎样把 720p 视频放大到 1080p。
缩放算法不够用的时候
上面每一种算法,都是用固定公式从旧像素算出新像素。它们分不清人脸和墙面,也找不回相机当时没拍下来的纹理。如果 4 倍放大后不管选哪种算法都发软,那是缩放算法的上限,不是设置选错了。
AI 放大的思路不同:训练好的模型根据它对真实画面的认识,预测出合理的细节,顺便还能去掉压缩方块和噪点。代价是,补出来的细节是预测出来的。AI 放大与双三次、Lanczos 插值的区别把两种思路放在一起比较,480P 放大到 4K:AI 能找回什么则讲了 AI 也有做不到的地方。
在 KwaFlux 里对比两种放大
KwaFlux 的对比视图会把传统放大的结果和 AI 结果并排显示,你可以在自己的素材上判断差别:
- 导入一段视频或一张图片,打开画质修复。
- 把输出分辨率设成需要的尺寸,比如 2× 或 4K。
- 渲染 1、3 或 5 秒的预览,不需要账号。
- 打开滑杆对比。“处理前”一侧是把源文件拉到输出尺寸的结果,“处理后”一侧标注了 AI 超分后的分辨率。

照片也一样,可以在图片增强里按同样步骤操作。一份授权包含 23 个视频模块、15 个照片模块、4 个音频工具,以及字幕和文件工具,没有点数,也不按分钟收费;永久授权原价 199.99 美元,一次付清。
问题排查
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 文字或灯光周围有一圈细亮边 | lanczos 或 bicubic 的过冲 | 换成 bilinear,或者用 FFmpeg 的 bicubic(过冲更小) |
| 在 ComfyUI 里缩小后出现波纹或假圆环 | bilinear 或 bicubic 没做抗锯齿 | 缩小时改用 lanczos 或 area |
| ComfyUI 里用 area 放大,画面一格一格 | 整数倍放大时 area 就等于 nearest-exact | 放大改用 bicubic 或 lanczos |
| 大批量帧用 lanczos 很慢 | ComfyUI 通过 Pillow 在 CPU 上逐帧缩放 | 长序列改用 bicubic,或在 ComfyUI 外缩放 |
| 放大 4 倍后怎么都发软 | 源文件里本来就没有这些细节 | 用 AI 放大,或者少放大一些 |
结语
放大选 lanczos 或 bicubic,像素必须保持锐利时选 nearest-exact;在 ComfyUI 里缩小,选 lanczos 或 area。算法改变的是边缘的样子,造不出细节。源文件里没有的细节,要交给 AI 放大。
把 AI 放大和传统缩放放在一起看
KwaFlux 在你自己的 GPU 上运行 AI 视频放大和图片增强。AI 处理在你的 GPU 上本地完成,媒体文件不会为了处理而上传。可在 Windows 10(64 位,1809 或更新版本)、Windows 11,以及搭载 Apple Silicon 的 macOS 12 或更新版本上运行。预览不需要账号:视频可预览 1、3 或 5 秒,图片可预览整张。仅在导出、转换、文件修复和从链接下载文件时需要登录并购买付费方案。
用你自己的素材试试效果
下载 KwaFlux,付费前先用自己的素材免费预览效果——无需注册,在你的 GPU 上处理,处理不需要上传媒体文件。 视频预览可选 1、3或5 秒;防抖预览可选 5、15或30 秒。
常见问题
lanczos 比 bicubic 好吗?
通常略好一点。我们 8 组对比里有 7 组 lanczos 得分更高,最多高 0.9 dB,肉眼很难分辨;它在边缘处的过冲也稍大一些。大多数素材用哪种都行,文字旁边出现光晕时选 bicubic。
ComfyUI 里的 nearest-exact 是什么意思?
它就是最近邻缩放,只是修正了像素中心点的取整方式。每个新像素都复制离它最近的原像素,所以边缘保持锐利、颜色保持精确。适合像素画和遮罩,不适合照片。
放大时该用 area 吗?
不该。在 ComfyUI 里按整数倍放大,area 的结果和 nearest-exact 相同。area 是为缩小设计的,作用是把要合并的像素取平均。
动漫用哪种放大算法比较好?
没有通用的答案。平涂风格的动漫,可以先试 bicubic;lanczos 线条更利落,但黑色描线旁边的光晕也更明显。
放大算法会影响文件大小吗?
只有一点点。文件大小主要由输出分辨率和编码设置决定。更锐的算法会留下更多细小边缘,在同样的画质设置下可能多占一点码率。
bislerp 是什么?
它是 ComfyUI 用来放大潜空间数据的算法。潜空间是扩散模型内部使用的压缩表示。bislerp 沿着曲线在潜空间数值之间过渡,而不是走直线,只出现在潜空间放大节点里。
参考资料
- ComfyUI source, `nodes.py` (ImageScale, LatentUpscale) and `comfy/utils.py` (common_upscale, lanczos, bislerp) (2026-10-29 查阅)
- PyTorch documentation, `torch.nn.functional.interpolate` (2026-10-29 查阅)
- Pillow documentation, "Filters" (resampling filters) (2026-10-29 查阅)
- FFmpeg documentation, "Scaler Options" (sws_flags) (2026-10-29 查阅)


