Log in

View Full Version : Oyster, placebo compression artifacts buster


Pages : [1] 2 3

feisty2
3rd May 2016, 12:06
readme and more
https://github.com/IFeelBloated/Oyster

How this thing works:
certain component of the signal (something other than noise or blankness) would require either high resolution in time domain or frequency domain, but not both (uncertainty principle).

videos are non-stationary signals obviously, so ideal Fourier transform (something like DFTTest(sbsize=10000000000000001, tbsize=10000000000000001)) won't work, transform like that has a high frequency resolution but very poor time resolution, and leads to catastrophic results on components carrying lots of time features (sharp edges, delicate details, etc.), ringings, edges blurred out, and shit like that.

so, short time Fourier transform (something like DFTTest(sbsize=3, tbsize=3)), well, this kind of transform has a relatively higher time resolution but poor frequency resolution, and yeah, you know what kind of shit is about to happen next (washed-out, posterized, etc.), and lim(window size -> 0) gives the completely untransformed data! (frequency resolution -> 0)

anyways, it all comes down to one word, "resolution", you need higher resolution to get better quality, and BM3D, state of the art denoiser enhances frequency resolution by matching similar macroblocks. once a group of similar blocks have been matched, the group of signals go (mostly) stationary as similar blocks share similar copies of frequency distribution, and that's good news, and now go large-window-sized Fourier transform and get a high frequency resolution. and no worries about all that time resolution stuff cuz stationary signal simply has no time feature.

so why do we need more, I mean, BM3D sounds definitely awesome, the thing is, BM3D maximizes frequency resolution by re-positioning (block matching) the video signal, and after all these smart and well designed procedures, signal goes MOSTLY stationary but apparently not COMPLETELY stationary so there's still loss of time feature, BM3D manages to minimize that, but couldn't cancel that out completely, and then you notice that loss of sharpness on edges and delicate details and that's why NLMeans, a time domain filter should step in and clean the mess, and about MDeGrain? well, BM3D simply isn't aggressive enough to compression artifacts, you need something brutal and fierce to wipe the shit away first regardless of detail loss, and then recover the lost details and that's why MDeGrain stays around.

MDeGrain -> BM3D -> NLMeans, it just gets more and more delicate each time and details are restored gradually, and artifacts gets its ass kicked

log:
r4:
strict sanity check in every single function, a lot more user friendly and should be ok to work like any typical module now
added some temporal padding to KNLMeansCL
re-licensed to LGPL v3.0
trivial modifications to the doc
.gitignore

r3
algorithmic update, so quality boost

r2.1
removed global core cuz Myrsloik said it was a horrible idea, simple "import Oyster" works now
new function Search
rewrote Basic
trivial modifications to Final
removed SATD, SAD works better on compression artifacts
removed TrueMotion

jackoneill
3rd May 2016, 13:00
Who is that?

feisty2
3rd May 2016, 14:33
Who is that?

what?
you mean the sample clip?
Kylie Minogue - Come Into My World
one of the best music videos like ever

AzraelNewtype
4th May 2016, 00:22
Waifu2x(dunno why but it looks kinda cartoonized somehow)

Because waifu2x is a neural network scaler trained to upscale cartoons, not live action? Its ability to fight compression artifacts (typically jpeg artifacts) is in service of that goal, not general purpose cleaning.

feisty2
4th May 2016, 00:24
Because waifu2x is a neural network scaler trained to upscale cartoons, not live action? Its ability to fight compression artifacts (typically jpeg artifacts) is in service of that goal, not general purpose cleaning.

it has a photo mode indeed, but still...
no luck with that

BakaProxy
4th May 2016, 02:12
#3DWaifusExist

Verstuurd vanaf mijn SM-A500FU met Tapatalk

feisty2
4th May 2016, 03:49
#3DWaifusExist

Verstuurd vanaf mijn SM-A500FU met Tapatalk

Please do tell, where

BakaProxy
4th May 2016, 12:46
Please do tell, where
They're called real people

Verstuurd vanaf mijn SM-A500FU met Tapatalk

feisty2
4th May 2016, 13:10
They're called real people

Verstuurd vanaf mijn SM-A500FU met Tapatalk

