Analysis on BlockBuster
I have done several tests with SansGrip's filters lately, and I have found something very interesting. To make a long story short, I did some tests with Blockbuster Blockbuster(method="sharpen", detail_min=1, detail_max=99, strength=20) and also Blockbuster(method="sharpen", detail_min=20, detail_max=99, strength=20) and I notice that if I use detail_min=20, I see more bocks on dark areas than if I use detail_min=1.
Here's what I think is happening. Blockbuster filters have defined "Thresholds" to apply to the film area. And what I believe is happening is that the thresholds, being sharp cut-off frequencies, create a sharp edge on these boundary. Let me be a little more specific. Say you have set your detail_min to 10. When a movie frame has an activity of 9, it's not processed. But if it has a detail_min of 10, it's processed. So it's a "sharp" attack" and a sharp "decay" on the filter when the dynamic video is passed through the filter. This boundary creates an "edge" where one side is processed by the filter, and the other is not. What I believe is needed in BlockBuster filters is a "roll-off" sort of de-emphasis and pre-emphasis in radio frequency and audio frequency terms, so that the boundary is process with a slow decay and a slow attack. That is a slow "rise time" and slow "fall time" in software. Not a sharp rise and fall as it currently is. I was able to verify this by encoding a small test clip with a detail_min of 1 and detail_max of 99 and the results is LESS BLOCKS than if I use detail_min=20 and detail max=99. So the boundary around 20 causes sharp edges because one side is being processed with sharpness, and the other side is not. I hope you people are following me :D Because SansGrip hasn't showed around, I'm going to look into the source code of BlockBuster, and see if I can add this slow "rise time" and slow "fall time" on the boundary edge. The result should be less blocks when using the filters. This includes the "noise" method too. So I'll look into this probably tomorrow, and see if I can add this feature and compile a new DLL. :) -kwag |
I got there ... eventually! :wink:
I presume you would have some form of exponential formula that peaks the strength at min_detail = 20 (in your example). So between 1 and 20 it will have a slow rise in strength but not a linear rise. I wish I knew C++ so's I could help out :x. Darn VB is no use to anyone :( |
Quote:
Code:
20 -----------80 Instead of like this: Code:
20-------------------------80 -kwag |
Thanks for the explanation Kwag, it makes perfect sense. :D
I thought it may be more exponential like this Code:
20 ----------- 80 Good luck and look forward to the new blockbuster!! :mrgreen: |
Quote:
-kwag |
and if we use:
Blockbuster(method="sharpen", detail_min=1, detail_max=19, strength=10) Blockbuster(method="sharpen", detail_min=20, detail_max=90, strength=20) Blockbuster(method="sharpen", detail_min=91, detail_max=99, strength=10) works ..... or it's :Drunk: s and a 8O :? :imstupid: :hammer: :gun: bad idea? |
Quote:
Blockbuster(method="sharpen", detail_min=1, detail_max=1, strength=1) Blockbuster(method="sharpen", detail_min=2, detail_max=2, strength=2) Blockbuster(method="sharpen", detail_min=3, detail_max=3, strength=3) Blockbuster(method="sharpen", detail_min=4, detail_max=4, strength=4) Blockbuster(method="sharpen", detail_min=5, detail_max=5, strength=5) Blockbuster(method="sharpen", detail_min=6, detail_max=6, strength=6) Blockbuster(method="sharpen", detail_min=7, detail_max=7, strength=7) Blockbuster(method="sharpen", detail_min=8, detail_max=8, strength=8 ) Blockbuster(method="sharpen", detail_min=9, detail_max=9, strength=9) Blockbuster(method="sharpen", detail_min=10, detail_max=10, strength=10) Blockbuster(method="sharpen", detail_min=11, detail_max=99, strength=10) Which would create a curve like this, but on a single line: Code:
10 -----------99 |
A good idea -- I'll add it to my Blockbuster todo list. Once I've got back into the swing of things I'll remember what I was doing when I had to stop and will see where this will fit in ;).
|
Quote:
Put this one on the top of your list, as it will make a HUGE difference with both "noise" and "sharpen" :wink: Thanks, -kwag |
Quote:
I know I stopped using Blockbuster entirely, since the consensus was it's not necessary above 352x2XX. Is that still the case? |
Quote:
-kwag |
To refresh this thread and thoughts, BlockBuster is not effective at 528x480 or 704x480, as SansGrip already said. Specially in CQ mode. Apparently TMPEG sees the noise as "noise", and filters it out. This is clearly seen by using blockbuster(noise) and opening a script in Vdub. In Vdub, the noise is clearly seen, but not after it's encoded with TMPEG. However, at low resolutions (352x240), it does work. :roll:
-kwag |
FWIW I find Blockbuster essential when encoding divx/xvid sources @ 480x480. I use it to help with temporal filtering of flashing DCT-like blocks visible on flat surfaces in these sources.
The "core" of my current 2.5x divx/xvid script is as follows: Code:
Blockbuster(method="noise",detail_min=1,detail_max=8,variance=0.3,seed=5823) |
Quote:
|
@GetUp: just add AVISource / Crop commands before and BicubicResize after the core filters listed above.
|
Quote:
|
@GetUp:
ATC is A Temporal Cleaner; BlindPP is a filter included in MPEG2DEC3; ASharp is an adaptive sharpening filter. All of these are by MarcFD (I think) and you can download them all from his homepage. All require AVISynth 2.5x (I'm using 2.52). I'm not sure if I want to use adaptive filtering with xvid/divx sources or not. It further softens an already soft source and I only seem to get slight CQ benefits anyway (~1 point). The script below will apply Kwag's adaptive filtering if you want to experiment with it, comment out the two ScriptClip lines to disable it. Code:
function fmin(float f1, float f2) { return (f1<f2) ? f1 : f2 } |
Quote:
|
Hi guys,
BlockBuster(noise) should go after the filters. If not, the noise will be removed by filters :!: @girv, You might want to add "Adaptive" BlockBuster(noise) :) Like this: Code:
bb_method="noise" If you don't want BlockBuster noise, just change the "True" to "False" in the line bb_noise=True Play with the variance, detail_max and the "2" in ((1/nf)*2). Increasing it will reduce noise. Those are just values I used to test the script, and I does work as I explained in another thread. -kwag |
it can help you in something?
:? i copy "this" from an url "xing ling" :roll: FilterRange -指定範囲にフィルターをかける関数 function FilterRange(clip "clip", int "start", int "end", string "filter") { c1 = start < 2 ? clip.trim(0, -1) : clip.trim(0, start - 1) c2 = Eval("clip.trim(start, end)." + filter) c3 = clip.trim(end + 1, 0) c = start == 0 ? c2 : c1 + c2 c = end == 0 ? c : c + c3 return c } 例 FilterRange(1163, 1164, "AntiComb(48, 34)") # 1163, 1164 フレームのみに AntiComb をかける 履歴 2003/02/17 FilterRange 公開 i don't understand how it works but is the same point of the thread,don't? :wink: |
Site design, images and content © 2002-2024 The Digital FAQ, www.digitalFAQ.com
Forum Software by vBulletin · Copyright © 2024 Jelsoft Enterprises Ltd.