Scaling Retro Gaming Captures with Virtualdub

In most cases, the game resolution you’ve captured will be smaller than the target resolution you’re aiming for.  I prefer to use VirtualDub to scale the captures any way I’d like, which not only allows for clean integer upscaling, but can also be used for adjusting the aspect ratio to mimic the exact proportions of a CRT.

Required Software:

This capture method uses completely free software.  Please download and install the following:

VirtualDub (I suggest 32-bit, for script compatibility):  http://virtualdub.sourceforge.net/
x264 Codec:  
https://sourceforge.net/projects/x264vfw/  /  https://www.videolan.org/developers/x264.html
Alternative Codecs:
Avisynth (for scripting):  http://avisynth.nl/index.php/Main_Page
Lagorith (Alternate Codec):  https://lags.leetcode.net/codec.html
UT Video (Alternate Codec):  https://www.videohelp.com/software/Ut-Video-Codec-Suite

Upscaling with VirtualDub

Start by opening VirtualDub and opening the file. I’ll use a Sega Genesis game with a 320×256 resolution as an example here.

In the menu bar, go to Video\Compression and choose what you’d like. I prefer x264 uncompressed, but UTVideo may be a more compatible format with odd sizes. The size of UTVideo will be almost double though.

Then go to Video\Filters, hit “Add” and choose “Resize”. Make SURE you select “Nearest neighbor”, since that is what ensures pixel uniformity when using integer upscaling ratios . For this example, I’m targeting a 4K output resolution, and normally I’d recommend a 9x (900%) scale for this scenario. However, I’m using a game with a lot of overscan for this example, so I’ll choose 10x this time:

This will give you a pixel-perfect 4K scale, that is larger then the vertical height of 4K, requiring cropping.  If you’re capturing directly, continue to “Aspect Ratio”.  If you’re capturing using standard 480p, 720p or 1080p resolutions, please skip to Cropping below.

Aspect Ratio Correction

If you’re using a direct-capture, the aspect ratio will not match would would normally be shown on a CRT.  Please remember that classic game consoles designed in the CRT era didn’t use “pixels”, they used “samples per line”. If you need a reminder, this is explained well in this video:  https://youtu.be/LHfPA4n0TRo
In the context of this scaling exercise, the common horizontal resolution of 320 would be slightly too wide to just scale cleanly. Also, another common retro game horizontal resolution of 256 would be too narrow. Ste from HD Retrovision derived a generalized formula, which can be used with various console measurements to calculate the proper correction ratio for any type of input:
Lucky for us, most of these parameters don’t change between different consoles, so he was able to significantly reduce this into a much easier to follow reference:
– For 320 sources, scale by 90.2% horizontally (288.651/320).
– For 256 sources, scale by 112.75% horizontally (288.651/256).
To do this in Virtualdub, you’ll be adding a second scaling operation. Go back to Video\Filters, hit “Add” and choose “Resize” again. This time, you’ll want to select “Lanczos3” scaling, then disable aspect ratio lock and set the horizontal scale to the recommended setting; Remember this is a 320 source, so we’ll be setting it to 90.2%, leaving the vertical scale at 100%. This setting will be the same regardless of what the target resolution is, as you’ve already integer-scaled to 720p, 1080p, 4K, etc in the previous “filter” step:
Now your filters should look like this:

Cropping / Fitting to Standard Resolutions

Now you’ll need to decide how you’d like the file presented.  If you’ll be importing this file into video editing software such as Adobe Premiere, you can just export the file as-is: A 3200×2560 file.  I think in most situations, you’d want to output the file to fit a standard resolution.  Just a few more steps are necessary for that.
Add another resize filter like the last two and this time, add a letterbox to the target resolution.  This will add color bars on the sides, to fill the target resolution.  The default color is black, so that’s usually the only setting I change:
I now recommend cropping the image.  If your target resolution is smaller than the current scale (5x for 1080p, 10x for 4K), then you’ll need to crop the areas of the screen you don’t want to fit within the standard vertical resolution.  Also, even if your target scale is within the resolution, you may still want to crop out any noise or unwanted parts of the video.  To do this, hit the “cropping” button in the filters window:
I suggest scrolling to the main part of the video (bottom arrow) to get an idea of what’s on the screen.  Keep in mind, that this window’s aspect ratio might be off, depending on your display; This is normal and won’t affect the output file:
For 5x or 10x scales, you’ll want to keep cropping unit it reaches the target vertical resolution.  For other scales, just crop out whatever areas you don’t want and don’t worry about the resolution, as the letterboxing we added in the previous step will add black bars around the remaining image.

 

Then just hit “OK” and “OK” once again in the filters menu.  Then go to “File\Save as AVI” and save the file.  As a warning, if saving uncompressed, the resultant AVI file will be very large.

YouTube Compression
YouTube and other online video services with compress your video to death.  Scanline filters will never look right, random noise will appear all over that wasn’t present on the original file and aspect ratios will get stretched across mobile devices.  There’s not much you can do about it, but pre-compressing the file with handbrake will help reduce some of the stress.   You can technically compress in the steps above via VirtualDub, however I’ve run into weird issues where certain resolutions won’t process if compression is turned on.  You can try if you’d like, but I get much better results saving via uncompressed x264, then using handbrake to compress that file via h265.
The presets are okay, but the only weirdness I run into is with dimensions.  For some reason, Handbrake always wants to crop every video I throw at it!  I always have to:
– Uncheck “Keep Aspect Ratio”
– Set the resolution to what ever the file was
– Set “Cropping” to “Custom”
– Set all four crop positions to 0
Other than that, Handbrake it pretty easy to use and does a great job.  Compressing big files takes a long time though…