π RTX Audio Muxer (Instant)
Put audio on a video without re-encoding it β in milliseconds
- audio
- final_video_path
FFmpeg has a flag called -c:v copy, and this node is basically a friendly wrapper around it. It takes your freshly upscaled video, injects a soundtrack, and does it in milliseconds - because it never touches the video data at all. The video stream is copied byte-for-byte, so the RTX upscale quality is exactly what you rendered, not a second-generation re-encode.
It's from the ComfyUI-RTX-Video-Suite pack, and it's the tool you reach for after an upscale when the result is silent and you want music, narration, or a cleaned-up track on it.
How it works
The mechanism is a hand-built FFmpeg command. The video goes in untouched (-c:v copy), the audio is encoded to AAC (cheap, and far less risky than re-encoding video), the streams are mapped separately, and -shortest cuts to whichever stream ends first. Two of the inputs are then applied as FFmpeg filters:
audio_volume(0.0 to 10.0, default 1.0) becomesvolume=N. Doubling or halving a track is one filter.audio_delay_sec(Β±10 seconds) becomes an-itsoffseton whichever input needs shifting. Positive delays the audio, negative advances it - handy when a voiceover is a few frames off.
You give it audio one of two ways. Connect a raw AUDIO tensor (from something like an audio separator or a load-audio node) and the node writes it to a temp WAV with torchaudio, muxes it, then deletes the temp file. Or connect audio_path - a plain path to an existing .mp3 or .wav - and it uses that file directly.
The inputs and outputs that matter
video_path(required) - the upscaled video. It has to be a saved file on disk, not raw IMAGE tensors; the tooltip says so and it means it.audio(optional AUDIO tensor) oraudio_path(optional STRING) - provide one. Here's the gotcha: if you provide neither, the node doesn't error. It prints a warning and passes the video through untouched, returning the original path. If you wired everything up and got your input back unchanged, this is why.filename_prefix(defaultRTX_Muxed) - the output lands inoutput/rtx_muxed/as<prefix>_<timestamp>.mp4, so you don't have to worry about collisions.final_video_path(STRING output) - the path of the muxed file, ready to feed a video player node or a saver.
Installing it
Part of ComfyUI-RTX-Video-Suite, so: ComfyUI Manager (search the pack title) or
cd ComfyUI/custom_nodes
git clone https://github.com/uczensokratesa/ComfyUI-RTX-Video-Suite.git
then restart. This node does not need the NVIDIA VFX SDK - it's pure FFmpeg. What it absolutely does need is FFmpeg installed and on your PATH. Check with:
ffmpeg -version
If that returns nothing, install FFmpeg (winget on Windows, your package manager elsewhere) and restart ComfyUI.
Common issues
- FFmpeg errors on mux - usually a missing or broken FFmpeg install. The node catches the error and falls back to returning the original video path, so watch the console for the
[RTX Muxer] FFmpeg Errorline. - No audio comes through - you forgot to connect
audiooraudio_path, or the file path is wrong. Remember the silent passthrough. - You wanted the video's own audio kept - this isn't the node for that. That's the
keep_audio/add_audiotoggle on the RTX upscale nodes, which stream-copies the original audio and subtitles during the upscale itself. This muxer is for adding a different soundtrack on top.
The delay and volume controls cap at sane ranges, so the main way to mess this up is expecting it to be the "keep the original audio" node. It's not. It's the instant soundtrack-injector - and for that job, nothing else in the pack is faster.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| video_path | STRING | Path to the source video file (Must be a saved file, not raw IMAGE tensors) | |
| filename_prefix | STRING | RTX_Muxed | Prefix for the output file. Timestamp will be added automatically. |
| audio_volume | FLOAT | 1.00β10 | 1.0 is original volume. 2.0 is double volume, 0.5 is half. |
| audio_delay_sec | FLOAT | 0.00-10β10 | Positive values delay the audio. Negative values advance the audio. |
| audioopt | AUDIO | Connect raw AUDIO output from nodes like Audio Separator | |
| audio_pathopt | STRING | Or connect a string path to an existing audio file |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| final_video_path | STRING | β |