Forgive the ignorance, but how do you tell if the mesh has the wrong collision, or has too many strips? And can PyFFI fix the strips issue?
Not sure wether PyFFI will automatically correct the meshes, but it won't correct any collision issues. For the meshes it would be worth a try. You can see in Nifskope wether a mesh is 'wrong' or not.
1. In block details of TriStripsData is a line called 'Num Strips'. Anything higher then 1 is wrong. Maybe PyFFI can correct issues like that automatically, not sure.
2. For collision every mesh based collision that doesn't have a MoppBvTreeShape is bad. Mopp collision is easily 100% more efficient then 'regular' collision.
3. The worst case is a non-packed NiTriStripsShape for collision. If the TriStripsData of a collision shape like that has Num Strips more then 1 it is an absolute FPS killer. While the other things are rather bad for performance and could need an improvement this is probably the single reason for the extreme lag. I know that from a few years ago when the problem was relevant. Even a single collision mesh like that can cripple performance completely. The more actors are around the worse it becomes.
The easiest way to solve the collision issues would be to import the meshes into a 3d app and export them with Mopp collision. Takes only a few seconds per mesh. Only problem is to go through all the meshes one by one (1437 meshes in the st folder) to see if there is anything wrong with them.