Camera jittering when trying to tween it while player is moving

I’m making a First Person gun system, and I’m trying to create recoil. It works fine, when standing still.
However when moving it jitters a lot.
This is an example:

As you can see the camera is fine when standing still, but when shooting whilst moving it does that strange motion.

This is the script I’m using:

local function recoil(intensity, time)
	local bounceback = cam.CFrame * CFrame.Angles(math.rad(intensity * (math.random(40, 60)/100)), 0, 0)
	local goal = cam.CFrame * CFrame.Angles(math.rad(intensity), 0, 0)
	local t1 = ts:Create(cam, TweenInfo.new(time, Enum.EasingStyle.Linear, Enum.EasingDirection.In), {CFrame = goal})
	t1:Play()
	t1.Completed:Connect(function()
		local t2 = ts:Create(cam, TweenInfo.new(time/5, Enum.EasingStyle.Linear, Enum.EasingDirection.In), {CFrame = bounceback})
		t2:Play()
	end)
end

The script is very simple, as it is just 2 tweens.

While this is a guess, I think it might be to do with it overriding the default camera movement.

Any help is appreciated. Many Thanks.