First render your animation with animated seed and Denoising Passes enabled in the render layer tab (no need to enable the denoiser itself) into a sequence of Multilayer EXRs with an output name containing fixed-length frame numbers (e.g. by setting the output to
Then, open up the Text Editor, type in
_cycles.denoise('/path/to/your/frames/frame#.exr', '/output/path/denoised#.exr', frames='1-250')
and run the script (after replacing the three arguments with correct values of course). Your Blender UI will probably lock up, but if you start Blender from the console you’ll see a progress indicator.
Note that the frame number placeholder in the denoising call follows OpenImageIO convention, not Blender, so one # stands for four digits. If you want to specify a single digit, use @. Stupid, I know, I’ll have to change that…
Once that has completed, you’ll have denoised frames in the path you specified as output.
The function accepts various other arguments, see the code for details for now. A particularly interesting one is frameradius, which sets the amount of past and future frames used (default 2, using 0 disables the animation feature and just denoises each frame individually).