NS Create Video
Mux your processed audio back onto the video
- video
- audio
- video
NS Create Video is the "put it back together" half of the symbiotica-ai/comfyui-nodes video utility pair. You took a video apart with NS Get Video Components, processed the audio (or generated a fresh music track), and now you want it back as one file with the new sound on it. This node muxes a VIDEO with an optional AUDIO, and can re-time it to a different fps while it's at it.
It's the kind of node that's boring until you need it, then it's the only thing that works: ComfyUI has plenty of video nodes but the specific "video file + audio tensor → one mp4" move isn't something you want to hand-roll with a subprocess every time.
How it works
The video is written to a temp file, your AUDIO (a {"waveform": ..., "sample_rate": ...} dict, standard ComfyUI audio) is written to a temp WAV, and ffmpeg muxes them together - video re-encoded with libx264, audio as AAC, -shortest so the shorter of the two wins. If no audio is wired in, it maps whatever audio the source already has (or none, if there is none). Wire the optional fps and it applies an fps= filter, so you can also use this as a frame-rate normalizer.
Inputs
- video (required) - the VIDEO to mux into.
- audio (optional) - an AUDIO dict. Wire it and it becomes the track; leave it empty and the source's own audio (if any) carries through.
- fps (optional, default 30) - re-time the output to this frame rate, 1–120.
One output: video, the finished file. It lands in ComfyUI's output directory as created_<timestamp>.mp4, so it'll show up as a normal output.
Install
Part of symbiotica-ai/comfyui-nodes - ComfyUI Manager search "Symbiotica", or clone + pip install -r requirements.txt. Needs ffmpeg on PATH. No API key.
Gotchas
The classic audio-muxing gotcha is length: with -shortest in play, a longer audio track gets cut to the video's length, which is usually what you want for a reel but will silently chop your music if you expected it to overrun. And if your AUDIO tensor has a batch dimension (shape 1, C, S), the node squeezes it off - fine for a mono/stereo track, but a batch of audio won't behave the way you hope; pass one track at a time. Also worth knowing: this is a re-encode, not a copy - quality is set by the ffmpeg defaults here, so don't use it as your final delivery step if you care about bit-perfect video.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| audioopt | AUDIO | — | |
| fpsopt | FLOAT | 30.001–120 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |