Coping with Frame Rate Limitations

Generally speaking, videos uploaded to u2be suffer a drop in quality in the conversion process. This can be offset by uploading in high resolution, but one thing you can’t avoid is the 30 frame per second limit on framerate. This can be problematic for video game footage: Games display at around 60 fps and older hardware may rely on the high frequency for visual effects, and combo videos become difficult to study frame by frame.

Sprite flickering was especially prominent in 2D games to indicate that something was appearing, disappearing, invisible, or invincible. It’s also employed in situations where there are more sprites on screen than the hardware can handle. Dropped frames cause flickering objects to remain solid or disappear entirely. Maj recently reupped his SF? Guile Exhibition in high res, and that’s what happened to the barrel debris in the bonus stage intermission.



Sonic Booms present a similar problem: the animation cycle is in four parts, with the sprite changing on each frame. With half those frames gone, the animation looks incomplete. The difference can be easily spotted at around 1:11 when the Sonic Boom on screen goes from half to fully animated during the KO slowdown. Hadoukens also have a four-part animation, but two frames pass between segments, so losing every other frame makes no discernible difference.

You may be able to reduce the inevitable quality damage by performing the framedrop with your own video editing software before uploading. Let’s examine a short sample clip from the barrel dropping bonus stage in the arcade version of Street Fighter II: Champion Edition. This clip has lots of flickering and high-frequency effects that have the potential to be spoiled: The barrel debris, the scoreboard, the Hadoukens and the rapid-fire punches and kicks.

I’ll be using Avisynth scripts to describe the editing operations. You can use most any video editor to do these things but Avisynth is controlled by plain-text scripts that can easily be shared. Here is the avs script file used for the examples below. Click on the headers to download the video that results after filtering and encoding.

Unaltered

This is what it’s supposed to look like. We want to keep it as close as possible to this after reducing the framerate.

Even and odd separately

selecteven/selectodd simply keeps every other frame and drops the rest. In this case, even makes the barrels vanish, while odd keeps the debris solid. Actually the solid doesn’t look too bad, except for the fact that player 1’s light-up tally isn’t being shown. (The reason the lights are bright on both sides in the Guile video is that clip is from World Warrior, and the flickering was introduced in CE.) Hadoukens flicker on and off for two frames each, so they appear normal after the frame loss.

Merged

Here, the clip is divided into both even and odd frames, then the two sets are mashed together with merge. Each pair of frames dissolves together like this:

Flickering objects are effectively rendered half transparent and appear a little dim. It’s possible to intensify some objects by weighting the merge operation toward one set, but this would also cause the complementary set to dim and the light-up boards on each side would appear at different brightness. Another downside of any blending is that it blurs all graphical changes. Moving sprites and scrolling backgrounds get smeared out over an extra frame.

Interleaved

Instead of merging even and odd frames, you can alternate them. This can be done by halving the original frames twice and then interleaving. Since there’s no blending there’s no blur, but the animation is a little choppy because an unequal amount of time passes between consecutive displayed frames: Instead of skipping every other frame, it’s alternating between skipping zero and two. This means the flicker effect is preserved (at half rate) in the barrel debris and lights, which change every frame. However, the animation for Hadoukens and rapid fire punches and kicks changes every two frames, so now they are prone to being spoiled. In this case, the Hadoukens are OK but the punches and kicks don’t animate. If the even/odd filter pattern is changed up you can reverse that but something’s going to be broken.

Change FPS

changefps sets the framerate to the specified value by simply deleting frames while maintaining the duration. Youtube’s method is likely to be similar to this. Since the source framerate, at 59.6, is not an exact multiple of 30, the result alternates between showing the even and odd frames, which you can tell from the periodic disappearance of each player’s score display.

Convert FPS

Avisynth has a special filter, convertfps, just for dealing with this kind of problem, but it didn’t work so well. This filter seems to divide the screen into an even domain and an odd domain, with the boundary determined by the third argument, zone. The result is barrel pieces disappearing at the top of the screen then fading back in at the bottom, and only one player’s scoreboard visible.

