[FFmpeg-user] Requesting colormatrix advice

markfilipak.imdb at gmail.com markfilipak.imdb at gmail.com
Mon Nov 6 05:42:13 EET 2023

Hello All,

I have a 1990s TV show -- called 'SOURCE' here -- made by Paramount. The show was renowned for its 
production values. It's on Blu-ray from Paramount. The Blu-ray was made in 2012 (may be a clue to a 
colorspace variant used).

The Question:
Do you have any advice regarding colormatrix?

The Situation:
TARGET videos look saturated, especially in red. When I COLOR_GRADE [note 1], detail otherwise 
saturated become visible. So, SOURCE cannot be saturated. It must be happening _during_ encoding. 
However, ffprobe says the SOURCE colormatrix is unknown [note 2].
[note 1]
set MAP = -map 0:v -map 0:a
set SOFT_BOB = separatefields,setdar=16/9
set COLOR_GRADE = colorcorrect=saturation=0.8:rh=-0.05
set ENCODE = -c:v libx265 -x265-params crf=18 -c:a copy
ffmpeg -i "%SOURCE%" %MAP% -vf %SOFT_BOB%,%COLOR_GRADE% %ENCODE% -sn "%TARGET%"
[note 2]

I assume that since colormatrix is unknown to ffprobe, it's unknown to ffmpeg. If so, then ffmpeg 
has no choice but to assume it's BT709 and to mark it 'BT709' without changing any pixels, eh?
But obviously, it isn't BT709 because it becomes saturated. So what is it? And what should I try?

Color is a confusing wilderness to me. For example,
'ffmpeg ... -vf colormatrix=bt601:bt709 ...'
only sets one of the settings:
'Stream #0:0: Video: hevc (hev1 / 0x31766568), yuv420p(bt709/unknown/unknown, progressive), ...'
Wow. Which one is now bt709 in the output and which two are still unknown? I'd like to set all 3 to 
BT601 in the SOURCE and BT709 in the TARGET but there doesn't seem to be a way to do that. Or am I 
just missing it?

x265 has presets.          –colorprim  –transfer     –colormatrix  –range    –chromaloc
         BT601_525       ->  smpte170m   smpte170m     smpte170m     limited   0
         BT601_626       ->  bt470bg     smpte170m     bt470bg       limited   0
         BT709_YCC       ->  bt709       bt709         bt709         limited   0
         BT709_RGB       ->  bt709       bt709         gbr           limited
         BT2020_YCC_NCL  ->  bt2020      bt2020-10     bt709         limited   2
         BT2020_RGB      ->  bt2020      smpte2084     bt2020nc      limited
         BT2100_HLG_YCC  ->  bt2020      arib-std-b67  bt2020nc      limited   2
         BT2100_HLG_RGB  ->  bt2020      arib-std-b67  gbr           limited
         FR709_RGB       ->  bt709       bt709         gbr           full
         FR2020_RGB      ->  bt2020      bt2020-10     gbr           full
         FRP3D65_YCC     ->  smpte432    bt709         smpte170m     full      1
It would be nice if ffmpeg used them, too.

Thanks for any advice for relieving a headache

More information about the ffmpeg-user mailing list