ComfyUI Node

UV Audio Mux

Stick audio onto a silent render without re-encoding the picture

By GeekatplayStudio·Created 5 months ago·Updated 5 months ago· 0
UV Audio Mux
    • output_path
    video_path
    audio_path
    output_pathmuxed_output.mp4
    overwritetrue

    Generated video is almost always silent, and the fastest way to fix that isn't a node at all - it's this one. UV_AudioMux takes a finished video file and a separate audio file and merges them into one output. If you've ever run a 90-second render, only to realize you need to glue a music track onto it in a video editor afterward, this is the node that skips that detour.

    It's an output node (a terminal one), so it doesn't feed anything downstream - you wire your video and audio paths in, it does the merge, done. It's also one of the simplest nodes in the pack, which is exactly right: muxing is a job with no interesting parameters.

    How it works

    Under the hood it runs ffmpeg with a deliberately boring command:

    • maps the first video stream from your video file
    • maps the first audio stream from your audio file
    • copies the video stream (-c:v copy) - no re-encode, so the picture is untouched and the job is near-instant
    • re-encodes the audio to AAC
    • -shortest, so the output stops when the shorter of the two inputs runs out

    That stream-copy detail is the one worth remembering. Because the video is copied, the container has to accept the codec as-is: muxing a ProRes master into an .mp4 will fail fast, and h264 into .mov usually won't play nicely. Keep the output extension aligned with the video codec - mp4 for h264/hevc, mov for ProRes, mkv/webm for AV1.

    The inputs are as thin as the node: video_path, audio_path, output_path (default muxed_output.mp4), and overwrite (default on, so it clobbers an existing file without asking). One small gotcha on overwrite: with it on, ffmpeg runs with -y, so if you point it at a file you care about, it's gone.

    Where the audio comes from

    Two ways. Drag a file path in directly, or - the tidy trick - wire UV_LoadVideo's audio_ref output into audio_path. That output is just the source video's own path when the file has audio, so you can re-render a clip's frames through the pack and then re-attach the original sound in one wire. UV_SaveVideo has its own built-in audio_mode: mux that does roughly the same thing at export time; this node is for when you've already got the video file and just want to attach audio without re-encoding the picture.

    Install

    Same story as the whole pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/GeekatplayStudio/ComfyUI-UniversalVideoIO
    cd ComfyUI-UniversalVideoIO
    pip install -r requirements.txt
    

    Restart ComfyUI and it's there. No models, no heavy deps - just ffmpeg, which the pack resolves from your system PATH first and then from the imageio-ffmpeg bundle. If the mux fails with an ffmpeg error, your binary is the first thing to check; a build without an AAC encoder is rare but real.

    One more honest note: the audio always lands as AAC, so a lossless or high-bitrate source gets squashed to delivery-grade quality. For a music bed on a social clip that's completely fine. For an archival audio master, this isn't the node - but then, neither is anything else in this pack.

    CategoryUniversalVideoIO

    Inputs (4)

    NameTypeDefaultDescription
    video_pathSTRING
    audio_pathSTRING
    output_pathSTRINGmuxed_output.mp4
    overwriteBOOLEANtrue

    Outputs (1)

    NameTypeDescription
    output_pathSTRING