FFmpeg settings
The one node that decides how every video in this pack comes out
- settings
FFMpegSettings doesn't touch a single frame. It's a pure settings carrier - you wire its single settings output into VideoTranscoding or SubtitleEmbedding and it decides, in one place, how every video this pack exports gets encoded. Think of it as the control panel for the whole pack rather than a node that does anything itself. ComfyUI is full of these config-only nodes, and once you get that it's a dict on wires and not an operation, it stops being confusing.
It's genuinely the first node you'd reach for in this pack: set your container, codec, and quality once, and every transcode and subtitle embed inherits it. No file in, no file out, nothing executes - it just packages your choices into the custom FFMPEG_SETTINGS type and hands them over.
The inputs that actually matter
A few of these do 95% of the work:
- codec (default
copy) - this is the big lever.copyremuxes the video stream with zero re-encoding, which is instant and lossless. The rest (libx264,libx265,libvpx-vp9,prores_ks, the NVENC/videotoolbox hardware encoders, …) actually re-encode. - crf - constant rate factor, lower means better quality. Default 23 is FFmpeg's standard middle ground; go 18–20 if you care about the source, up to 28+ for throwaway files. Range is 0–51.
- format - the output container:
mkvis the default for a reason (it's the only one that accepts a soft subtitle track). - resolution and framerate - type
WIDTHxHEIGHTor a frame rate, or leavesourceto keep the originals. - preset - the speed-vs-size slider (
ultrafast…veryslow), the classic x264 tradeoff. - audio_codec / audio_bitrate - copy the audio or re-encode it (AAC, Opus, FLAC, …).
- additional_params - raw FFmpeg arguments, appended before the output file. This is your escape hatch for anything the node doesn't expose.
Where people get burned
The biggest trap is the copy codec quietly ignoring half your settings. When codec is copy, the node skips resolution, framerate, preset, and CRF entirely - there's no -vf scale, no -crf, because you can't re-encode while copying. So if you set a resolution and nothing changes, that's not a bug: you never actually turned the encoder on. Pick a real codec first, then the other dials do something.
Second: additional_params is split on whitespace and injected raw into a shell command. Treat it like typing at an ffmpeg prompt - -movflags +faststart, for example - and don't put paths with spaces in there, because the split will shred them.
Installing
It ships in the ComfyUI-ASSSSA pack, so installing the pack installs this node. Easiest route: ComfyUI Manager → search "ComfyUI-ASSSSA" → Install → restart. Manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/HighDoping/ComfyUI_ASSSSA
Restart ComfyUI afterward. The pack has no Python dependencies - no requirements.txt, nothing to pip - and no model downloads. The one real requirement is FFmpeg on your PATH; without it the consumer nodes error out the moment you run them. Grab a full build from gyan.dev on Windows, sudo apt install ffmpeg on Debian/Ubuntu, or brew install ffmpeg on macOS.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| format | COMBO | mkv | Output container format |
| codec | COMBO | copy | Video codec to use for encoding, use 'copy' to keep source codec. |
| resolution | STRING | source | Output resolution in format WIDTHxHEIGHT or 'source' to keep original resolution |
| framerate | STRING | source | Target frame rate or 'source' to keep original |
| preset | COMBO | medium | Encoding preset (speed vs quality tradeoff) |
| crf | INT | 230–51 | Constant Rate Factor: lower values = higher quality |
| audio_codecopt | COMBO | copy | Audio codec to use for encoding, use 'copy' to keep source codec |
| audio_bitrateopt | COMBO | source | Audio bitrate for encoding or 'source' to maintain original |
| additional_paramsopt | STRING | Additional FFmpeg parameters (advanced) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| settings | FFMPEG_SETTINGS | — |