I also agree grain should be touched ever so lightly or not at all.
A prime example, funnily enough, is a 1987 film of Predator.
I read so many reviews when the "Ultimate Hunter Edition" came out only to find out it's heavily DNR'ed and looked like wax to so many people.
I went store to store to look for the first release of the movie, with the grain.
It was significantly cheaper since the UHE was available.
I've personally never dealt with grain removal, but I would go with any of the above for their experience.
EDIT: Assuming the source is progressive:
You can add this right after the source filter so you can trim the video down to 5 minutes or less for test encoding with the various degraining filters:
Code:
### NTSC VALUES # (24000 / 1001 = 23.97602397602398)
## 30s=719 | 1min=1438 | 2min=2877 | 3min=4315 | 4min=5754 | 5min=7192 | 10min=14385 ########
SelectRangeEvery(every=1500, length=71, offset=0, audio=false).Trim(0, 7192)
The number sign (#) is a comment sign that gets ignored in scripts.
71 seconds will give you over a minute of video frames, which should do well to judge a scene long enough.
I luck out during scene changes.
The Trim at the end you can change from 7192 (5min) to any thing else, as long as it's equal to the source frame rate (23.976, 24, 25; all after deinterlacing/detelecining).
You'll get 5min of a test encode using each variation of degraining and you can judge yourself what suits your own needs, as grain is a highly subjective nature rather than an objective nature.
It would look like this really...
degrain.avs
Code:
SetMemoryMax(512)
LoadPlugin(whatever)
FFVideoSource("source.mkv", cachefile="source.mkv.ffindex")
## TFM order | -1 auto | 0 BFF | 1 TFF #
#tfm(order=0, mode=5, slow=2, pp=7, field=0).TDecimate(mode=1, hybrid=1).Vinverse()
#remove comment for above line if it needs detelecine for 1080i film.
### NTSC VALUES # (24000 / 1001 = 23.97602397602398)
## 30s=719 | 1min=1438 | 2min=2877 | 3min=4315 | 4min=5754 | 5min=7192 | 10min=14385 ########
SelectRangeEvery(every=1500, length=71, offset=0, audio=false).Trim(0, 7192)
DeRingFiler()
Change "DeRingFilter()" to
whatever filter the others have suggested.
If you want to use
SetMTMode() with it, you'll have to make sure any dependancy plugins are updated for whatever version of Avisnynth you are using (assuming you are using most current
AviSynth 2.6.0 RC1 [Jan 14th, 2015]).
Alternatively, for a
speed boost, you can also try out
ThreadRequest() and add it to the end most lines after the source line (FFVideoSource, DirectShowSource, DGsource, etc) as ".ThreadRequest()".
But, ThreadRequest is more stable without SetMTMode, but some have experimented with the combination of the two, I have yet to see a difference myself, so it's largely dependent on what filters are used and how...
TMI.
Code:
SelectRangeEvery(every=1500, length=71, offset=0, audio=false).Trim(0, 7192).ThreadRequest()