Selur's Little Message Board
Color change on encoding - Printable Version

+- Selur's Little Message Board (https://forum.selur.net)
+-- Forum: Hybrid - Support (https://forum.selur.net/forum-1.html)
+--- Forum: Problems & Questions (https://forum.selur.net/forum-3.html)
+--- Thread: Color change on encoding (/thread-3933.html)

Pages: 1 2 3


RE: Color change on encoding - Selur - 11.11.2024

For me Hybrid then uses the following command line:
ffmpeg -y -noautorotate -nostdin -threads 8 -i "G:\color_change_099.mkv" -map 0:0 -an -sn -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv  -pix_fmt yuv420p -fps_mode passthrough -vcodec ffv1 -coder 0 -context 0 -g 1 -level 1 -metadata encoding_tool="Hybrid 2024.11.10.1" "J:\tmp\2024-11-11@14_31_30_9810\color_change_099_reencoded_1_2024-11-11@14_31_30_9810_01.mkv"
which looks fine to me.
Comparing those two I used:
# Imports
import vapoursynth as vs
# getting Vapoursynth core
import sys
import os
core = vs.core
# Import scripts folder
scriptPath = 'F:/Hybrid/64bit/vsscripts'
sys.path.insert(0, os.path.abspath(scriptPath))
# loading plugins
core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libhistogram.dll")
core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/LSMASHSource.dll")
# Import scripts
import validate
# Source: 'G:\color_change_099.mkv'
# Current color space: YUV420P8, bit depth: 8, resolution: 1920x1080, frame rate: 23.976fps, scanorder: progressive, yuv luminance scale: limited, matrix: 709, transfer: bt.709, primaries: bt.709, format: FFV1
# Loading G:\color_change_099.mkv using LWLibavSource
clip = core.lsmas.LWLibavSource(source="G:/color_change_099.mkv", format="YUV420P8", stream_index=0, cache=0, prefer_hw=0)
clip = core.hist.Classic(clip=clip)

reencode = core.lsmas.LWLibavSource(source="G:/color_change_099_reencoded.mkv", format="YUV420P8", stream_index=0, cache=0, prefer_hw=0)
reencode = core.hist.Classic(clip=reencode)


clip = core.std.Interleave([clip.text.Text("Org"),reencode.text.Text("Reencode")])

# output
clip.set_output()
to load the original and the reencode and then compare them and their histograms.

The output is identical. (also tried different histogram, but as expected they are identical)
Sorry, but I can't produce your problem and if I can't produce it, I can't fix it.
My guess is that, either you are doing something different or for some unknown reason whatever you used to compare these chose to convert them differently to rgb.

Cu Selur


RE: Color change on encoding - Lipomo - 11.11.2024

I ran many encodings of these episodes last night, and all have the issue.

Here is the debug log of one of the problematic videos : 

Created skript C:\Users\Admin\AppData\Local\Temp\encodingTempSynthSkript_2024-11-11@02_57_40_5510_0.vpy:---------------------
# Imports
import vapoursynth as vs
# getting Vapoursynth core
import ctypes
import sys
import os
core = vs.core
# Import scripts folder
scriptPath = 'C:/Program Files/Hybrid/64bit/vsscripts'
sys.path.insert(0, os.path.abspath(scriptPath))
# Loading Support Files
Dllref = ctypes.windll.LoadLibrary("C:/Program Files/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
# loading plugins
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/GrainFilter/RemoveGrain/RemoveGrainVS.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/CTMF/CTMF.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/MiscFilter/MiscFilters/MiscFilters.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/TTempSmooth/TTempSmooth.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/NEO_FFT3DFilter/neo-fft3d.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/DCTFilter.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DeblockFilter/Deblock/Deblock.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/SourceFilter/BestSource/BestSource.dll")
# Import scripts
import psharpen
import havsfunc
import validate
# Source: 'G:\DB KAI part A et B\005-PartA\Davinci Resolve - CC\103.mkv'
# Current color space: YUV420P8, bit depth: 8, resolution: 1920x1080, frame rate: 23.976fps, scanorder: progressive, yuv luminance scale: limited, matrix: 709, transfer: bt.709, primaries: bt.709, format: FFV1
# Loading G:\DB KAI part A et B\005-PartA\Davinci Resolve - CC\103.mkv using BestSource)
clip = core.bs.VideoSource(source="G:/DB KAI part A et B/005-PartA/Davinci Resolve - CC/103.mkv", cachepath="C:/Users/Admin/AppData/Local/Temp/103_bestSource_2024-11-11@02_57_40_5510", track=0)
frame = clip.get_frame(0)
# setting color matrix to 709.
clip = core.std.SetFrameProps(clip, _Matrix=vs.MATRIX_BT709)
# setting color transfer (vs.TRANSFER_BT709), if it is not set.
if validate.transferIsInvalid(clip):
  clip = core.std.SetFrameProps(clip=clip, _Transfer=vs.TRANSFER_BT709)
# setting color primaries info (to vs.PRIMARIES_BT709), if it is not set.
if validate.primariesIsInvalid(clip):
  clip = core.std.SetFrameProps(clip=clip, _Primaries=vs.PRIMARIES_BT709)
# setting color range to TV (limited) range.
clip = core.std.SetFrameProps(clip=clip, _ColorRange=vs.RANGE_LIMITED)
# making sure frame rate is set to 23.976fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=24000, fpsden=1001)
# making sure the detected scan type is set (detected: progressive)
clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # progressive
# denoising using MCTemporalDenoise
clip = havsfunc.MCTemporalDenoise(i=clip, settings="low", thSAD=400, thSAD2=400, thSCD1=400, thSCD2=100, truemotion=False, MVglobal=True, pel=4, pelsearch=5, search=5, searchparam=5, MVsharp=2, DCT=0, ncpu=1)
# sharpening using PSharpen
clip = psharpen.psharpen(clip=clip, strength=16.00)
# applying FineDeHalo to remove halos
clip = havsfunc.FineDehalo(clip, rx=2.50, ry=2.50, darkstr=0.00, brightstr=1.10)
# set output frame rate to 23.976fps (progressive)
clip = core.std.AssumeFPS(clip=clip, fpsnum=24000, fpsden=1001)
# output
clip.set_output()
---------------------
ffmpeg started...
starting 2024-11-11@02_57_40_5510_02_video@03:03:38.014 - G:\DB KAI part A et B\005-PartA\Davinci Resolve - CC\Hybrid filtred finales\103.mkv
"C:\Program Files\Hybrid\64bit\ffmpeg.exe" -y -noautorotate -nostdin -threads 8 -f yuv4mpegpipe -i - -an -sn -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv -pix_fmt yuv420p -fps_mode passthrough -vcodec ffv1 -coder 0 -context 0 -g 1 -level 1 -metadata encoding_tool="Hybrid 2024.11.05.1" "C:\Users\Admin\AppData\Local\Temp\103_1_2024-11-11@02_57_40_5510_02.mkv"
2024-11-11@02_57_40_5510_02_video finished after 01:26:23.972
finished...

created C:\Users\Admin\AppData\Local\Temp\103_1_2024-11-11@02_57_40_5510_02.mkv (7561.97 MB)
starting cleanUpJob for: C:\Users\Admin\AppData\Local\Temp\encodingTempSynthSkript_2024-11-11@02_57_40_5510_0.vpy
delete C:\Users\Admin\AppData\Local\Temp\encodingTempSynthSkript_2024-11-11@02_57_40_5510_0.vpy
starting cleanUpJob for: C:\Users\Admin\AppData\Local\Temp\103_bestSource_2024-11-11@02_57_40_5510
delete C:\Users\Admin\AppData\Local\Temp\103_bestSource_2024-11-11@02_57_40_5510
renamed C:\Users\Admin\AppData\Local\Temp\103_1_2024-11-11@02_57_40_5510_02.mkv to G:\DB KAI part A et B\005-PartA\Davinci Resolve - CC\Hybrid filtred finales\103.mkv


I really do nothing special. Remember that as soon as I load the video into Hybrid, when I want to exit, it tells me that the color matrix is set to GBR, even after a fresh installation, look :

Video


Also, I just saw that the Hybrid video lacks "Color primaries" and "transfer characteristics" in mediainfo, idk why :

[Image: mediainfo.jpg]


Also the Hybrid debug output just in case HybridDebugOutput.zip

I'm still going to uninstall everything and install the last dev to see if there are any changes.

Update : 
  • Hybrid_dev_2024.11.10 won't launch after installation, even after restarting PC, running admin or not, or disabling Antivirus software : it loads into the  task manager for one second then immediately disappear.
  • Hybrid_dev_2024.09.15 and Hybrid_dev_2024.09.26, the previous versions I used before updating to November 5 dev, have no color issue at all on the encoded video (0% difference in diffimg as well). All 3 Color primaries, Transfer characteristics and Matrix coefficients info are present in mediainfo and set to BT.709. And when I load the video and want to exit Hybrid (with all warning boxes checked) I don't have the color matrix changed to GBR issue (only a message about the container set to mkv instead of mp4), so it appears to be a new issue on last versions.



RE: Color change on encoding - Selur - 11.11.2024

Quote: Here is the debug log of one of the problematic videos :
That is not the debug output.

Looking at the vapoursynth script and the encoding call:
"C:\Program Files\Hybrid\64bit\Vapoursynth\vspipe.exe" "C:\Users\Admin\AppData\Local\Temp\encodingTempSynthSkript_2024-11-11@02_58_55_091413_0.vpy" - -c y4m | "C:\Program Files\Hybrid\64bit\ffmpeg.exe" -y -noautorotate -nostdin -threads 8 -f yuv4mpegpipe -i - -an -sn -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv -pix_fmt yuv420p -fps_mode passthrough -vcodec ffv1 -coder 0 -context 0 -g 1 -level 1 -metadata encoding_tool="Hybrid 2024.11.05.1" "C:\Users\Admin\AppData\Local\Temp\116_14_2024-11-11@02_58_55_091413_02.mkv"
and the used script:
# Imports
import vapoursynth as vs
# getting Vapoursynth core
import ctypes
import sys
import os
core = vs.core
# Import scripts folder
scriptPath = 'C:/Program Files/Hybrid/64bit/vsscripts'
sys.path.insert(0, os.path.abspath(scriptPath))
# Loading Support Files
Dllref = ctypes.windll.LoadLibrary("C:/Program Files/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
# loading plugins
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/GrainFilter/RemoveGrain/RemoveGrainVS.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/CTMF/CTMF.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/MiscFilter/MiscFilters/MiscFilters.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/TTempSmooth/TTempSmooth.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/NEO_FFT3DFilter/neo-fft3d.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/DCTFilter.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DeblockFilter/Deblock/Deblock.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/SourceFilter/BestSource/BestSource.dll")
# Import scripts
import psharpen
import havsfunc
import validate
# Source: 'G:\DB KAI part A et B\005-PartA\Davinci Resolve - CC\116.mkv'
# Current color space: YUV420P8, bit depth: 8, resolution: 1920x1080, frame rate: 23.976fps, scanorder: progressive, yuv luminance scale: limited, matrix: 709, transfer: bt.709, primaries: bt.709, format: FFV1
# Loading G:\DB KAI part A et B\005-PartA\Davinci Resolve - CC\116.mkv using BestSource)
clip = core.bs.VideoSource(source="G:/DB KAI part A et B/005-PartA/Davinci Resolve - CC/116.mkv", cachepath="C:/Users/Admin/AppData/Local/Temp/116_bestSource_2024-11-11@02_58_55_091413", track=0)
frame = clip.get_frame(0)
# setting color matrix to 709.
clip = core.std.SetFrameProps(clip, _Matrix=vs.MATRIX_BT709)
# setting color transfer (vs.TRANSFER_BT709), if it is not set.
if validate.transferIsInvalid(clip):
  clip = core.std.SetFrameProps(clip=clip, _Transfer=vs.TRANSFER_BT709)
# setting color primaries info (to vs.PRIMARIES_BT709), if it is not set.
if validate.primariesIsInvalid(clip):
  clip = core.std.SetFrameProps(clip=clip, _Primaries=vs.PRIMARIES_BT709)
# setting color range to TV (limited) range.
clip = core.std.SetFrameProps(clip=clip, _ColorRange=vs.RANGE_LIMITED)
# making sure frame rate is set to 23.976fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=24000, fpsden=1001)
# making sure the detected scan type is set (detected: progressive)
clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # progressive
# denoising using MCTemporalDenoise
clip = havsfunc.MCTemporalDenoise(i=clip, settings="low", thSAD=400, thSAD2=400, thSCD1=400, thSCD2=100, truemotion=False, MVglobal=True, pel=4, pelsearch=5, search=5, searchparam=5, MVsharp=2, DCT=0, ncpu=1)
# sharpening using PSharpen
clip = psharpen.psharpen(clip=clip, strength=16.00)
# applying FineDeHalo to remove halos
clip = havsfunc.FineDehalo(clip, rx=2.50, ry=2.50, darkstr=0.00, brightstr=1.10)
# set output frame rate to 23.976fps (progressive)
clip = core.std.AssumeFPS(clip=clip, fpsnum=24000, fpsden=1001)
# output
clip.set_output()
the whole encoding chain does not contain any rgb<>yuv conversion, so during the filtering color matrix is not used.
So any changes in color are either due to one of the filters you used, this you should be able to see if you use the compare view to compare input and filtered input or it's caused by some tagging.

Quote:I just saw that the Hybrid video lacks "Color primaries" and "transfer characteristics" in mediainfo, idk why
Strange thing is that when I reencoded the clip (with the call I posted) I get:
Video
ID                                       : 1
Format                                   : FFV1
Format version                           : Version 1
Codec ID                                 : V_MS/VFW/FOURCC / FFV1
Duration                                 : 6 min 28 s
Bit rate mode                            : Variable
Bit rate                                 : 119 Mb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Compression mode                         : Lossless
Bits/(Pixel*Frame)                       : 2.394
Stream size                              : 5.38 GiB (98%)
Writing library                          : Lavc61.24.100 ffv1
Default                                  : Yes
Forced                                   : No
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
coder_type                               : Golomb Rice

Quote: I'm still going to uninstall everything and install the last dev to see if there are any changes.
Please do, make sure to remove your settings on uninstall.
Also, try not using BestSource.


Cu Selur


RE: Color change on encoding - Selur - 11.11.2024

Quote:Hybrid_dev_2024.11.10 won't launch after installation, even after restarting PC, running admin or not, or disabling Antivirus software : it loads into the task manager for one second then immediately disappear.
I'll look into it.


RE: Color change on encoding - Lipomo - 11.11.2024

I didn't used any filters on my tests, just encoding the video from FFV1 to FFV1 without anything applied.

Also I don't know if you this part of my update message :

Quote:
  • Hybrid_dev_2024.09.15 and Hybrid_dev_2024.09.26, the previous versions I used before updating to November 5 dev, have no color issue at all on the encoded video (0% difference in diffimg as well). All 3 Color primaries, Transfer characteristics and Matrix coefficients info are present in mediainfo and set to BT.709. And when I load the video and want to exit Hybrid (with all warning boxes checked) I don't have the color matrix changed to GBR issue (only a message about the container set to mkv instead of mp4), so it appears to be a new issue on last versions.

I only changed Hybrid version, all other things being equal, it'd make sense that the issue comes from last Hybrid versions.


RE: Color change on encoding - Selur - 11.11.2024

atm. I'm trying to reproduce "Hybrid_dev_2024.11.10 won't launch after installation"
=> found it (deletion order of not installed stuff was wrong)


RE: Color change on encoding - Lipomo - 11.11.2024

Alright


RE: Color change on encoding - Selur - 11.11.2024

Starting with a resetted Hybrid (reset Defaults), enabling all Warnings, loading your source, setting 'FFV1' as encoder, creating a job with mkv container and then closing Hybrid.
I, too, see:
....
<HybridData name="mkvColorMatrix" value="BT709"/>
and
<HybridData name="mkvColorMatrix" value="GBR"/>
differ.

<HybridData name="mkvColorRange" value="Broadcast Range"/>
and
<HybridData name="mkvColorRange" value="Unspecified"/>
differ.

<HybridData name="mkvColorTransferCharacteristics" value="ITU-R BT.709"/>
and
<HybridData name="mkvColorTransferCharacteristics" value="Reserved"/>
differ.

<HybridData name="mkvColourPrimaries" value="ITU-R BT.709"/>
and
<HybridData name="mkvColourPrimaries" value="Reserved"/>
differ.
...
This is correct, since these are setting that changed.
For example, the default:
"<HybridData name="mkvColorMatrix" value="GBR"/>"
changed to
"<HybridData name="mkvColorMatrix" value="BT709"/>"

You told Hybrid it should report any changes, and thus it does.
If you don't want this, do not enable all warnings.
This has nothing to do with color changes.

Using 2024.11.11, loading your file, setting FFV1 as encoder I get:
Input #0, matroska,webm, from 'g:\Output\250frames.mkv':
  Metadata:
    ENCODING_GUI    : Hybrid 2024.11.10.1
    ENCODER         : Lavf61.9.100
  Duration: 00:00:10.43, start: 0.000000, bitrate: 156854 kb/s
  Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv420p(tv, bt709, progressive), 1920x1080, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn (default) (forced)
      Metadata:
        ENCODER         : Lavc61.24.100 ffv1
        BPS             : 111312176
        NUMBER_OF_FRAMES: 9303
        NUMBER_OF_BYTES : 5398821425
        _STATISTICS_WRITING_APP: mkvmerge v88.0 ('All I Know') 64-bit
        _STATISTICS_WRITING_DATE_UTC: 2024-11-11 04:21:23
        _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
        DURATION        : 00:00:10.427000000
Strangely, when I look at the file with mediainfo it reports a wrong length, frame rate and size values for the video.
Video
ID                                       : 1
Format                                   : FFV1
Format version                           : Version 1
Codec ID                                 : V_MS/VFW/FOURCC / FFV1
Duration                                 : 10 s 427 ms
Bit rate mode                            : Variable
Bit rate                                 : 111 Mb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
Frame rate                               : 892.203 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Compression mode                         : Lossless
Bits/(Pixel*Frame)                       : 0.060
Stream size                              : 5.03 GiB
Writing library                          : Lavc61.24.100 ffv1
Default                                  : Yes
Forced                                   : Yes
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
coder_type                               : Golomb Rice
You do see different color right? You are not just relying on what mediainfo reported, correct?

=> Does the new 2024.11.11 start for you?


Cu Selur


RE: Color change on encoding - Lipomo - 11.11.2024

I'm not complaining that Hybrid is notifying me changes in settings when closing, I'm just surprised why for these sources only it changes to GBR,  which seems to be the origin of the problem. 

I do see color changes on newer hybrid version only, which look similar to a 601 to 709 conversion, or the other way around.

I will try the 2024.11.11 version if you uploaded a new one.


RE: Color change on encoding - Selur - 11.11.2024

It does not change to GBR it changes from GBR. That popup shows 'new value' followed by 'old value', not the other way around, like you seem to assume.

This is not the cause of the problem.
These settings are only used if:
a. "Config->MKV tagging->VUI->Matroska advanced video signaling" is enabled
and
b. mkvtoolnix is used for mkv multiplexing.

Quote:I will try the 2024.11.11 version if you uploaded a new one.
is in the GoogleDrive share.

Cu Selur