Nodes/MKRShift_Nodes/Video Frame Rate Convert
ComfyUI Node

Video Frame Rate Convert

Conform a clip to a target frame rate without a video editor

By criskb·Created 7 months ago·Updated 5 months ago· 0
Video Frame Rate Convert
  • video
  • video
  • output_path
  • summary
target_fps30.00
resample_modenearest
fallback_fps24.0
output_formatauto
filename_prefixMKR_fps_convert
subfolder
overwritefalse
filename_label

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 with path, 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 - nearest or blend, above.
  • fallback_fps - used only if the source doesn't report a frame rate.
  • output_format, filename_prefix, subfolder, overwrite - the usual pack quartet. auto preserves 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.

CategoryMKRShift Nodes/Media/Video/Utility

Inputs (9)

NameTypeDefaultDescription
video*
target_fpsFLOAT30.001–240
resample_modeCOMBOnearest2 options: nearest, blend
fallback_fpsFLOAT24.01–240
output_formatCOMBOauto6 options: auto, gif, webp, mp4, mov, webm
filename_prefixSTRINGMKR_fps_convert
subfolderSTRING
overwriteBOOLEANfalse
filename_labeloptSTRING

Outputs (3)

NameTypeDescription
videoMKR_VIDEO
output_pathSTRING
summarySTRING