View Full Version : Reencode UHD with Digital Intermediate 2k
GZZ
1st January 2018, 18:09
Some (Alot) of the new UHD disc that are coming out has a Digital Intermediate 2k and have been upscaled for the UHD release.
I did a reeebcide on a movie where I encoded it at CRF18 on both release, same settings keeping the HDR, except I did a downscale on one of the releases back to 1920x1080.
I know that 2K is 2048, so there is a slight benefit from 4K resolution, because Im missing 128 line pr image (2048-1920). But the size of the output file came out at 15GB for the 4K and 6GB for 2K. I have compared some screenshots and its very hard to see any big visible difference, even when I upscale the 2k screenshot to 4k and overlay it with 4k screenshot.
Is it a correct assumption that the benefits from keeping a UHD disc, with a Digital Intermediate 2K, at 4k resolution is a waste of bitrate compare to just reencode it 2K (1920x1080) ?
FranceBB
1st January 2018, 21:53
Whenever you upscale a 1920x1080 masterfile, you gotta introduce blur, no matter what scaler you use. Taking that into account, a UHD BD is in HEVC 10bit, while a standard bluray disk is in H.264 8bit. *If* you are sure that a content is not native in 4K UHD, then you can reverse upscale it. There's no point in downscaling it, 'cause you would keep the blur introduced during the upscale, but you can reverse upscale it back to its original resolution by using the inverse of the upscaling kernel used.
In Studios, many people generally use Bilinear or Bicubic.
This is a reverse upscale example using debicubic with 16bit precision in avisynth:
#Use your favourite indexer and make sure you have the 16bit hack enabled to output video in 16bit stacked
#16bit reverse upscale using debicubic 3840x2160 -> 1920x1080
ly = debicubicy(1920,1080,lsb_inout=true)
lu = utoy().dither_resize16(1920,1080,kernel="bicubic",invks=true,invkstaps=3,src_left=0.25,u=1,v=1)
lv = vtoy().dither_resize16(1920,1080,kernel="bicubic",invks=true,invkstaps=3,src_left=0.25,u=1,v=1)
ytouv(lu,lv,ly)
#Output 16bit stacked to avs4x265.exe -> x265 to encode in 10bit.
Dither_Out()
Let x265 get 16bit output and dither it down to 10bit.
And, I think you are done.
GZZ
1st January 2018, 21:57
Thanks for the info. I will try have a look at it. :)
FranceBB
1st January 2018, 22:17
Thanks for the info. I will try have a look at it. :)
http://avisynth.nl/index.php/Dither_tools ;)
Motenai Yoda
2nd January 2018, 03:49
@GZZ your downsample went so small coz using a resizer it lost details in high frequency domain, with a more conservative debilinear/debicubic it should come out beefy.
@france I don't think there is any consumer hw capable to decode a main444 10 profile, so just forget this 444 thing and use the usual 420
also jpsdr relased a resizer/desampler pack supporting avs+ high bit depth format,
so
convertbits(16)
DeBicubicResizeMT(1920, 1080, accuracy=1)
convertbits(10, dither=0)
and feed x265 by avs2yuv with this sort of cli
avs2yuv64.exe %1 -o - | x265 -D 10 --input - --y4m -o output_file.hevc
benwaggoner
2nd January 2018, 05:47
Also, some titles have a 4K DI but 2K VFX. Motion blur often kills 4K detail in VFX anyway.
GZZ
2nd January 2018, 11:20
Thanks alot for the info. I will definitly try out and compare with my "simple downscale" version. I used the Downscale in Handbrake, not sure what its based on, but its properly just a simple resizer used to downscale the image.
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.