okay, not funny.
thought an inter-waifu2x was out. (waifu2x is intra)

feisty2
9th May 2016, 07:56
r2.1
removed global core cuz Myrsloik said it was a horrible idea, simple "import Oyster" works now
new function Search
rewrote Basic
trivial modifications to Final
removed SATD, SAD works better on compression artifacts
removed TrueMotion

RazorBurn
11th May 2016, 08:02
Got error on r2.1

Failed to evaluate the script:
Python exception: Crop: cropped area extends beyond frame dimensions
Traceback (most recent call last):
File "src\cython\vapoursynth.pyx", line 1491, in vapoursynth.vpy_evaluateScript (src\cython\vapoursynth.c:26897)
File "C:/Temp/StaxRip Temp/SampleClip_temp/SampleClip.vpy", line 11, in <module>
ref = Oyster.Basic(y,vec)
File "C:\Apps\Python\lib\site-packages\Oyster.py", line 171, in Basic
_mask = helpers.genblockmask (ShufflePlanes (src, 0, vs.GRAY))
File "C:\Apps\Python\lib\site-packages\Oyster.py", line 70, in genblockmask
clip = CropAbs (clip, src.width, src.height, 0, 0)
File "src\cython\vapoursynth.pyx", line 1383, in vapoursynth.Function.__call__ (src\cython\vapoursynth.c:25204)
vapoursynth.Error: Crop: cropped area extends beyond frame dimensions

My Code

import vapoursynth as vs
core = vs.get_core()
import mvsfunc
import edi_rpow2 as edi
import mvmulti
import Oyster
clip = core.lsmas.LibavSMASHSource(r"D:\Installers\Multimedia\Video Test Samples\SampleClip.mp4")
clp = mvsfunc.ToRGB(input = clip, depth=32)
y = core.std.ShufflePlanes(clp,0,vs.GRAY)
vec = Oyster.Search(y)
ref = Oyster.Basic(y,vec)
y = Oyster.Final(y,ref,vec)
clip = core.std.ShufflePlanes([y,clp], [0,1,2], vs.YUV)
clip.set_output()

feisty2
12th May 2016, 14:18
Got error on r2.1

clp = mvsfunc.ToRGB(input = clip, depth=32)
y = core.std.ShufflePlanes(clp,0,vs.GRAY)
...

???
and what's the resolution of your clip?

feisty2
3rd July 2016, 17:24
r3
algorithmic update, so quality boost

feisty2
5th July 2016, 16:58
so, bad news here.
been hours and I tried like a million sets of parameters to investigate if there's any chance of quality-speed tradeoff, and, failed to get rid of the abysmal performance even tho had reached the bottom line of almost, everything.
I lowered the precision down to uint8_t, and picked jackoneill's heavily asm optimized mvtools
I used fast profile on V-BM3D
I ditched Oyster.Super, made pel 1, lowest value possible, switched vector searching algorithm from exhaustive to hex
I disabled the varying search window of NLMeans, and fixed that to 4, constant
and, the performance went from 0.00fps up to 0.11fps on 720x480 GRAY, but, I mean, that's still outrageously SLOOOW..
guys, I really tried, but... yeah, and I'm out of ideas of performance boost..

Mystery Keeper
5th July 2016, 17:46
feisty2, 'tis okay. There was a time when I had to ditch simple anime anti-aliasing because it was too slow on my ancient PC. Eventually we'll have enough power to put your script into good use.

feisty2
6th July 2016, 12:23
feisty2, 'tis okay. There was a time when I had to ditch simple anime anti-aliasing because it was too slow on my ancient PC. Eventually we'll have enough power to put your script into good use.

I actually think there will be a huge performance boost if someone could make a GPU version of BM3D...

and I wrote the underlying mechanism at #1, hopefully not some kind of "utterly bizarre misunderstanding"

lansing
7th July 2016, 00:31
Is this 64bit only? The required mvtool plugin only has a 64bit version

feisty2
7th July 2016, 06:47
Is this 64bit only? The required mvtool plugin only has a 64bit version

uhmm, I could compile an x86 binary if you need that, this thing consumes A LOT OF ram, so that probably won't work anyway, you got that 4GB upper limit on x86 programs

