Typically, the feedforward part treats time-steps as either as unrelated or as a dimension.
Thus you would do something like
seq_len, batch_size, feature_size = input.shape
preprocessed_input = feed_forward_new(input.view(seq_len * batch_size, -1)).view(seq_len * batch_size, -1)

(adapt if your input or output is multidimensional).
An alternative can be to include convolutions over timesteps. Then you need to .permute the batch to the front
input_reordered = input.permute(1, 0, 2).unsqueeze(1) # Batch x channel(=1) x H (= time) x W (=features)
preprocesses_input_raw = my_conv_2d_net(input_reordered) # batch x channel (=features) x time x features
batch, c, time_out, f = preprocesses_input.shape # c and f will give one large feature vector
preprocesses_input = preprocesses_input_raw.permute(2, 0, 1, 3).reshape(time_out, batch, c * f)

now you can pass preprocessed input to an RNN.
Best regards
Thomas