Notes on the Java Program

<geekness level="severe" type="artsy">My first attempts were a simple program that let me select the sections by hand, but that was error prone, and annoying, and too much work in general. I tried a few more approaches, "averaging" the pixels over a series of frames (which, as expected, led to a big blur in the middle), an odd "voting" system where a pixel becomes the color it is the most often (left odd color sparkles all over the place, because of how I broke up the R/G/B information) until finally I made up a kind of primitive AI filter that could take a guess about whether or not a scanline currently had text on it (counting the areas of sharp contrast.) The end result still needed some hand-tweaking in picking out extra frames to import and rejecting 1 or 2 that could fool the heuristic, but it was much, much easier than what I tried to do originally.</geekness>

Here is a link to the Processing Source Code

The code is, of course, a mess, and I don't know if there are other movies out there that have intereting still images behind rolling credits, and even if they do, if the same algorithm (kind of hacked for the case at hand, of white text with a black border) will work as well. The basic idea is to put a series of numbered jpg stills (0.jpg, 1.jpg, ...) in the processing data directory. Pressing space brings you through each one, with the lines the "AI" is ignoring blacked out (if you see any letter bits sticking through, you may want to discard that frame.) The program also discards a few scanlines above and below any "bad line". The "good lines" are averaged together, which seems to work pretty well.

Finally, the program displays the result, if you like it, hit 's' to save "results.tga". If there are still scanlines missing, you should be able to line up the result with your video viewer, advancing frames until you get one where the blank area is showing through. Then you can add that into the pool of .jpg files and repeat.

I'm willing to give more details, if anyone is interested in reusing the code.