This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Internal processing in 32 bit depth?
#1
Just a quick technical question here - is it true that Hybrid, FFmpeg and VapourSynth use 32bit float internal bit depth processing for filters, resize, transcoding and all other operations?

P.S. From my personal tests i see that at least ProRres 10bit video source transcoded to same true ProRes 10bit with all hidden dynamic range data. In 8 bit depth processing hidden dynamic range data usually just clipped.
Reply
#2
No. What makes you think that?

Cu Selur
Reply
#3
From my personal tests i see that at least ProRres 10bit video source transcoded to same true ProRes 10bit with all hidden dynamic range data. It don't looks like upscaled from 8 bit depth. In 8 bit depth processing hidden dynamic range data usually just clipped.
So at least processing done in 12 or 16 bit? Or how does it works inside?

Here is another test example. Gradient with applied Levels adjustment to illustrate 8bit depth limits. There are some tiny degradation in FFmpeg Hybrid, so yeah, it is not 10000000% perfect. But same time it don't looks like crappy 8 bit processing as well.

Rendered from Resolve to 12bit ProRes444, applied Levels in Resolve
[Image: 4gC27M2.jpg]

Rendered from Hybrid to 12bit ProRes444, applied Levels in Resolve
[Image: XrPZcgO.jpg]

Rendered  from Resolve to 8bit Tiff, applied Levels in Resolve
[Image: jz3fcHg.jpg]
Reply
#4
When Avisynth or Vapoursynth are used and what filters are used Hybrid will convert to the bit depth required by the filter.
Depending on the filter 8bit, 10bit, 12bit or 16bit will be used.
Not sure how ffmpeg handles this internally.
In general color sampling precision should be kept assuming the output format supports it and the encoder is configured to keep it.
So to keep 12bit precision you need to encode to 12bit and not apply filters which require a lower precision.
-> So to know what happens in your workflow I need to know what you so. Smile

Cu Selur
Reply
#5
And here are more detailed bit depth tests. Hybrid x264/265 compression was set to near lossless quality RF1 L4.1 slow grain --ref 3 --bframes 0 --keyint 25 --min-keyint 1


Test Results:

Hybrid FFmpeg renders ProRes422HQ as 10 bit and ProRes444 also only as 10 bit (seems FFmpeg limitation https://trac.ffmpeg.org/ticket/7163)

Hybrid FFmpeg renders honest 8 bit and 10 bit x264/x265 files and even real 12 bit depth x265 files.

[Image: Nbkdlcm.jpg]

[Image: KUrclpM.jpg]

[Image: Spbxja6.jpg]

[Image: Kz6kV3e.jpg]

[Image: GJbZJj0.jpg]

[Image: EZuOdzw.jpg]

[Image: Cma6T0b.jpg]

[Image: Iah12aT.jpg]

[Image: skeUTqm.jpg]

[Image: EhB0cC0.jpg]
Reply
#6
So everything behaves as expected.
Good. Smile

Cu Selur
Reply
#7
Guess i really need to know somehow what plug-ins are 8bit only So i guess i'll do real life bit depth tests, similar to codec tests. Maybe that list will be shared somehow at VapourSynth Database or arranged to filter.
For Example here are [ProRes 12 bit 444] vs [Hybrid ProRes 10 bit 422 with ColorMatrix filter] vs [Hybrid ProRes 10 bit 422 with DeRainbow Bifrost filter]
As you can see DeRainbow Bifrost filter is 8 bit only.
[Image: 0JR20rq.gif]
Reply
#8
Here it is: 8 bit only filters list
(tested with Hybrid UI on macOS 10.14.6):
DeGrain -> MLDegrain
DeGrain -> TemporalDegrain
Artefacts -> DeCrawl -> DotKill
Artefacts -> DeCrawl -> DeDot
Artefacts -> DeRainbow -> BiFrost
Artefacts -> DeRainbow -> SSIQ
Artefacts -> DeCross
Line -> AntiAliasing -> SangNomMod (removed from Hybrid due conflict with SangNom)
Line -> Resizer -> Anime4KCPP

Overall situation is not so bad...
Reply
#9
Simple testing doesn't really help much.
It only shows you the current state not whether that state is correct or not.
Some filters might support 10bit+, but didn't when I implemented their support.
Flash3kDB for example should be able to handle 10bit+ Wink
-> if you want to do it properly you need to
a. test the current state in Hybrid
b. in case it's 8bit and a filter check the documentation of the filter
c. in cast it's 8bit and a script check all the filters used in the script and check their documentation
to see whether this could be changed or is a limitation of the filter/script. Smile

Cu Selur
Reply
#10
Yep, maybe it is not technically perfect, but we get what we get. Filters in the list will downconvert source to 8-bit and rendered video will have only 8 bit data even if source was 10 bit and if it will be rendered to 10 bit codec.

TemporalDegrain, DotKill, DeDot, BiFrost, SSIQ, DeCross, SangNomMod are 8 bit by official tech specification. So my tests only confirm that. Not a big deal because those group of filters in most cases used for 8 bit DVD restoration.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)