为什么比例过滤器忽略了 out_color_matrix 选项?

为什么比例过滤器忽略了 out_color_matrix 选项?

我正在测试没有设置任何颜色元数据集的输入:

ffprobe -v error -show_streams "input.mp4" | grep color

color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown

这会导致颜色偏移,我认为这是因为scale过滤器会自动进行颜色空间转换。但是,当我添加out_color_matrix=bt601scale过滤器以保留颜色空间时,该选项似乎被完全忽略,颜色空间仍然转换为 BT.709(因为我有元数据,所以写入了元数据-color_range 1 -color_trc 1 -color_primaries 1):

ffprobe -v error -show_streams "out_color_matrix=bt601.mp4" | grep color
color_range=tv
color_space=bt709
color_transfer=bt709
color_primaries=bt709

为什么是这样?

答案1

因此,有两件事:

  1. 比例过滤器默认为 601,因此在没有颜色元数据的情况下,假定为 601。
  2. 这些颜色选项的值为 1 表示 709,这就是 ffprobe 返回该读数的原因。

如果输入确实是 601,则不需要在比例中添加任何内容。

在输出元数据中正确发出信号 601 将取决于模拟源。

PAL 和 NTSC 的基色不同,因此

NTSC = SMPTE 170M = BT 601 525

PAL = BT 470 BG = BT 601 625


因此 ffmpeg 的正确参数是:

国家电视系统委员会:

-colorspace smpte170m -color_primaries smpte170m -color_trc smpte170m

mediainfo:
Color primaries                          : BT.601 NTSC
Transfer characteristics                 : BT.601
Matrix coefficients                      : BT.601

朋友:

-color_trc不接受bt470bg,但ffmpeg -h full显示gamma28该选项意味着“BT.470 BG”。

-colorspace bt470bg -color_primaries bt470bg -color_trc gamma28

mediainfo:
Color primaries                          : BT.601 PAL
Transfer characteristics                 : BT.470 System B, BT.470 System G
Matrix coefficients                      : BT.601

-colorspacempv是最重要的选项;其他选项对于Linux等软件播放器来说没有明显的区别。

相关内容