26.07.2021, 04:32
It seems Hybrid/FFmpeg now finally able to read ProRes 4444 as true 12 bit and this is really great https://trac.ffmpeg.org/ticket/8054
But i guess due these changes there are some new bugs:
Vapoursynth->Coloir->Levels and Limiter.
If i use ProRes444 12bit and check UseRGB, i got black screen preview. No problem with ProRes422 10bit.
I guess problem may be related to all plug-ins that have "UseRGB" option when used with ProRes 12bit and newest FFmpeg development version.
And another problem - If source is ProRes 444 12 bit, ProRes 444 is still exported only as 10 bit instead of 12 bit. Or most likely processed as 10 bit and placed inside 12 bit container on render. Is this is an FFmpeg limitation or some bug in Hybrid?
ProRes 422 10bit:
ProRes444 12bit:
But i guess due these changes there are some new bugs:
Vapoursynth->Coloir->Levels and Limiter.
If i use ProRes444 12bit and check UseRGB, i got black screen preview. No problem with ProRes422 10bit.
I guess problem may be related to all plug-ins that have "UseRGB" option when used with ProRes 12bit and newest FFmpeg development version.
And another problem - If source is ProRes 444 12 bit, ProRes 444 is still exported only as 10 bit instead of 12 bit. Or most likely processed as 10 bit and placed inside 12 bit container on render. Is this is an FFmpeg limitation or some bug in Hybrid?
ProRes 422 10bit:
Code:
# making sure input color matrix is set as 709
clip = core.resize.Point(clip, matrix_in_s="709",range_s="limited")
# making sure frame rate is set to 25
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# Setting color range to TV (limited) range.
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# adjusting color space from YUV422P10 to RGB30 for vsLevels
clip = core.resize.Bicubic(clip=clip, format=vs.RGB30, matrix_in_s="709", range_s="limited")
# Color Adjustment
clip = core.std.Levels(clip=clip, min_in=396, max_in=488, min_out=64, max_out=940)
# adjusting output color from: RGB30 to YUV444P16 for ProResModel (i444@10)
clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P16, matrix_s="709", range_s="limited")
# set output frame rate to 25.000fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# Output
clip.set_output()
ProRes444 12bit:
Code:
# making sure input color matrix is set as 709
clip = core.resize.Point(clip, matrix_in_s="709",range_s="limited")
# making sure frame rate is set to 25
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# Setting color range to TV (limited) range.
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# adjusting color space from YUV444P16 to RGB48 for vsLevels
clip = core.resize.Bicubic(clip=clip, format=vs.RGB48, matrix_in_s="709", range_s="limited")
# Color Adjustment
clip = core.std.Levels(clip=clip, min_in=1584, max_in=1952, min_out=256, max_out=3760)
# adjusting output color from: RGB48 to YUV444P16 for ProResModel (i444@12)
clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P16, matrix_s="709", range_s="limited")
# set output frame rate to 25.000fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# Output
clip.set_output()