@n8lbv There is a solution, or rather a workaround, but it's very convoluted and also not permanent. If you want to try it, here's a guide based on what I've figured out since I last replied here (only works for Nvidia GPUs due to requiring nvidia-smi, though someone might figure out a similar method on AMD):
1. Use display capture in OBS. I haven't tested game or window capture, so I can't guarantee that this works with that. You're free to test this out with those capture methods.
2. Set your monitor to 60Hz, disable GSync/VRR and enable VSync in the games you'll record. This workaround only works when you are at 60Hz with VSync enabled. An external framerate limiter will
not work. It's possible 120Hz with half-rate VSync works, but I haven't tested it.
3. Launch a game or a GPU benchmarking application that maxes out your GPU at 100% usage, keep it in windowed mode so you can alt-tab to other applications while it runs in the background. (For steps 2-3, it's okay to set your monitor to higher refresh rates or disable VSync if your GPU isn't maxed out at 60Hz)
4. Run it for 5-10 minutes, and then note the lowest clock speed your GPU reaches while it's still at 100% usage. Use MSI Afterburner or GPU-Z to view your GPU's clock speeds.
5. Run Windows Terminal or command prompt in administrator mode.
6. Enter the command
nvidia-smi -lgc=yourclockspeed and replace "yourclockspeed" with the clock speed you noted earlier. This will lock your GPU's clock speed to a stable frequency, which is very important for this workaround. To undo this, run the command
nvidia-smi -lgc=unlimited
7. Once GPU clock speed is locked, keep a game running in the background (to put some load onto the GPU) and then open displayhz.com and let it stay on screen for ~10 minutes. Note the refresh rate it ends up at. Make sure your monitor doesn't turn off while displayhz.com is open on screen, as that will give you incorrect results.
8. Copy and paste
this python code into an online python compiler like the one from
W3Schools and enter the refresh rate you noted earlier into the
refresh_rate variable and run it.
9. Enter the numerator and denominator values you got into OBS by selecting "Fractional FPS Value" instead of "Common FPS Values" in Settings->Video.
10. Record your game.
Your recordings should now be smooth all the way through, but you need to have your GPU clock speed locked using that nvidia-smi command every time you want to record.
The main downside/annoyance of this workaround is that you might need to redo steps 7-9 after a few days, since your monitor's refresh rate might drift away from what you noted earlier, and cause stuttering again. I'd recommend doing your recordings as soon as you've completed steps 7-9.
Another issue you might run into is that video editing software (for me, it was DaVinci Resolve) might not work well with these fractional framerate recordings, and end up with interval stutter that you don't see when playing the video in other software. If you do run into this, you need to download and install
MKVToolNix, then open Windows Terminal in the folder where your video is, and run the command
mkvmerge.exe -o output.mkv --default-duration 0:60p input.mkv with "input.mkv" renamed to your recording's file name. This will create a copy of the video with "fixed" framerate metadata, and now it shouldn't stutter in editing software.
Sorry for the massive post, there's no way to do this workaround in a simpler manner. This problem really needs more eyes on it, we shouldn't be okay with such a common stuttering problem on such a widely used recording software. I've seen so many YouTube videos (from massive channels as well) with interval stuttering, which makes it obvious they're using OBS to record.