FaceFusion 3.4.1 版本:报错“ [FACEFUSION.CORE] Copying image failed” 大分辨率图像处理失败的解决方案与 Bug 探究

背景

版本 3.4.1 ·Facefusion/Facefusion

基于 EPGF 架构理念的 FaceFusion 3.4.1 本地 .venv 部署教程(非 Conda 环境部署优化版)

FaceFusion 是一个功能强大的开源人* 操作平台,广泛应用于各种图像和视频处理任务。最近,我们注意到 GitHub 社区在最新的 3.4.1 版本(发布于 2025 年 9 月 12 日)FaceFusion 中,处理高分辨率图像时会出现一个重复且棘手的错误:[FACEFUSION.CORE] Copying image failed

[FACEFUSION.CORE] Copying image failed

这个错误尤其在处理竖向大分辨率图片时非常常见,但在横向大分辨率图像上也可能出现。与此形成鲜明对比的是,较旧但稳定的 3.3.2 版本没有出现这个问题

为了解决这一问题,我们进行了初步排查,包括:

  • FFmpeg 版本检查:确认问题并非由旧版 FFmpeg 引起。我们已将 FFmpeg 升级到最新的 8.0 版本,但 FaceFusion 3.4.1 的错误依然存在。
  • 文件路径与权限:排除了文件路径不正确或权限不足的可能,因为即使在管理员权限下,问题依然存在。
  • 系统内存限制:尝试在 facefusion.ini 中调整 system_memory_limit 参数,但并未解决问题。

这些排查结果表明,[FACEFUSION.CORE] Copying image failed 错误并非由外部环境或依赖项引起,很可能是 FaceFusion 3.4.1 自身代码中存在的一个 Bug。


诊断问题:如何运用 --log-level debug

在排查类似问题时,利用程序的调试日志至关重要。FaceFusion 提供了一个非常有用的命令行参数 --log-level debug。通过在运行命令时添加这个参数,程序会输出更详细的内部执行过程,包括 FFmpeg 的详细错误信息。

在我们的案例中,通过运行以下命令:

python facefusion.py run --open-browser --log-level debug

我们得到了关键的 FFmpeg 错误日志。这些日志清晰地指出,程序在处理原始图像时,FFmpeg 尝试初始化编码器并分配内存,但在这一步失败了。核心错误信息是 Cannot allocate memory,并附带了错误代码 -12。这表明问题出在 FFmpeg 处理高分辨率图像的中间步骤,而不是简单的文件权限或路径错误。


解决方案之一:调整 output_image_scale 参数

既然 FFmpeg 无法处理原始分辨率的大图,最直接的解决方案就是让程序在处理开始前就降低图像的分辨率。虽然 output_image_scale 是一个输出参数,它影响的是最终图像的尺寸,但我们可以利用它来间接控制程序在内部处理时的分辨率。

操作步骤:

  1. 打开 facefusion.ini 配置文件。
  2. 找到 [output_creation] 部分。
  3. 将 output_image_scale 参数设置为一个小于 1.0 的值,例如 0.5
[output_creation]
output_image_quality = 100
output_image_scale = 0.5
...

工作原理:

当 output_image_scale 设置为 0.5 时,程序会计算出新的目标分辨率,并据此调整 FFmpeg 命令。这样,FFmpeg 在执行复制图像到临时目录的操作时,处理的是一个分辨率减半的图像,从而大大降低了内存需求,避免了 Cannot allocate memory 错误。日志也证实了这一点:当分辨率从 1664x2496 降至 832x1248 时,Copying image succeeded


解决方案的局限性与 Bug 探讨

虽然调整 output_image_scale 参数可以有效绕过 Copying image failed 错误,但这并非一个完美的解决方案,尤其是在 FaceFusion 3.4.1 版本中存在以下瑕疵:

  • 分辨率限制:这种方法迫使我们在处理时必须降低分辨率。如果你想将图像放大到原始大小或更大,这个错误就会再次出现。你无法通过将 output_image_scale 调高到 2.0 来直接进行放大,因为在处理开始时,程序仍然需要处理原始分辨率的大图,这又会触发内存错误。
  • 与 3.3.2 版本的差异:在旧版 3.3.2 中,同样的操作通常不会导致此问题,这暗示 3.4.1 版本在处理图像的底层逻辑或 FFmpeg 参数调用上可能存在一些改变,导致了这种新的内存瓶颈。这可能是 facefusion.ini 中的配置无法完全解决的 Bug。

结论与展望

[FACEFUSION.CORE] Copying image failed 错误在 FaceFusion 3.4.1 版本中是一个显著的问题,尤其影响高分辨率图像的处理(视频同理)。通过调整 output_image_scale 参数可以作为一种临时的权宜之计,以确保程序可以正常运行。然而,这种解决方案的局限性显而易见,它并不能满足所有用户对高分辨率输出的需求。

我们认为,这很可能是 FaceFusion 3.4.1 版本中需要修复的一个 Bug。在等待开发者发布更彻底的修复方案的同时,社区也在积极探索其他可能的方法,例如修改代码中的 FFmpeg 调用参数,或者寻找更高效的图像处理库来替代。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