Slightly going on a tangent, as part of developing CRT Terminator ( https://oummg.com/ and CRT Terminator Digital VGA Feature Card ISA DV1000 ) I have learned this gripe with OBS and Elgato's capture software. They do not support proper input video frame rate matched capture from a HDMI capture source when recording into a file for offline uploading e.g. to YouTube. Even if video input is set to 60hz, and OBS is set to capture 60hz, video frame loss or stuttering will still occur.
There is this kind of laxness around managing video refresh rates in OBS. I would not be surprised if other video capture software have similar issues.
Refresh rates are too commonly understood simplistically as integer values, like "60hz" or "70hz", but the truth is that the video frequencies are never precise integers - and the fact that they aren't is a surprisingly big deal.
If we take the DOS 320x200 Mode 13h as an example, that mode is never an ideal 70.000...hz, but varies depending on the clock chip of the VGA card that is used. For example, when I measure on Trident 8900D, I learned that Mode 13h comes out as 69.799... Hz, and when I measure on a Diamond SpeedSTAR Tseng ET4000AX, it comes out as 70.464... Hz. (On these old cards there is often also a slight variation based on the current uptime, as the clock oscillator heats up, the generated frequency breathes a little bit - but we can assume one has had the VGA card running so that temperature is at equilibrium)
In OBS for example, one can set up capture frame rate as an integer only. So one would set that up as 70hz for these devices.
Then, if recording input from ET4000AX, this means that OBS captures video at 70hz, but ET4000AX produces video at 0.464 hz faster, which will result in an extra frame every 2.155 seconds, which OBS will have to drop.
Or, if recording input from Trident 8900D, it will produce frames 0.201 Hz slower than what OBS expects, which means that OBS will be starved of an input video frame, and will have to repeat an older frame twice every 4.975 seconds.
This will result in this kind of periodic stuttering at even spaced intervals, e.g. 2 seconds, 4 seconds, or something else, which is extremely visible when viewing regularly panning motion, for example in Pinball Fantasies where the camera pans vertically following the ball. The human brain locks on really easily to observe this stutter, and will predict/anticipate this regular stuttering and it can become quite jarring.
CRT Terminator will solve this issue for live HDMI displays by implementing frame rate matching up to a thousandth of a hertz. This means that there will be a lost frame once about every 1/0.001 seconds = ~16 minutes 40 seconds, which will be extremely hard to spot since it is no longer a regular occurrence in panning motion. So if you are playing Pinball Fantasies with CRT Terminator, it will be butter smooth on a live display, as the HDMI display is locked on to display very close to the same refresh rate that the VGA adapter is producing frames at.
It would also be possible to implement proper HDMI video capture that would not lose frames, if OBS enabled a setting like "set project capture frame rate based on video source rate". Then, if one captured e.g. Jazz Jackrabbit from a VGA card running at a hypothetical 60.234 hz, and viewed it on a monitor with a mismatching 59.971 hz refresh rate, a smart player would be able to retarget the video frame rate to match on the fly, that is, by slowing down the video and audio by 60.234 / 59.971 = 0.4385% factor. For video, this would be a trivial no-op process, but audio requires an on-the-fly resampling, which is a very common operation that players already have for 44.1khz/48khz/96khz resampling purposes. The slowdown factor would not be audible, I'd claim not even by people with absolute pitch perception. (a 440hz A note would become a 441.93 hz note, which is about a 1.95 cents increase in pitch. https://music.stackexchange.com/questions/100 … ow-can-musician suggests the limit of human pitch perception is around 5 cents)
If input video was captured at 70hz, then if user is watching the video on a 120hz display or a faster gaming display, like 144hz, 160hz, 240hz, 360hz, it brings a great possibility to mitigate the video frame rate stuttering even if it was not able to program the user's display to run at the DOS 70hz.
I once asked the OBS developers on their Discord about this, and they said that it was not worth doing. That makes me sad 🙁
Not sure if this relates to anything at hand, though just wanted to write down my thoughts around refresh rate somewhere, that was triggered by the observation of capture refresh rates being discussed above. I guess I would be interested in knowing if there might actually exist any video capture software that would be able to do guaranteed frame perfect capture of 60.whatever hz video, and preserve that rate in the generated video file? (e.g. Jazz Jackrabbit or some other Mode-X games, or 640x480 games) That would then enable a video player to deal with the frame rate difference via retargeting+resampling.
Once CRT Terminator becomes available, I hope it will be suitable for speedrunning activities, at it enables different output modes that can customize latency and upscaling tradeoffs (passthrough for less than a scanline worth of latency, and vsync-lockless single-buffered upscaling for <1x frame latency, and triple-buffered vsync-locked upscaling for <2x frame latency)