Video Frame Rate Convert
Conform a clip to a target frame rate without a video editor
- video
- video
- output_path
- summary
MKRVideoFrameRateConvert changes a clip's frame rate to whatever you specify. This is the "conform it for delivery" node: your model outputs 16 fps, the deliverable needs 24 or 30, and you don't want to open a video editor to fix it. It decodes the source, computes how many frames the new rate implies, and writes a re-encoded file at the target fps.
The mechanism is frame resampling, and the one input that actually matters is resample_mode:
nearest(default) - picks the closest source frame for each output frame. Fast, crisp, and exactly what you want when the target rate divides evenly into the source or you just need a frame-count fix.blend- mixes the two nearest source frames in proportion to where the output frame lands in time. Smoother on uneven conversions (say 30→24), at the cost of a little softness on fast motion.
Neither is magic: this is not optical-flow interpolation, and it won't invent motion that wasn't there. For real frame interpolation you want a dedicated model. What this gives you is a deterministic, spec-accurate conform - which is usually the actual need.
The inputs that matter
video- any resolvable video input (path string, dict withpath, a video payload from a sibling MKR node, or a VHS-style dict).target_fps- the rate you want out. Default 30, range 1–240.resample_mode-nearestorblend, above.fallback_fps- used only if the source doesn't report a frame rate.output_format,filename_prefix,subfolder,overwrite- the usual pack quartet.autopreserves the source container.
Outputs are the standard three: video (MKR_VIDEO payload dict), output_path, and summary (which reports input fps, target fps, and both frame counts so you can verify the conform did what you asked).
Install
Ships in MKRShift Nodes - install the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
or via ComfyUI Manager (search MKRShift_Nodes) and restart. mp4/mov/webm output needs system ffmpeg on PATH per the README; without it, output falls back to gif. No pip dependencies in the pack.
Where people get burned
Biggest confusion is expecting motion interpolation and getting resampling - if the source is 12 fps and you ask for 60, nearest will repeat frames and it'll look like exactly that. Also check the summary output: if input_fps shows the fallback_fps value, the source didn't carry frame-rate metadata and your conversion is based on a guess. And like every frame-based node in this pack, the output is silent - there's no audio track carried through, so mux sound back on if you need it.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| video | * | — | |
| target_fps | FLOAT | 30.001–240 | — |
| resample_mode | COMBO | nearest | 2 options: nearest, blend |
| fallback_fps | FLOAT | 24.01–240 | — |
| output_format | COMBO | auto | 6 options: auto, gif, webp, mp4, mov, webm |
| filename_prefix | STRING | MKR_fps_convert | — |
| subfolder | STRING | — | |
| overwrite | BOOLEAN | false | — |
| filename_labelopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | MKR_VIDEO | — |
| output_path | STRING | — |
| summary | STRING | — |