What the two terms mean

Constant frame rate (CFR): every frame lasts exactly the same time. A 60 fps CFR file has a frame every 16.7 ms, always. Variable frame rate (VFR): each frame carries its own timestamp, and the gaps can differ. When the game stalls, a VFR recorder can simply not write a frame, and the next one arrives later.

SourceUsually records
OBS (default settings)Constant
Phone screen recorders (iOS, Android)Variable
Some GPU overlay recorders and game-bar captureOften variable
Downloads from streaming sitesUsually constant after re-encoding

Check yours: MediaInfo (free) shows “Frame rate mode: Variable” or “Constant”.

Why editors struggle with VFR

Most editing timelines assume every frame is the same length. Fed a VFR file, some editors stretch or squeeze the video to fit, and the audio, which is continuous, slowly drifts away from it. The longer the clip and the more the game stuttered, the worse it gets.

How to convert to constant frame rate

  • HandBrake (free): Video tab → set Framerate to the target (30 or 60) and choose Constant Framerate.
  • ffmpeg: ffmpeg -i in.mp4 -fps_mode cfr -r 60 -c:a copy out.mp4 (older builds: -vsync cfr). This duplicates or drops frames to hit an even 60 and keeps the audio aligned.
  • Record CFR in the first place: OBS does by default; for phone footage, convert before editing.

VFR, CFR and lag

Converting VFR to CFR fills the gaps where the game stalled with repeated frames, which is exactly what a CFR recorder like OBS does live. That keeps sync, but laggy stretches still look frozen. If you want them gone, remove the repeated frames after converting: LagCut does it for BTD6 and They Are Billions and exports CFR, and mpdecimate does it for anything. Remember the audio can't stay in sync once frames are removed; add it back in the editor.

Questions people ask

Is variable frame rate bad?

Not for watching. It's a problem for editing, where many timelines assume every frame is the same length and the audio can drift.

Does OBS record variable frame rate?

Not by default. OBS writes a constant frame rate, repeating the previous frame when the game hasn't drawn a new one.

How do I convert VFR to CFR for free?

HandBrake with Constant Framerate selected, or ffmpeg with -fps_mode cfr -r 60.