For OTW I had some noisy indoor footage captured with an XL2 in 2:3:3:2 (aka 24P advanced) mode. Naturally I was looking for a way to clean it so I decided to use avisynth, since it has a wide array of good free noise reduction plug-ins. Since the state of the art is always changing, I spent some time looking through the archives of doom9 (where all the avisynth enthusiasts are). I discovered a great FFT-based denoising filter called FFT3DGPU [1]. As you have no doubt guessed, this is because this filter takes advantage of your GPU! I thought it would improve performance so I gave it a try. Apparently it is a port of a well-known filter called FFT3Dfilter, which performs noise reduction in the frequency domain. Most other filters are spatial, temporal, or both (spatio-temporal).
The results are excellent, but before I show them, let me go through the avisynth script, since there are some points of special interest to XL2 users. Normally one would simply use a script like this:
avisource("file")
fft3dgpu
However one can obtain better results by eliminating the extraneous telecined frames. Progressive frames allow for more effective spatial noise reduction. It also makes for smaller files when you save the filtered clip. The way to do that is with the SelectEvery command. As its name suggests, this command selectively retains frames. By selecting only the progressive frames, we can pull down the 60i clip to 24P, like so:
SelectEvery(5,0,1,3,4)
This instructs avisynth to drop every second frame out of a group of five, thereby reducing its frame rate from 59.94i=29.97P to 23.97P. You might have to use a different set of numbers after the five in order to select the one interlaced frame.
The FFT3Dgpu filter accepts many parameters, the most important of which is the sigma setting, which controls the strength of the noise reduction. It’s a matter of trial and error to see how much cleaning your clip requires. You want to ensure that your denoised clip looks natural beside clips it abuts, if they are part of the same scene. Do not aim to clean every last bit of noise.
My finished script looks like this:
avisource("file")
SelectEvery(5,0,1,3,4)
fft3dgpu(sigma=3)
coloryuv(levels="pc->tv")
The last line accounts for the fact that the lagarith codec does not encode using the ITU-R 601 color space. Without it, your clip will have clipped highlights and shadows. Then I set the video mode in Virtualdub to Fast Recompress to avoid a color space conversion (i.e., staying in YUY2 for DV) and writing a lagarith file also in YUY2.
Finally, I insert the clip in Vegas by adding another take to the existing clip so I can easily switch back and forth with. Of course, this requires you to have already trimmed the clip in Virtualdub to the correct position.