Video + Audio Combiner
Video + Audio Combiner — mux a soundtrack onto your render without leaving ComfyUI
- audio
- vhs_filenames
- output_path
Your generated video comes out of ComfyUI silent, every time, and then you go mux a soundtrack onto it in some separate tool. VideoAudioCombiner is the node that does the muxing inside the graph: point it at a video file, give it an audio source, and it runs ffmpeg to produce a combined file. No leaving ComfyUI, no command line.
If you're doing any kind of video work - LTX, Wan, HunyuanVideo renders that you actually want to publish or share - this is the "last mile" node. It's designed to sit at the end of the chain, take whatever video you produced, and hand you back a path to a finished file with sound.
How it works
It shells out to ffmpeg, which is the right call - this is exactly the job ffmpeg was built for, and reinventing it in Python would be madness. The node looks for ffmpeg in two places: it first tries to reuse the ffmpeg path bundled with VideoHelperSuite (VHS), and if that's not present it falls back to system ffmpeg. So if you have VHS installed, no extra setup; if not, you need ffmpeg on your PATH.
It takes a video file, optionally seeks into the audio at audio_start_seconds, and if loop_audio is on it loops a short audio track to fill the video's duration. The output lands with your chosen output_filename and comes back as an output_path string you can inspect or log. It supports -shortest-style behavior so the output ends when the video ends, and it handles the audio type conversion (an audio tensor input gets converted to a temporary wav via ffmpeg before muxing).
Inputs and outputs
video_path(STRING) - path to the video (mp4, mkv, avi...).audio_start_seconds(FLOAT, default 0) - where to start in the audio.loop_audio(BOOLEAN) - loop a short audio file to fill the video.output_filename(STRING, default "output_with_audio") - output name, no extension.
Optional inputs give you three ways to provide audio: audio (an AUDIO tensor, e.g. from VHS audio nodes), audio_path (a file path), or vhs_filenames (feed the video in via VHS's own filename output). Output is output_path (STRING).
Installing it
Part of the AnotherUtils pack:
cd ComfyUI/custom_nodes
git clone https://github.com/marcoc2/ComfyUI-AnotherUtils.git
Restart ComfyUI, or install via ComfyUI Manager (search "AnotherUtils"). The real dependency is ffmpeg: if you have VideoHelperSuite installed, it reuses VHS's bundled ffmpeg; otherwise make sure ffmpeg is installed and on your PATH (on Windows, that's usually a manual PATH addition).
Gotchas
The ffmpeg dependency is where people stumble. If the node fails with a "ffmpeg not found"-style error and you don't have VHS, that's not a broken node - it's a missing binary. Install ffmpeg system-wide or install VHS and restart.
Also remember it operates on files, not in-memory frames. You need an actual video file on disk as video_path - this isn't taking a batch of frames and encoding them (that's the video encoder's job). And the output is a fresh file, not an in-place edit, so make sure your output_filename isn't the same as the input or you'll overwrite your source. For the standard "render silent video, add soundtrack, export" flow, this is a tidy way to finish.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| video_path | STRING | Path to the input video file (mp4, mkv, avi, etc.) | |
| audio_start_seconds | FLOAT | 0.00–36000 | Start position in the audio file (seconds) |
| loop_audio | BOOLEAN | false | If audio is shorter than video, loop it to fill the duration |
| output_filename | STRING | output_with_audio | Output filename (without extension) |
| audioopt | AUDIO | Audio input from VHS or other audio nodes | |
| audio_pathopt | STRING | Alternative: direct path to audio file | |
| vhs_filenamesopt | VHS_FILENAMES | Alternative: video from VHS Video Combine node |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_path | STRING | — |