Are_
7th July 2016, 13:07
Tell me about that, I was testing if I had all the dependencies right with a 1080p source and ran OOM on my 16GB Ram machine. :(

feisty2
8th July 2016, 08:09
Tell me about that, I was testing if I had all the dependencies right with a 1080p source and ran OOM on my 16GB Ram machine. :(

I got 16G also and didn't do any 1080p test, that's just way too heavy to my crappy i7-4790k, guess you'll need Xeon E5 or maybe Xeon E7 to go for a 1080p test, the highest resolution test I did is 720p, and it ran for an hour or so to just reconstruct one single frame

and also you will have to vspipe intermediate clips (basic estimation, etc) to your hard drive to avoid OOM on 720p
basically, something like this

ref = Oyster.Basic (clp, Oyster.Super (clp))
clp = Oyster.Destaircase (clp, ref, block_step=2)
clp = Oyster.Deringing (clp, ref, block_step=2)

goes like

ref = Oyster.Basic (clp, Oyster.Super (clp))
ref.set_output()
#vspipe xxx.vpy ref.rgb



ref = core.raws.Source ("ref.rgb")
clp = Oyster.Destaircase (clp, ref, block_step=2)
clp.set_output()
#vspipe xxx.vpy clp.rgb



ref = core.raws.Source ("ref.rgb")
clp = core.raws.Source ("clp.rgb")
clp = Oyster.Deringing (clp, ref, block_step=2)
clp.set_output()
#vspipe xxx.vpy whatever.rgb

lansing
8th July 2016, 21:34
uhmm, I could compile an x86 binary if you need that, this thing consumes A LOT OF ram, so that probably won't work anyway, you got that 4GB upper limit on x86 programs

well I think that's a bad idea then, my machine has only 16G RAM and my video is 1080

raffriff42
9th July 2016, 02:29
I haven't looked at your code, but if it does a lot of temporal filtering, this can be a big time and memory hog, since filters upstream of a temporal filter get called repeatedly (unless they are cached, but in your case the cache is exhausted quickly). This problem really blows up with multiple temporal filters. The same frame could be processed with the same filter dozens of times. You can see this by inserting temporary WriteFile(current_frame) statements. You should be able to save time and memory by splitting the process into parts, with lossless intermediate files, so expensive operations early in the chain only need to get executed once per frame.

feisty2
19th August 2016, 15:56
r4:
strict sanity check in every single function, a lot more user friendly and should be ok to work like any typical module now
added some temporal padding to KNLMeansCL
re-licensed to LGPL v3.0
trivial modifications to the doc
.gitignore

WolframRhodium
22nd August 2016, 14:44
lWhy not use BM3D in cutoff?
And what's your reason for changing from gauss_resample to DFTTest? Maybe because DFTTest is a spatial-temporal filter(while gauss_resample is just a spatial filter) so that it works theoretically better in most cases?

feisty2
22nd August 2016, 16:20
lWhy not use BM3D in cutoff?
And what's your reason for changing from gauss_resample to DFTTest? Maybe because DFTTest is a spatial-temporal filter(while gauss_resample is just a spatial filter) so that it works theoretically better in most cases?

there's no "cutoff" parameter in Oyster, I assume your were talking about "lowpass"
"lowpass" works as a noise dumper, it separates components with possibility to carry certain noise from components with no noise at all.
and no, DFTTest here is completely spatial(tbsize=0), I picked it because wiener filter (https://en.wikipedia.org/wiki/Wiener_filter)works better than Gaussian blur on noise separation

WolframRhodium
23rd August 2016, 00:26
there's no "cutoff" parameter in Oyster, I assume your were talking about "lowpass"
"lowpass" works as a noise dumper, it separates components with possibility to carry certain noise from components with no noise at all.
and no, DFTTest here is completely spatial(tbsize=0), I picked it because wiener filter (https://en.wikipedia.org/wiki/Wiener_filter)works better than Gaussian blur on noise separation

oh that is freq_merge, I confuse it with your other script...
Then you mean using DFTTest in things like freq_merge and gaussian blur in cutoff?

groucho86
24th August 2016, 18:08
Hey feisty2 , I'm not sure if this is a graphics card issue, lack of RAM or something else.

My source file is ProRes 422HQ.

I'm trying to run the following code:
import vapoursynth as vs
import havsfunc as haf
import mvsfunc as mvf
import mvmulti
import Oyster

core = vs.get_core()

core.std.LoadPlugin("/usr/local/lib/libmvtoolssf.dylib")
core.std.LoadPlugin("/usr/local/lib/libfmtconv.dylib")
core.std.LoadPlugin("/usr/local/lib/libscenechange.dylib")
core.std.LoadPlugin("/usr/local/lib/libtemporalsoften2.dylib")
core.std.LoadPlugin("/usr/local/lib/libffms2.4.dylib")


clip = core.lsmas.LibavSMASHSource(source="/Volumes/OFFLINE/prores422hq.mov")

clip = mvf.ToRGB(input = clip, depth=32)
y = core.std.ShufflePlanes(clip,0,vs.GRAY)

ref = Oyster.Basic(y, Oyster.Super (y))

y = Oyster.Deblocking(y, ref, block_step=2)
y = Oyster.Deringing(clip, ref, sigma=24.0, h=10.8, block_step=2)

clip = core.std.ShufflePlanes([y,clip], [0,1,2], vs.YUV)

clip.set_output()

VapourSynth Editor returns the following error:
Failed to evaluate the script:
Python exception: knlm.KNLMeansCL: fatal error!
(clCreateImage(d.mem_in[0]): CL_IMAGE_FORMAT_NOT_SUPPORTED)
Traceback (most recent call last):
File "src/cython/vapoursynth.pyx", line 1491, in vapoursynth.vpy_evaluateScript (build/temp.macosx-10.9-x86_64-3.5/pyrex/vapoursynth.c:26897)
File "/Volumes/VG_SHUTTLE04/oyster01.vpy", line 23, in <module>
y = Oyster.Deblocking(y, ref, block_step=2)
File "/usr/local/opt/python3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Oyster.py", line 448, in Deblocking
lowpass, color, matrix)
File "/usr/local/opt/python3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Oyster.py", line 193, in deblocking
cleansed = helpers.nlmeans(ref, radius, block_size, 4, h, ref, color)
File "/usr/local/opt/python3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Oyster.py", line 45, in nlmeans
nlm = KNLMeansCL(pad, d=d, a=a, s=s, h=h, cmode=color, wref=1.0, rclip=rclip)
File "src/cython/vapoursynth.pyx", line 1383, in vapoursynth.Function.__call__ (build/temp.macosx-10.9-x86_64-3.5/pyrex/vapoursynth.c:25204)
vapoursynth.Error: knlm.KNLMeansCL: fatal error!
(clCreateImage(d.mem_in[0]): CL_IMAGE_FORMAT_NOT_SUPPORTED)


My graphics card is an ATI Radeon HD 5770. Not entirely sure if it's supported. I tried downgrading KNLMeansCL to 0.6.11 but the issue persists.

Thank you for your help!

feisty2
24th August 2016, 18:15
Hey feisty2 , I'm not sure if this is a graphics card issue, lack of RAM or something else.

My source file is ProRes 422HQ.

I'm trying to run the following code:
import vapoursynth as vs
import havsfunc as haf
import mvsfunc as mvf
import mvmulti
import Oyster

core = vs.get_core()

core.std.LoadPlugin("/usr/local/lib/libmvtoolssf.dylib")
core.std.LoadPlugin("/usr/local/lib/libfmtconv.dylib")
core.std.LoadPlugin("/usr/local/lib/libscenechange.dylib")
core.std.LoadPlugin("/usr/local/lib/libtemporalsoften2.dylib")
core.std.LoadPlugin("/usr/local/lib/libffms2.4.dylib")


clip = core.lsmas.LibavSMASHSource(source="/Volumes/OFFLINE/prores422hq.mov")

clip = mvf.ToRGB(input = clip, depth=32)
y = core.std.ShufflePlanes(clip,0,vs.GRAY)

ref = Oyster.Basic(y, Oyster.Super (y))

y = Oyster.Deblocking(y, ref, block_step=2)
y = Oyster.Deringing(clip, ref, sigma=24.0, h=10.8, block_step=2)

clip = core.std.ShufflePlanes([y,clip], [0,1,2], vs.YUV)

clip.set_output()

VapourSynth Editor returns the following error:
Failed to evaluate the script:
Python exception: knlm.KNLMeansCL: fatal error!
(clCreateImage(d.mem_in[0]): CL_IMAGE_FORMAT_NOT_SUPPORTED)
Traceback (most recent call last):
File "src/cython/vapoursynth.pyx", line 1491, in vapoursynth.vpy_evaluateScript (build/temp.macosx-10.9-x86_64-3.5/pyrex/vapoursynth.c:26897)
File "/Volumes/VG_SHUTTLE04/oyster01.vpy", line 23, in <module>
y = Oyster.Deblocking(y, ref, block_step=2)
File "/usr/local/opt/python3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Oyster.py", line 448, in Deblocking
lowpass, color, matrix)
File "/usr/local/opt/python3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Oyster.py", line 193, in deblocking
cleansed = helpers.nlmeans(ref, radius, block_size, 4, h, ref, color)
File "/usr/local/opt/python3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Oyster.py", line 45, in nlmeans
nlm = KNLMeansCL(pad, d=d, a=a, s=s, h=h, cmode=color, wref=1.0, rclip=rclip)
File "src/cython/vapoursynth.pyx", line 1383, in vapoursynth.Function.__call__ (build/temp.macosx-10.9-x86_64-3.5/pyrex/vapoursynth.c:25204)
vapoursynth.Error: knlm.KNLMeansCL: fatal error!
(clCreateImage(d.mem_in[0]): CL_IMAGE_FORMAT_NOT_SUPPORTED)


My graphics card is an ATI Radeon HD 5770. Not entirely sure if it's supported. I tried downgrading KNLMeansCL to 0.6.11 but the issue persists.

Thank you for your help!

are you sure that you need this on ProRes422HQ which is already pretty close to lossless compression...
ProRes422HQ does not produce compression artifacts :)

groucho86
24th August 2016, 18:26
...If only it were true ProRes 422HQ!

This is for a documentary. I'm dealing with a variety of non-conformed archival elements (Getty, AP, youtube videos, etc.)
My first step usually involves media managing (to ProRes) the assets with 1 second handles using either Resolve or Premiere (maintaining original frame size and frame rate).

From there I use Vapoursynth to convert everything to 1080p23.976.

feisty2
24th August 2016, 18:39
...If only it were true ProRes 422HQ!

This is for a documentary. I'm dealing with a variety of non-conformed archival elements (Getty, AP, youtube videos, etc.)
My first step usually involves media managing (to ProRes) the assets with 1 second handles using either Resolve or Premiere (maintaining original frame size and frame rate).

From there I use Vapoursynth to convert everything to 1080p23.976.

okay, first you must not convert it to RGB if it's not native RGB or YCbCr 4:4:4

DO NOT upsample your video to YUV 4:4:4 or RGB before processing if it's not natively full-sampled, just pass Y as a gray clip and merge the result with UV from the source clip, low-res chroma will jeopardize the correctness of weight calculation (fatal, especially to NLMeans).


do

clip = core.fmtc.bitdepth(clip,bits=32,fulls=False,fulld=True)

instead of

clip = mvf.ToRGB(input = clip, depth=32)


and Radeon HD 5770 is a bit too low-end for Oyster, try something at least like GTX970 or better graphic cards.

edit: I think you forgot to correct maybe something during the copy-paste
try

clip = core.lsmas.LibavSMASHSource(source="/Volumes/OFFLINE/prores422hq.mov")

clip = core.fmtc.bitdepth(clip,bits=32,fulls=False,fulld=True)
y = core.std.ShufflePlanes(clip,0,vs.GRAY)

ref = Oyster.Basic(y, Oyster.Super (y))

y = Oyster.Deblocking(y, ref, block_step=2)
y = Oyster.Deringing(y, ref, sigma=24.0, h=10.8, block_step=2)

clip = core.std.ShufflePlanes([y,clip], [0,1,2], vs.YUV)

clip.set_output()

feisty2
24th August 2016, 18:46
and also take a look at #20 (http://forum.doom9.org/showthread.php?p=1773252#post1773252)if you're then running out of memory..

groucho86
24th August 2016, 19:35
Thank you for your detailed response and for the syntax-example to properly pass Y (I was looking for such an example on the forum and probably copy-pasted from someone who was doing it wrong...)

The "CL_IMAGE_FORMAT_NOT_SUPPORTED" error persists. Not quite sure when I'll be able to test with a better graphics card. When I do, I'll be sure to post the results.

Thanks!

dipje
5th November 2016, 13:32
@groucho86 Are you running that HD5770 with the 'beta' Crimson test drivers for legacy cards instead of the old fashioned 'AMD Catalyst' ?. OpenCL is broken for legacy cards in the Crimson driver so you need the regular Catalyst drivers

groucho86
7th November 2016, 22:18
@groucho86 Are you running that HD5770 with the 'beta' Crimson test drivers for legacy cards instead of the old fashioned 'AMD Catalyst' ?. OpenCL is broken for legacy cards in the Crimson driver so you need the regular Catalyst drivers

Interesting. I wasn't even aware there were test drivers available. This was the default drivers that (I assume) come with Mac OS 10.9.5.

dipje
8th November 2016, 02:31
Hmm, I was assuming Windows. No clue how drivers and/or opencl work in macos

cork_OS
29th November 2016, 20:36
Deringing samples are very impressive!

feisty2
9th January 2017, 08:28
r5:
redid the basic estimation and brought a new parameter "short_time"

short_time
with short_time = True, starts motion estimation at the block size of 8x8 and gradually refines it to 2x2 (optimized for maximum spatial resolution), short_time = False starts motion estimation at 16x16 and gradually refines it to 4x4 (optimized for maximum frequency resolution). short_time = True is meant for Deringing and short_time = False is for Destaircase and Deblocking
edit:typo

feisty2
6th February 2017, 14:18
r6:
redesigned motion estimation when short_time = False (adaptive block size from 128x128 to 4x4)

bebs
12th February 2017, 22:18
Hello,

I tried to use Oyster on a de-interlaced PAL clip (768x576), and it failed with :
Failed to evaluate the script:
Python exception: BlankClip: color value out of range
Traceback (most recent call last):
File "src\cython\vapoursynth.pyx", line 1712, in vapoursynth.vpy_evaluateScript (src\cython\vapoursynth.c:34991)
File "C:/Video/Ori/Capture OK/WES-2003/WES 2003.vpy", line 167, in
y= Oyster.Destaircase(src, ref)
File "C:\Program Files\Python36\lib\site-packages\Oyster.py", line 383, in Destaircase
thr, elast, lowpass, matrix)
File "C:\Program Files\Python36\lib\site-packages\Oyster.py", line 173, in destaircase
mask = core.GenBlockMask(core.ShufflePlanes(src, 0, vs.GRAY))
File "C:\Program Files\Python36\lib\site-packages\Oyster.py", line 89, in GenBlockMask
clip = self.BlankClip(src, 24, 24, color=0.0)
File "src\cython\vapoursynth.pyx", line 1604, in vapoursynth.Function.__call__ (src\cython\vapoursynth.c:33131)
vapoursynth.Error: BlankClip: color value out of range


