I think it’s better to go with Approach 1, but use DrawMeshInstanced() instead of DrawMeshInstancedIndirect(). I can easily call DrawMeshInstanced() multiple time per frame while DrawMeshInstancedIndirect() is pretty trouble to do this.
With DrawMeshInstanced(), I can pass the array of transform (position/rotation/size, use Matrix4x4.TRS() to set each of them) to control the peds movement.
DrawMeshInstanced() is easy to use, check SupahPOW31 on reddit for demo.
About peds animation, thanks to zulfajuniadi for his incredible open source Animation-Texture-Baker on github.
Edit: About animation, it’s just the shader play animation from an image file: check this project Animation-Texture-Baker of sugi-cho which is simpler and easier to understand.