Rotate vector3 relative to another vector3

In my game players move relative to their camera position. Code looks like this

Vector3 velocity = new Vector3(input.x, 0.0f, input.y);
velocity = Camera.main.transform.rotation * velocity;

How can I adapt it to not use an object transform’s rotation but instead use a Vector3 (forward direction)? What I need is to be able to use a Vector3 as therelative forward (in my case based on player’s team). This is my “forward vector”.

Vector3 movementRelativeVector = player.Team ==0 ? -Vector3.forward : Vector3.forward;

velocityY needs to align with movementRelativeVector direction;

If you can use transform.Translate instead of velocity it’s rather easy:

transform.Translate(new Vector3(xMove, 0, zMove), camera.transform);

But with velocity you need to make some more calculations (my old js code):

        var right = this.cameraTransform.right;
		var forward = this.cameraTransform.forward;
		var v = this.inputParser.verticalLeftStick;
		var h = this.inputParser.horizontalLeftStick;
		moveDirection = v * forward + h * right;
		moveDirection = moveDirection.normalized;
		if(moveDirection !={
			transform.rotation = Quaternion.LookRotation(moveDirection);
			transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);
		else {
			this.transform.rotation.eulerAngles.x = 0;
			this.transform.rotation.eulerAngles.z = 0;

You can replace the camera transform by any other transform and use velocity instead of translate. Be aware that with this approach the character will always face the direction he will move to relative to the (in this case) camera (like fo example in dark souls).