My script is :
VidBN = core.fmtc.bitdepth(VidBN,bits=32,fulls=False,fulld=True)
y = core.std.ShufflePlanes(VidBN,0,vs.GRAY)
ref = Oyster.Basic(y, Oyster.Super (y))
y= Oyster.Destaircase(y, ref)
VidBN = core.std.ShufflePlanes([y,VidBN], [0,1,2], vs.YUV)
VidBN.set_output()


What's the problem ?

feisty2
13th February 2017, 08:27
I tried to use Oyster on a de-interlaced PAL clip (768x576)

PAL should be 720(or probably something less than 720)x576, apply Oyster BEFORE resizing.
http://i.imgur.com/Sc36zcD.png
and I can't reproduce the error, are you using an outdated version of vaporsynth?

Jindadil007
14th February 2017, 07:13
Fiesty: Would appreciate if you could update correct sequence to run your scripts. I am using like this :

QTGMC > Vine > VBm3d > Oyster (For Deblocking) > Encode with (Plum is very slow therefore sticking with Finesharp alongwith VBm3d script)

Source : 720*480 DVD9. 29.970 fps

Thanks !!!

feisty2
14th February 2017, 07:47
qtgmc -> vine -> oyster -> v-bm3d -> finesharp

Jindadil007
14th February 2017, 08:18
qtgmc -> vine -> oyster -> v-bm3d -> finesharp

