Video Concat (FFmpeg)
Stitch Two Videos in ComfyUI Without Touching Your VRAM
- source_video
- extend_video
- video
Here's the problem this node solves: most ComfyUI video nodes treat a video as a pile of frames. They decode every frame into a tensor, run them through the graph, and compress them back into a file. That's fine for short clips, but at high resolution with lots of frames it eats RAM and VRAM like it's going out of style. Video Concat (FFmpeg) skips all that. It hands your two video files straight to FFmpeg, which stitches them together with stream filters that never decode into tensors, so memory stays flat no matter how long or how big the clips are.
It's the pack's flagship node, and honestly its most useful one: you generate two Wan or LTX clips, want them as one continuous video, and this is the glue. The whole pack is a one-person, "vibe-coded by GLM5.2" project per the README - brand new, essentially no community track record, so treat it as an experiment with genuinely useful mechanics rather than battle-tested infrastructure. There are no model downloads and no heavy dependencies, so the cost of trying it is low.
How it works
The node takes both files, probes their metadata with ffprobe, and builds an FFmpeg filter graph:
linear_crossfaderuns anxfade(fade transition) over the two video streams and anacrossfadeon the audio. That's the smooth one you'll use when two shots are meant to blend.cut_sourcedrops the last N frames of the first video, then hard-concats.cut_extenddrops the first N frames of the second. Use these when you just want to trim a duplicated or janky frame at the seam.overlap = 0skips the transition entirely - plain append, which is also how you avoid any resampling weirdness.
If the two videos have different frame rates, it converts the second one to match the first. On the audio side, it resamples both streams to a common sample rate (your pick via audio_sample_rate) and - nice touch - injects silence with anullsrc if one video has no audio, so a silent clip doesn't break the concat. The result is encoded to an mp4 (libx264, crf 23, AAC audio) in ComfyUI's temp folder and returned as a VIDEO.
The inputs that matter
Three of them, really:
source_video/extend_video(VIDEO): your two clips. They must be the same resolution - the node hard-errors if they're not, and it won't rescale for you. Fix that upstream (re-encode one to match) before you wire them in.overlap(INT, default 15): the transition length in frames, not seconds. It's measured against the source video's fps.overlap_type:linear_crossfadeis the default and what you probably want for blending; the two cut modes for hard seams.
audio_sample_rate only matters when the clips' audio doesn't match - pick which one the other should conform to.
The single video output is the stitched clip. Wire it into any node that consumes a VIDEO - a preview, a save-to-file, or a further FFmpeg pass.
Installing it
ComfyUI Manager, search "ComfyUI-FFmpeg-Video", install, restart. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/bbaudio-2025/ComfyUI-FFmpeg-Video
cd ComfyUI-FFmpeg-Video
pip install -r requirements.txt # installs ffmpeg-python
Two real prerequisites: the Python binding ffmpeg-python (that's the only pip dependency) and the FFmpeg binary itself on your PATH - the node shells out to it, and it won't pretend otherwise. On Windows, grab the gyan build or winget install ffmpeg, and make sure ComfyUI's process can see it.
Common issues
- "Both videos must have the same resolution" - the most common stop. Resize one side to match before concatenating.
- Overlap longer than the source clip - it errors rather than silently misbehaving. Shrink
overlap. - "FFmpeg binary is not installed" - your PATH, not the node. Install FFmpeg.
- Given it's vibe-coded, verify your output the first few times - the README literally suggests searching with AI when it misbehaves, which is a fair summary of the support situation.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| source_video | VIDEO | The first (source) video to concatenate. | |
| extend_video | VIDEO | The second (extend) video to append. | |
| overlap | INT | 150–10000 | Number of overlap frames for the transition. |
| overlap_type | COMBO | linear_crossfade: smooth fade between the two videos. cut_source: drop the last N frames of source, then concat. cut_extend: drop the first N frames of extend, then concat. | |
| audio_sample_rate | COMBO | When the two videos have different audio sample rates, resample the other video's audio to match the selected one. source_video: use source video's sample rate. extend_video: use extend video's sample rate. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |