๐ผโ๐น images to video (FFMPEG Save Video)
FFmpeg frame-to-MP4 with an audio track
- images
- audio
- comment
- ffmpeg_command
- video_path
Every animation workflow ends the same way: you've got a batch of frames and you need an actual video file out the other side. This node is Bjornulf's take on that last step. It pipes your frames through FFmpeg and writes a real video to disk, and its one genuine selling point over the stock savers is that it'll mux an audio track in at the same time - so you get a finished, sound-on clip in a single node instead of assembling video and audio separately.
The author built the pack's video nodes around FFmpeg specifically because it supports things the naive savers don't - transparency via webm, proper encoder options, and audio streams. If you're doing lip-sync, music loops, or anything where the sound has to land with the picture, that matters.
How it works
Frames come in as an IMAGE batch, FFmpeg encodes them at whatever fps you set, and the file lands under your output folder using the name_prefix you give it (default imgs2video/me, so it drops into an imgs2video subfolder). If you also pass audio - either an AUDIO object or a path to an audio file - it gets combined into the output. This is a terminal/output node, so it runs at the end of the graph and saves the file as a side effect.
The inputs and outputs that matter
images(IMAGE, required) - your frame batch.fps(FLOAT, default 24) - frame rate. Note it's a float, not an int; the pack switched to float fps deliberately so you can do things like 29.97 or fractional rates. Match this to whatever produced your frames or the motion will look wrong.name_prefix(STRING) - the output path/name stub. Nested folders work (myclip/take1).use_python_ffmpeg(boolean) - toggles the python-ffmpeg binding vs. calling system ffmpeg. Flip it if one path errors on your machine.
Two optional audio inputs: audio (AUDIO type) and audio_path (STRING). Use whichever you have. There's also FFMPEG_CONFIG_JSON, a string produced by the pack's FFmpeg Configuration node, for when you want to override codec/encoder settings.
Outputs are three strings: comment, ffmpeg_command (the actual command it ran - handy for debugging), and video_path (the path to the file it wrote, so you can chain it into a preview or another video node).
How to install it
ComfyUI Manager โ search Bjornulf_custom_nodes โ install โ restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/justUmen/Bjornulf_custom_nodes
pip install -r Bjornulf_custom_nodes/requirements.txt
The requirements include ffmpeg-python, but this node also happily shells out to system ffmpeg - so make sure ffmpeg is actually installed and on your PATH. That's the number-one thing people miss.
Common issues & troubleshooting
"ffmpeg not found" / it silently produces nothing. Install ffmpeg at the system level (apt install ffmpeg, or the Windows build on PATH). The python binding still calls out to the ffmpeg binary. Toggle use_python_ffmpeg to try the other path.
Motion is too fast or too slow. Your fps doesn't match the frames' intended rate. Interpolated 8โ32 frame batches especially trip people up.
Audio and video drift or the audio gets cut. This node just muxes what you give it; it doesn't stretch audio to fit. If your clip and track are different lengths, look at the pack's Audio Video Sync node first, then feed the result here.
The output landed somewhere unexpected. Check name_prefix - everything is relative to the ComfyUI output folder, and the video_path string it returns tells you exactly where it went.
Worth knowing: the author has rewritten the FFmpeg nodes more than once and openly warns the video nodes are a moving target across versions. If a graph breaks after an update, the video nodes are the usual suspect - pin a version for anything you rely on.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | โ | |
| fps | FLOAT | 24.001โ120 | โ |
| name_prefix | STRING | imgs2video/me | โ |
| use_python_ffmpeg | BOOLEAN | false | โ |
| audioopt | AUDIO | โ | |
| audio_pathopt | STRING | โ | |
| FFMPEG_CONFIG_JSONopt | STRING | โ |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| comment | STRING | โ |
| ffmpeg_command | STRING | โ |
| video_path | STRING | โ |