5

I watch many live video + audio streams of people playing old video games, such as NES ones.

An extremely recurring annoyance is that, for example, when the main character is damaged and is supposed to be "blinking" rapidly, it appears completely empty on the stream. Or, a quick running animation appears like Mario is stuck in one frame, not animated at all.

I realize that this must have something to do with the number of frames per second captured, or perhaps how those are "synced", or something like that. But how to solve it? Is it easy? And does said solution necessarily require a 60 FPS capturing/streaming setup, or can you simply tell the capture software/hardware to "pick different/random frames" or something?

1
  • If you are playing on the original hardware and display device, then you would have to genlock the capture device to the display device. This is how television cameras could (in a professional setup) record computer monitors or television displays without annoying flicker and rolling artifacts. Of course your video card or studio tv monitor would have to output a genlock signal to be connected to the genlock input of the camera.
    – Glen Yates
    Apr 15, 2021 at 19:36

1 Answer 1

7

It's a classic aliasing error resulting from point sampling — the original hardware is alternating a character between visible and invisible once per frame, or between two frames of animation, but the video stream is capturing only every other frame.

So the ideal option would be to stream at the original frame rate. That's often not exactly possible as e.g. on an NTSC NES video is output at just below 60.1Hz whereas streaming is likely locked to 60Hz, like 95% of monitors. So if you just sampled whole input frames for output then you'd miss one every ten seconds or so. But streaming at 60Hz would be a lot closer to accurate.

The other obvious alternative is frame blending; you could do a straight 50:50 blend if resampling to 30Hz or you could try for an infinite impulse response filter in which to advance from frame n to n+1 based on new input r you'd compute n+1 = r*k + n*(1-k) for some k in the range 0 to 1 (and usually fairly close to 1). That would cause the last few frames to be blended into the current, with a discrete logarithmic decay.

1
  • 1
    Here's an example of a video encoded with the 50:50 blend technique. The quality impact is significant as anything that moves looks blurry, but at least flickering sprites don't disappear. Also, note that in order to compute that blend, you would still need video-capture equipment that can sample at 60 Hz anyway.
    – NobodyNada
    Apr 14, 2021 at 1:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.