Thanks dear...:thanks:

Jindadil007
14th February 2017, 19:26
This is super slow @ 0.00158 fps...it took 20 minutes to process 2 frames ... can't we run it faster ? This is my script :

ref_f = Oyster.Basic(y, Oyster.Super (y), short_time=False)
ref_s = Oyster.Basic(y, Oyster.Super (y), short_time=True)
y = Oyster.Deblocking(y, ref_f, block_step=2)
y = Oyster.Deringing(y, ref_s, sigma=24.0, h=10.8, block_step=2)

feisty2
15th February 2017, 06:11
Oyster.Super (y) -> None
block_step=2 -> block_step=6
lower "pel" to 2, "radius" to 3

feisty2
15th February 2017, 12:27
and also you HAVE TO create intermediate raw files for your process chain.
it will probably be hundreds times faster unless you have 1TB of RAM or so

Jindadil007
15th February 2017, 13:10
and also you HAVE TO create intermediate raw files for your process chain.
it will probably be hundreds times faster unless you have 1TB of RAM or so

Many Thanks...I am testing it on 16GB DDR4 ... Basic Script is pretty fast...This serves my purpose...

feisty2
15th February 2017, 13:28
Many Thanks...I am testing it on 16GB DDR4 ... Would check with new radius and block values as suggested by you... Would update after testing...

