Srestore
From Avisynth wiki
(Difference between revisions)
(2.7f -> 2.7f+ (as in g)) |
m |
||
(11 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{FilterCat4|External_filters|Scripts|Restoration_filters|Deblenders}} |
− | {{ | + | {{Filter3 |
− | + | |MOmonster, Real.Finder | |
− | + | |v2.796 | |
− | | | + | | |
− | + | 3= [http://pastebin.com/raw/JYBjMBvx srestore v2.796] | |
+ | |4= Deblenders | ||
+ | |5= Open Source | ||
+ | |6=[https://forum.doom9.org/showthread.php?t=95924 Doom9 Thread]}} | ||
+ | == Description == | ||
+ | Srestore is the replacement function for [[mrestore]], Cdeblend, [[FixBlendIVTC]] and DupHq from the [http://forum.gleitz.info/showthread.php?31622-Mrestore-und-andere-Restoringtools R_pack]. It is an AviSynth script function that uses conditional frame evaluation for the output calculation.<br> | ||
+ | Generally it was written to undo norm-conversions with blends, but the last version can be useful for decimation ratios between 5 and 1 using the '''frate''' parameter. | ||
+ | <br> | ||
+ | <br> | ||
+ | == Requirements == | ||
+ | * *[http://sourceforge.net/projects/avisynth2/ AviSynth 2.6] or [[AviSynth+]] (x86 / x64) | ||
+ | * Supported color formats: [[YV12]], [[YUY2]] | ||
+ | * [[FAQ_different_types_content#How_do_I_recognize_progressive.2C_interlaced.2C_telecined.2C_hybrid_and_blended_content.3F|Progressive]] input only | ||
− | == | + | ==== Required Plugins ==== |
− | + | Latest version of the following plugins are recommended unless stated otherwise.<br> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
*[[MaskTools2]] | *[[MaskTools2]] | ||
− | *[[TIVTC]] | + | Optional plugins: |
− | *[[RemoveGrain]] | + | *[[TIVTC]] - (only for <tt>cache>0</tt>, not default) |
− | *[ | + | *<strike>RemoveGrain - part of the [[RemoveGrain v1.0b]] package.</strike> - (only for double-blend-removal, not default) |
− | *[ | + | *[[RgTools]] - recommended drop-in replacement for RemoveGrain! |
− | + | *[[Average]] - (only for double-blend-removal, not default) | |
− | + | *[[GRunT]] (only for <tt>Srestore v2.7f</tt> or greater) | |
− | + | <br> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | == [[Script variables|Syntax and Parameters]] == | |
+ | :{{Template:FuncDef|srestore(clip source, float "frate", "omode", float "blocks", int "mthresh", int "bthresh", bool "chroma", int "cache", float "rr", clip "dclip")}} | ||
+ | <br> | ||
+ | ::{{Par|source|clip|}} | ||
+ | :::Input clip. | ||
+ | <br> | ||
+ | ::{{Par|frate|float|optional}} | ||
+ | :::You don't need to set the decimation parameters for the norm conversions restoring Pal_to_NTSC (50->23.976 or 25->11.988) and NTSC_to_Pal (59.94->25 or 29.97->12.5), | ||
+ | :::but for some seldom other blend conversion (for example 29.97 back to 23.976 or 50 to 25 - DEFT). Use frate to set the wanted output-framerate. | ||
+ | :::If source-framerate/frate >5 or <1 the output-framerate will be the same as the input-framerate. This can be useful if you want to have only the dup functionality of srestore. | ||
+ | <br> | ||
+ | ::{{ParR|omode|string|6|0-6 or mode}} | ||
+ | :::Srestore can be used as blend-decimation-function, as simple deblend-function and for double-blend-removal | ||
+ | :::: 1 - deblend-mode 1 -> detected blends will be replaced with the previous frame | ||
+ | :::: 2 - deblend-mode 2 -> next frame is used instead of the detected blend | ||
+ | :::: 3 - deblend-mode 3 -> detected blends will be replaced with the neighbour that has the smaller difference | ||
+ | :::: 4 - deblend-mode 4 -> use the neighbour with the smaller blend-possibility | ||
+ | :::: 5 - deblend-special -> outputs the one of four frames with the smallest blend-possibility | ||
+ | :::: >5 - blend-decimation -> for all decimation operations | ||
− | + | :::The output-modes 1-5 are simple deblending modes, so the framerate will not change. | |
− | + | ||
− | + | :::To enable the double-blend-removal you have to set a string for omode. This string decides about the postprocessing mode that is used on the restored frames: | |
+ | :::: pp0 -> the fastest mode, no postprocessing | ||
+ | :::: pp1 -> use difference masking, higher quality and still good speed | ||
+ | :::: pp2 -> use a special blurring mask on luma and chroma that reduces artefacts | ||
+ | :::: pp3 -> combines postprocessing 1 and 2 -> slowest | ||
− | |||
− | |||
− | + | :::You can add also your own postprocessing to these modes. Just add your function like this: | |
− | + | ::::<pre>omode="pp3.blur(1)" -> pp3 + blurring</pre> | |
− | : | + | |
− | : | + | |
− | : | + | |
− | : > | + | |
− | + | ||
− | + | ||
− | + | :::If you want to add a function with its own inputstrings use three quotation marks: | |
− | + | ::::<pre>omode="""pp2.deen("a2d")"""</pre> | |
− | {{ParR|cache|int|-1|-1-10}} | + | <blockquote><blockquote> |
− | With cache>=0 srestore use the RequestLinear function (TIVTC) to be more compatible with non-linear requesting (codec or other functions). Best way to use srestore is to do a lossless first pass right after calling srestore and do all other filtering and the final encoding in a second pass. If you do not have enough space to do a lossless pass and you cannot avoid non-linear frame requesting and the pattern of the source is pretty unstable set cache around 5-10, but keep in mind that this can increase memory usage. | + | Important Note:<br> |
− | + | ::Also the double-blend-removal does no decimation. It's created only for double-blends caused by blend deinterlacing of telecined sources.<br> | |
− | {{Par|dclip|clip| | + | ::You have to add an decimation function for full restoring: |
− | The '''d'''etection '''clip''' can be used to improve (deblock, smooth, ...) and speed-up blend and motion detection. The selected clip is only used for detection and not for output, so it does not affect the output quality. | + | <blockquote> |
− | If you use a high quality deinterlacing on the source you can speed up the detection by using a faster deinterlacing function (third code example) for the detection clip. | + | <pre> |
− | It's recommended to crop the bobbed source (deinterlace BEFORE cropping!) to avoid the detection influence of the bobbing borders (second code example). | + | source #progressive |
+ | srestore(dmode=-4,omode="pp0") | ||
+ | decimate(cycle=5,quality=0) #recommed decimating | ||
+ | </pre> | ||
+ | </blockquote> | ||
+ | </blockquote> | ||
+ | <br> | ||
+ | :{{ParR|speed|int|9|-25-25}} | ||
+ | ::With the speed parameter you can set a speed-vs-detail-detection value. If you set speed=25, only one of 25 pixels (5*5) is used for the detection. | ||
+ | ::Higher values result in a lower possibility of low-detail detection. Set a negative speed value for high quality and hd sources. This can improve the detection of small details. | ||
+ | <br> | ||
+ | :{{ParR|mode|int|2|1-3}} | ||
+ | ::With the mode parameter you can decide if chroma should be used for detection and if srestore have to merge neighboured frames or look for dups to improve output quality: | ||
+ | ::: 1 - simple output mode, decimation is not touched | ||
+ | ::: 2 - duping feature, if a frame has a dup-neighbour, that seems to have a higher quality, this one will be outputed | ||
+ | ::: 3 - like 2 but the duplicates will be merged | ||
+ | ::: >3 - mode 2 and 3 combined | ||
+ | :::By setting the compatible negative values, the chroma values will be also used for the detection. | ||
+ | ::Note: The double-blend-removal does not use this parameter (-> only mode 1 or -1). | ||
+ | <br> | ||
+ | :{{ParR|thresh|int|22|12-44}} | ||
+ | ::The detection of srestore is pretty stable, but the threshold is still important to weight the detection influence. | ||
+ | ::Use small values for sources with little temporal artefacts (bobbing effect, aliasing, blocks, noise, ...) and higher values for the opposite case. | ||
+ | <br> | ||
+ | :{{ParR|cache|int|-1|-1-10}} | ||
+ | ::With cache>=0 srestore use the RequestLinear function (TIVTC) to be more compatible with non-linear requesting (codec or other functions). | ||
+ | ::Best way to use srestore is to do a lossless first pass right after calling srestore and do all other filtering and the final encoding in a second pass. | ||
+ | ::If you do not have enough space to do a lossless pass and you cannot avoid non-linear frame requesting and the pattern of the source is pretty unstable set cache around 5-10, | ||
+ | ::but keep in mind that this can increase memory usage. | ||
+ | <br> | ||
+ | :{{Par|dclip|clip|}} | ||
+ | ::The '''d'''etection '''clip''' can be used to improve (deblock, smooth, ...) and speed-up blend and motion detection. | ||
+ | ::The selected clip is only used for detection and not for output, so it does not affect the output quality. | ||
+ | ::If you use a high quality deinterlacing on the source you can speed up the detection by using a faster deinterlacing function (third code example) for the detection clip. | ||
+ | ::It's recommended to crop the bobbed source (deinterlace BEFORE cropping!) to avoid the detection influence of the bobbing borders (second code example). | ||
+ | <br> | ||
== Examples== | == Examples== | ||
Line 90: | Line 122: | ||
tdeint(mode=1) #or for example yadif(mode=1) | tdeint(mode=1) #or for example yadif(mode=1) | ||
srestore(mode=4,dclip=d) | srestore(mode=4,dclip=d) | ||
+ | <br> | ||
+ | == Changelog == | ||
+ | Version Date Changes<br> | ||
+ | 2.796 2019/02/21 - ? [http://forum.doom9.org/showthread.php?p=1846373#post1846373]<br> | ||
+ | 2.795 2018/07/11 - Update to masktools 2.2.17, clean up [http://forum.doom9.org/showthread.php?p=1846373#post1846373]<br> | ||
+ | 2.794 2018/06/12 - Fix another bug in 12bit ([http://forum.doom9.org/showthread.php?p=1844327#post1844327 StainlessS])<br> | ||
+ | 2.793 2018/06/10 - Fix bug in 12bit ([http://forum.doom9.org/showthread.php?p=1844217#post1844217 StainlessS])<br> | ||
+ | 2.792 2018/03/14 - Native ReplaceStr using in avs+<br> | ||
+ | 2.791 2017/11/22 - Some edit in speed parameter (in avs26 or avs+ will get different results now)<br> | ||
+ | 2.78 2017/06/15 - Some fix<br> | ||
+ | 2.77 2017/05/25 - Fix high bit depth<br> | ||
+ | 2.76 2017/03/31 - Update to masktools 2.2.5<br> | ||
+ | 2.75 2017/03/09 - Now works with all high bit depth in avs+<br> | ||
+ | 2.7i 2017/02/09 - Clean up and add YUY2 and other format<br> | ||
+ | 2.7h 2014/03/23 - Changes by [https://forum.doom9.org/showpost.php?p=1674765&postcount=668 real.finder] | ||
+ | - Update to use tp7's updated [[Average]]<br> | ||
+ | 2.7g 2013/11/12 - Changes by [https://forum.doom9.org/showpost.php?p=1650423&postcount=660 martin53] | ||
+ | - Refactored to use a single line [[ScriptClip]]() call like v2.7e - | ||
+ | necessary to save AviSynth string heap space when RTE is called<br> | ||
+ | 2.7f 2013/10/28 - Changes by [https://forum.doom9.org/showpost.php?p=1650423&postcount=660 martin53] | ||
+ | - Callable more than once from the same script with help of unique global variables per instance. | ||
+ | - Moderate reformatting to re-establish readability with the new variable names. | ||
+ | - Needs [https://forum.doom9.org/showthread.php?t=139337 GRunT plugin]<br> | ||
+ | 2.7e 2009/11/18 - Last official version by [https://forum.doom9.org/showpost.php?p=1345186&postcount=460 MOmonster] | ||
+ | <br> | ||
==External Links== | ==External Links== | ||
− | *[ | + | *[https://forum.doom9.org/showthread.php?t=95924 Doom9 Forum] - Srestore discussion. |
+ | <br> | ||
+ | <br> | ||
+ | ----------------------------------------------- | ||
+ | '''Back to [[External_filters#Fieldblending_and_Frameblending_removal|External Filters]] ←''' |
Latest revision as of 17:20, 28 February 2019
Abstract | |
---|---|
Author | MOmonster, Real.Finder |
Version | v2.796 |
Download | srestore v2.796 |
Category | Deblenders |
License | Open Source |
Discussion | Doom9 Thread |
Contents |
[edit] Description
Srestore is the replacement function for mrestore, Cdeblend, FixBlendIVTC and DupHq from the R_pack. It is an AviSynth script function that uses conditional frame evaluation for the output calculation.
Generally it was written to undo norm-conversions with blends, but the last version can be useful for decimation ratios between 5 and 1 using the frate parameter.
[edit] Requirements
- *AviSynth 2.6 or AviSynth+ (x86 / x64)
- Supported color formats: YV12, YUY2
- Progressive input only
[edit] Required Plugins
Latest version of the following plugins are recommended unless stated otherwise.
Optional plugins:
- TIVTC - (only for cache>0, not default)
RemoveGrain - part of the RemoveGrain v1.0b package.- (only for double-blend-removal, not default)- RgTools - recommended drop-in replacement for RemoveGrain!
- Average - (only for double-blend-removal, not default)
- GRunT (only for Srestore v2.7f or greater)
[edit] Syntax and Parameters
- srestore(clip source, float "frate", "omode", float "blocks", int "mthresh", int "bthresh", bool "chroma", int "cache", float "rr", clip "dclip")
- source clip =
- Input clip.
- source clip =
- frate float = optional
- You don't need to set the decimation parameters for the norm conversions restoring Pal_to_NTSC (50->23.976 or 25->11.988) and NTSC_to_Pal (59.94->25 or 29.97->12.5),
- but for some seldom other blend conversion (for example 29.97 back to 23.976 or 50 to 25 - DEFT). Use frate to set the wanted output-framerate.
- If source-framerate/frate >5 or <1 the output-framerate will be the same as the input-framerate. This can be useful if you want to have only the dup functionality of srestore.
- frate float = optional
- omode string (0-6 or mode, default 6)
- Srestore can be used as blend-decimation-function, as simple deblend-function and for double-blend-removal
- 1 - deblend-mode 1 -> detected blends will be replaced with the previous frame
- 2 - deblend-mode 2 -> next frame is used instead of the detected blend
- 3 - deblend-mode 3 -> detected blends will be replaced with the neighbour that has the smaller difference
- 4 - deblend-mode 4 -> use the neighbour with the smaller blend-possibility
- 5 - deblend-special -> outputs the one of four frames with the smallest blend-possibility
- >5 - blend-decimation -> for all decimation operations
- Srestore can be used as blend-decimation-function, as simple deblend-function and for double-blend-removal
- omode string (0-6 or mode, default 6)
- The output-modes 1-5 are simple deblending modes, so the framerate will not change.
- To enable the double-blend-removal you have to set a string for omode. This string decides about the postprocessing mode that is used on the restored frames:
- pp0 -> the fastest mode, no postprocessing
- pp1 -> use difference masking, higher quality and still good speed
- pp2 -> use a special blurring mask on luma and chroma that reduces artefacts
- pp3 -> combines postprocessing 1 and 2 -> slowest
- To enable the double-blend-removal you have to set a string for omode. This string decides about the postprocessing mode that is used on the restored frames:
- You can add also your own postprocessing to these modes. Just add your function like this:
omode="pp3.blur(1)" -> pp3 + blurring
- You can add also your own postprocessing to these modes. Just add your function like this:
- If you want to add a function with its own inputstrings use three quotation marks:
omode="""pp2.deen("a2d")"""
- If you want to add a function with its own inputstrings use three quotation marks:
Important Note:
- Also the double-blend-removal does no decimation. It's created only for double-blends caused by blend deinterlacing of telecined sources.
- You have to add an decimation function for full restoring:
source #progressive srestore(dmode=-4,omode="pp0") decimate(cycle=5,quality=0) #recommed decimating
- speed int (-25-25, default 9)
- With the speed parameter you can set a speed-vs-detail-detection value. If you set speed=25, only one of 25 pixels (5*5) is used for the detection.
- Higher values result in a lower possibility of low-detail detection. Set a negative speed value for high quality and hd sources. This can improve the detection of small details.
- mode int (1-3, default 2)
- With the mode parameter you can decide if chroma should be used for detection and if srestore have to merge neighboured frames or look for dups to improve output quality:
- 1 - simple output mode, decimation is not touched
- 2 - duping feature, if a frame has a dup-neighbour, that seems to have a higher quality, this one will be outputed
- 3 - like 2 but the duplicates will be merged
- >3 - mode 2 and 3 combined
- By setting the compatible negative values, the chroma values will be also used for the detection.
- Note: The double-blend-removal does not use this parameter (-> only mode 1 or -1).
- thresh int (12-44, default 22)
- The detection of srestore is pretty stable, but the threshold is still important to weight the detection influence.
- Use small values for sources with little temporal artefacts (bobbing effect, aliasing, blocks, noise, ...) and higher values for the opposite case.
- cache int (-1-10, default -1)
- With cache>=0 srestore use the RequestLinear function (TIVTC) to be more compatible with non-linear requesting (codec or other functions).
- Best way to use srestore is to do a lossless first pass right after calling srestore and do all other filtering and the final encoding in a second pass.
- If you do not have enough space to do a lossless pass and you cannot avoid non-linear frame requesting and the pattern of the source is pretty unstable set cache around 5-10,
- but keep in mind that this can increase memory usage.
- dclip clip =
- The detection clip can be used to improve (deblock, smooth, ...) and speed-up blend and motion detection.
- The selected clip is only used for detection and not for output, so it does not affect the output quality.
- If you use a high quality deinterlacing on the source you can speed up the detection by using a faster deinterlacing function (third code example) for the detection clip.
- It's recommended to crop the bobbed source (deinterlace BEFORE cropping!) to avoid the detection influence of the bobbing borders (second code example).
[edit] Examples
bobbed (or progressive) source
srestore()or:
ord = last.getparity() ? 1 : 0 leakkernelbob(ord,4,true,true) srestore(dclip=last.crop(8,16,-8,-24))or:
d = last.bob(-0.2,0.6).reduceflicker(strength=1) tdeint(mode=1) #or for example yadif(mode=1) srestore(mode=4,dclip=d)
[edit] Changelog
Version Date Changes
2.796 2019/02/21 - ? [1]
2.795 2018/07/11 - Update to masktools 2.2.17, clean up [2]
2.794 2018/06/12 - Fix another bug in 12bit (StainlessS)
2.793 2018/06/10 - Fix bug in 12bit (StainlessS)
2.792 2018/03/14 - Native ReplaceStr using in avs+
2.791 2017/11/22 - Some edit in speed parameter (in avs26 or avs+ will get different results now)
2.78 2017/06/15 - Some fix
2.77 2017/05/25 - Fix high bit depth
2.76 2017/03/31 - Update to masktools 2.2.5
2.75 2017/03/09 - Now works with all high bit depth in avs+
2.7i 2017/02/09 - Clean up and add YUY2 and other format
2.7h 2014/03/23 - Changes by real.finder - Update to use tp7's updated Average
2.7g 2013/11/12 - Changes by martin53 - Refactored to use a single line ScriptClip() call like v2.7e - necessary to save AviSynth string heap space when RTE is called
2.7f 2013/10/28 - Changes by martin53 - Callable more than once from the same script with help of unique global variables per instance. - Moderate reformatting to re-establish readability with the new variable names. - Needs GRunT plugin
2.7e 2009/11/18 - Last official version by MOmonster
[edit] External Links
- Doom9 Forum - Srestore discussion.
Back to External Filters ←