My current take with fMRIprep output is along the lines of this Python script, followed by readding the mean image to the denoised 4D image through FSL’s fslmaths.
import nibabel as nib
import nilearn.image as nii
import pandas as pd
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('input')
parser.add_argument('output')
parser.add_argument('confounds')
parser.add_argument('t_r')
args = parser.parse_args()
input_img = nib.load(args.input)
confound_data = pd.read_csv(args.confounds, sep="\t")
confound_columns = ['a_comp_cor_00', 'a_comp_cor_01', 'a_comp_cor_02', 'a_comp_cor_03', 'a_comp_cor_04', 'a_comp_cor_05', 'cosine00', 'cosine01', 'cosine02', 'cosine03', 'cosine04', 'cosine05', 'trans_x', 'trans_y', 'trans_z', 'rot_x', 'rot_y', 'rot_z']
confound_matrix = confound_data.as_matrix(columns=confound_columns)
regressed_img = nii.clean_img(input_img, t_r=args.t_r, confounds=confound_matrix)
nib.save(regressed_img, args.output)