Srestore: Difference between revisions
From Avisynth wiki
Jump to navigationJump to search
mNo edit summary |
m fixed the SRestore(mode=-4, omode="pp0") example as it was incorrectly using "dmode" instead of "mode" |
||
| (13 intermediate revisions by 3 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(mode=-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 20:57, 4 January 2025
| Abstract | |
|---|---|
| Author | MOmonster, Real.Finder |
| Version | v2.796 |
| Download | srestore v2.796 |
| Category | Deblenders |
| License | Open Source |
| Discussion | Doom9 Thread |
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.
Requirements
- *AviSynth 2.6 or AviSynth+ (x86 / x64)
- Supported color formats: YV12, YUY2
- Progressive input only
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)
- 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(mode=-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).
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)
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
External Links
- Doom9 Forum - Srestore discussion.
Back to External Filters ←