You've pretty much just described it. I have a function called Map() which basically lerps a value from one range (max velocity, min velocity) to the sprites in a list (0, sprites.count). Velocity goes in, animation frame index comes out.
The Map function code looks like this
public float Map(float value, float istart, float istop, float ostart, float ostop) { return ostart + (ostop - ostart) * ((value - istart) / (istop - istart)); }