ffmpeg:如何处理颜色范围转换

Vin*_*anz 7 ffmpeg

很难找到有关使用 ffmpeg 进行颜色范围操作的全面文档。我想知道处理以下情况的推荐方法:

  1. 输入范围有限,我想输出全范围
  2. 输入是4:2:2全频,我想4:2:0全频输出
  3. 输入被错误地标记为全范围,我想在有限范围内重新混合或重新编码

例如,为了解决案例#2,我只是添加了-pix_fmt yuvj420p选项。它正在工作,但我有一个警告,告诉我像素格式已被弃用。我试图找到一个解决方案, -pix_fmt yuv420p -color_range 2但输出被冲掉了(有限范围播放完整)

Gya*_*yan 7

输入范围有限,我想输出全范围

使用比例过滤器, -vf scale=in_range=limited:out_range=full

并为编码器和容器设置颜色范围*, -color_range 2,

*如果写入 MP4,还添加 -movflags +write_colr


输入是4:2:2全频,我想4:2:0全频输出

-pix_fmt yuvj420p 以及与上述编码器 + 容器相同的措施。


输入被错误地标记为全范围,我想在有限范围内重新混合或重新编码

重新编码与 1 相同,但设置正确的 in_range 和 out_range。

要重新混合 H264,请添加-bsf:v h264_metadata=video_full_range_flag=0(使用-c:v copy)。

要重新混合 H265,请添加-bsf:v hevc_metadata=video_full_range_flag=0(使用-c:v copy)。

-color_range 1 对于有限的范围。