You can either anchor the HumanoidRootPart of the player’s character or you can set JumpPower and WalkSpeed of the player’s character’s humanoid to 0. I’d suggest the first one the most, then unanchor when the animation is stopped.
You could sink the input of various input types using the ContextActionService. This prevents some input types from being operable and is fairly reliable (aside from the fact that exploiters can unbind the action, which shouldn’t matter unless you absolutely need the player to not move while playing this animation).
I don’t know if it would be the “fastest” solution… But you could use in this same script a pause in the player’s movements, because even if you set 0 the speed and jumping force, wouldn’t work, the player would still be able to move if found a speed bug.
Best example:
Mouse.Button1Down:Connect(function()
local controls = require(game:GetService("Players").LocalPlayer.PlayerScripts.PlayerModule):GetControls()
controls:Disable()
wait(2)
controls:Enable()
end)