Keep in mind that it’s not necessary to do anything if the effects can still be observed at the reduced framerate: In the Guile Exhibition, the debris in the first oil drum clip (9:34) doesn’t flicker properly, but it looks better in the next clip. This is because the second clip is from Hyper Fighting. The random frameskip in HF effectively makes the flickering pattern random and avoids the masking effect of the framedrop.

Has anyone got any other tricks or suggestions on how to deal with this?

Thanks to error1 and Maj for input on this.

This entry was posted in Articles, Video Production. Bookmark the permalink.

13 Responses to Coping with Frame Rate Limitations

  1. Cauptain says:

    Vegas Movie Studio HD Platinum convert 60/30 uses the interleaved mode. It is good for YT.

    Plps from TAS videos site have awesomes avisynth scripts for this.

  2. Maj says:

    Nice demo clip sir! Covers lots of potential problem areas: breaking barrels, flickering projectiles, rapid light attacks, score lights …

    Actually i think i got off light with my Evo Guile video. HF and ST frameskip helped out a lot, like you said. The whole CvS segment is on turbo speed as well. And the rest of the SF2 stuff doesn’t look bad at all, for the most part.

    The most obvious problem is WW/CE/SSF2 Sonic Boom. It’s a 4-frame animation so it looks incomplete when you remove two of those frames. When Ryu dies, the game slows down so you see all the frames.

    And that CE oil drum segment has too much stuff happening. Both Guiles disappear briefly because the game can’t handle so many oil drums breaking at once. So u2b doesn’t deserve the full blame for that one. Still looks better at 60fps though.

    I had to use frame blending (in Adobe AfterEffects) for my ghetto Zangief video because that 4-frame mashed out rotation looked terrible at half framerate. But there was nothing nearly as bad in the Guile video, so i didn’t bother with it. In retrospect i kind of wish i had tried frame blending just for that intermission segment.

  3. shinjig says:

    Seems kinda sad that we have to reinterlace our videos for u2b after all the trouble we go through to deinterlace them in the first place.

  4. Maj says:

    Yeah it’s pretty lame. But just to be clear, frame blending / merging is different from interlacing. I have an interlaced video on u2b and it looks awful at 480p.

  5. Fireball says:

    This has been a ridiculously insightful article. Great read.

    One question though, is this problem also responsible for things like SFIII Yun’s Genei Jin shadows not appearing? Or is that a separate frustrating problem? :D

  6. Maj says:

    Yup, SF3 Genei Jin has the same flickering issue. These solutions will help.

  7. Ryukenden says:

    So, which one of these methods would you guys recommend?

    • Dammit says:

      If it looks OK cut down to 30 you shouldn’t need to do anything. New games with their 3D graphics don’t generally rely on framerate gimmicks like flickering.

      If 30 fps takes away something important, try merging and interleaving and decide which one looks best. If it makes something else screwy, like the renda punches and kicks, you can apply the filter only to the appropriate parts of the clip and apply a flat half rate to the other parts.

  8. Ryukenden says:

    Interleaved definitely looks better. Can I apply it without compressing the video clip?

    • Dammit says:

      The specifics depend on your software but you can apply any filter and tell it to output the result without compression. For example with avisynth + virtualdub, you load the avs file and set it to “direct stream copy” in the video menu.

      Of course you are losing half the frames so it’s compressed in that sense.

  9. Ryukenden says:

    I mean it’s actually lower quality. I open avs file with Vdub, check direct stream copy, go to Save as AVI and these are results:

    Original video: http://img707.imageshack.us/img707/8319/uncompressed.png

    Interleaved: http://img860.imageshack.us/img860/3039/interleaved.png

    Not only it cuts beginning of video a bit, it also lowers quality. Also, how do I not fade to black with that script?

    • Dammit says:

      To just interleave and nothing else, try this:
      clip = avisource("yourclip.avi")
      even = selecteven(clip).selectodd
      odd = selectodd(clip).selectodd
      interleave(even, odd)

      There’s definitely some antialias filtering applied to the second shot. Try processing this, which doesn’t apply any filters:
      avisource("yourclip.avi")
      If it still looks antialiased, there’s might be some problem with virtualdub’s settings.

  10. Ryukenden says:

    With avisource(“yourclip.avi”) it saves it uncompressed, so VirtualDub is fine. It doesn’t matter now, I’ve already made the video.

Leave a Reply