CFR — Constant Frame Rate — means the gap between every consecutive frame is exactly the same. A 30 fps CFR video has its frames spaced precisely 1/30 of a second apart from start to finish. It's the assumption almost every video tool, codec, player and platform makes by default. Cameras, broadcast equipment, professional editing tools and streaming pipelines all expect CFR input.
The contrast is vfr — Variable Frame Rate — where frames are spaced unevenly because they were captured at irregular intervals. Phone screen recordings, screen-capture tools (OBS, QuickTime), some live encoder fallbacks and certain mobile cameras produce VFR. VFR is fine for the recording itself, but causes trouble downstream: encoders' rate control gets confused, players' audio-video sync drifts, editing tools start displaying wrong durations.
For product teams, the practical rule is normalise to CFR at ingest. When a user uploads VFR content, convert it to a sensible CFR (usually 30 or 60 fps) as the first step of the pipeline. FFmpeg does this with a -r flag plus a careful filter. The conversion costs essentially nothing in quality but eliminates an entire category of bugs further down the line — broken thumbnails, captions that drift, encoders producing odd-looking files, players that play smoothly on one device and choppily on another. CFR isn't glamorous, but it's the foundation that lets everything else in a streaming pipeline behave predictably.

