Since you are working with video files, you probably have a decent size external hard drive, you'll need it.
If Virtual Dub will load the troublesome file, go back to VirtualDub and open file again.
This time click Video, select Full Processing Mode.
Compression, select Uncompressed RGB
Click Audio, select Direct Stream copy, and AVI audio.
Now do "Save AVI" and save it with new name.
You are going to be warned you are about to save an uncompressed file that may be very large, do you want to continue... click yes. After it has been saving for a minute or 2, it will show anticipated file size (more accurately) and here you can see if you're going to run out of drive space before it finishes. A save like this usually will use about the same space as the initial capture from DV camera if your camera saves as DV AVI. If camera saves as Mpeg, file will be much larger than what came out of camera.
See if this new file works.
I don't see VirtualDub as a fix-all, but this method will get every single frame saved as a whole, they all are keyframes of a sort. This method is also lossless.
If you play this new file, be prepared for the player to stumble a lot. There is no compression, so a very high data rate is going on, some players can't digest data that fast.