if you wanna stick to

ref_f = Oyster.Basic(y, Oyster.Super (y), short_time=False)
ref_s = Oyster.Basic(y, Oyster.Super (y), short_time=True)
y = Oyster.Deblocking(y, ref_f, block_step=2)
y = Oyster.Deringing(y, ref_s, sigma=24.0, h=10.8, block_step=2)


and don't wanna spend eternity waiting...
you have no other choice but to split the script up.

script 1:

y = ....
clip = Oyster.Super (y)
clip.set_output()


vspipe script1.vpy super.raw -p


script 2:

super = core.raws.Source("super.raw", ...)
ref_f = Oyster.Basic(y, super, short_time=False)
ref_f.set_output()


vspipe script2.vpy ref_f.raw -p


script 3:

super = core.raws.Source("super.raw", ...)
ref_s = Oyster.Basic(y, super, short_time=True)
ref_s.set_output()


vspipe script3.vpy ref_s.raw -p
del super.raw


script 4:

ref_f = core.raws.Source("ref_f.raw", ...)
y = Oyster.Deblocking(y, ref_f, block_step=2)
y.set_output()


vspipe script4.vpy deblocked.raw -p
del ref_f.raw


script 5:

y = core.raws.Source("deblocked.raw", ...)
ref_s = core.raws.Source("ref_s.raw", ...)
y = Oyster.Deringing(y, ref_s, sigma=24.0, h=10.8, block_step=2)
y.set_output()


vspipe script5.vpy final.raw -p
del ref_s.raw
del deblocked.raw

Jindadil007
15th February 2017, 13:56
if you wanna stick to and don't wanna spend eternity waiting...you have no other choice but to split the script up.

Thanks for a detailed explanation... Would surely try it that way... Currently I am sticking to :
y = Oyster.Basic(y, super=None, radius=6, pel=4, sad=2000.0, short_time=False)

Once I check output video quality then I would test the way you have suggested...

Jindadil007
16th February 2017, 13:17
Thanks for a detailed explanation... Would surely try it that way... Currently I am sticking to :
y = Oyster.Basic(y, super=None, radius=6, pel=4, sad=2000.0, short_time=False)

Once I check output video quality then I would test the way you have suggested...

Hi feisty...With the Oyster Basic script, Video gets darkened a bit...Black gets intensified...is it natural with Oyster ?