So, not very much progress, but it's a start. The next thing I need to do is calculate PTS and DTS and figure out the timing of things. I did an initial test where if the SCR moved backwards, it threw away packets until time moved forward again (to see if that would fix the scroll), and it sorta did, but also other big chunks of the movie were missing, so I have more to learn about timing. Also, there were picture artifacts at the transitions, so that worries me. I was hoping that packets were complete pieces of the movie (I-frame to I-frame for example), but it appears that isn't the case. Anyhow, it was just a quick test to see what would happen... we wouldn't want such a brute force method anyways, because it eliminates choices. If the user wants to keep streams etc, that should be no big deal.
The decoder is written in python: the language is readable, portable (Linux, Windows, cygwin, OSX, etc, we are covered), and doesn't have to be compiled. The program is mostly doing I/O operations, so the tiny bit of interpreted processing happening isn't slowing things down. It takes 2 1/2 minutes to run through each 1GB VOB file on my system (at the same time writing that modified VOB).