Audio output from Load Video nodes does not handle no-audio case when applied as input to Video Combine

在 ComfyUI 中使用 VideoHelperSuite 自定义节点,通过 Load Video 节点加载 GIF 或无音频轨道的 MP4 文件,然后将节点的 audio 输出连接到 Video Combine 节点(输出格式配置为支持音频的格式,如 .mp4 )时触发。

Audio output from Load Video nodes does not handle no-audio case when applied as input to Video Combine

Audio output from Load Video nodes does not handle no-audio case when applied as input to Video Combine

快速结论:当使用 Load Video 节点加载无音频文件(如 GIF 或无音轨的 MP4)并将 audio 输出连接到 Video Combine 节点时,会触发 ffmpeg 调用失败,导致工作流报错中断。优先排查 VideoHelperSuite 是否为最新版本,并注意 workflow 中 audio 连线是否正确处理了无音频的情况。

问题场景

在 ComfyUI 中使用 VideoHelperSuite 自定义节点,通过 Load Video 节点加载 GIF 或无音频轨道的 MP4 文件,然后将节点的 audio 输出连接到 Video Combine 节点(输出格式配置为支持音频的格式,如 .mp4)时触发。

报错原文

Error occurred when executing VHS_VideoCombine:

VHS failed to extract audio from /workspace/ComfyUI/input/123 (12).mp4:
...
Output #0, f32le, to 'pipe:':
Output file #0 does not contain any stream

File ".../videohelpersuite/nodes.py", line 523, in combine_video
    channels = audio['waveform'].size(1)
File ".../videohelpersuite/utils.py", line 194, in __getitem__
    self._dict = get_audio(self.file, self.start_time, self.duration)
File ".../videohelpersuite/utils.py", line 173, in get_audio
    raise Exception(f"VHS failed to extract audio from {file}:" ...)

原因分析

该问题由多个小错误叠加引起:

  • get_audio 函数内部对 ffmpeg 的子进程调用没有做完善的错误捕获,当尝试从无音频媒体文件中提取音频时,ffmpeg 抛出 subprocess.CalledProcessError
  • 该异常被错误地当作对最终音频编码调用的失败来捕获,而非对 get_audio 自身的异常处理。
  • get_audio 仅捕获了 stdout 而未捕获 stderr,因此 e.stderrget_audio 内部异常时未被正确设置。
  • 无音频输入时,audio['waveform'].size(1) 试图访问不存在的音频张量,导致 NoneType 错误。

环境排查

  • 确认 ComfyUI-VideoHelperSuite 版本是否为最新(该 Issue 于 2024-02-08 关闭,更早版本可能仍存在此 Bug)。
  • 确认系统 ffmpeg 版本是否正常工作(建议 4.4+)。
  • 检查 Load Video 节点的输入文件是否为真正的无音频格式(如 GIF)或 MP4 无音轨。

解决步骤

  1. 更新 VideoHelperSuite 到最新版本。 修复已在 2024-02-08 的提交中实施,关键改动包括:在 get_audio 的子进程调用中加入错误捕获;当连接的音频输入无法解析为有效的音频流时,Video Combine 跳过音频处理阶段。
  2. 升级后,当 Load Video 节点加载无音频文件并将 audio 连线到 Video Combine 时,会在控制台打印音频提取失败的错误原因,但工作流不会中断,会如同未连接 audio 一样继续执行。
  3. 如果仍遇到类似报错,检查 ffmpeg 是否正确安装并可在命令行直接调用。
  4. 考虑在工作流中,对无音频的输入源不连接 audio 输出到 Video Combine,或使用条件节点进行判断。

验证方法

使用 Load Video 节点加载一个 GIF 文件(或一个确认无音轨的 MP4 文件),将 audio 输出连接到 Video Combine 节点(输出格式选 .mp4)。运行工作流后,应不再抛出异常中断,控制台会显示类似“VHS failed to extract audio from …”的警告信息,但 Video Combine 仍会正常输出无音频的视频文件。

参考来源

Kosinkadink/ComfyUI-VideoHelperSuite #153

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 7448

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注