FFmpeg将H265转H264时颜色偏色,能否不重编码添加色彩参数?
问题根因
你使用的输入源为HDR10规格的HEVC视频,自带bt2020色域、smpte2084(PQ)伽马、tv窄范围量化的色彩元数据。你原始的转码命令未指定保留色彩元数据,FFmpeg不会自动将输入的色彩参数写入输出的H264流,播放器默认按照SDR BT709的规格解析HDR内容,就会出现色彩发灰、饱和度异常、红色偏橙的问题。
方案1:仅补全色彩元数据(无需重编码)
如果你的播放设备支持HDR10解码播放,仅需要为已经转好的H264文件补全元数据,不需要重新编码,直接复制视频流写入色彩参数即可,命令如下:
ffmpeg -i output.mp4 -c copy -color_range tv -color_space bt2020nc -color_transfer smpte2084 -color_primaries bt2020 output_fixed.mp4
该命令执行速度极快,仅修改文件头元数据,不会损失任何画质。
方案2:转码为SDR视频(适配普通播放设备)
如果需要在不支持HDR的普通设备上正常播放,必须重新转码做HDR到SDR的色调映射,否则就算补全了HDR元数据,普通播放器依旧会显示异常,推荐转码命令如下:
ffmpeg -i input.mkv -vf zscale=transfer=bt709:matrix=bt709:primaries=bt709,format=yuv420p -c:v libx264 -crf 17 -color_range tv -color_space bt709 -color_transfer bt709 -color_primaries bt709 output_sdr.mp4
该命令会将HDR10的色彩映射为标准SDR BT709色彩,同时写入对应色彩元数据,兼容绝大多数普通播放设备。
内容的提问来源于stack exchange,提问作者user17319252
相关产品推荐
相关产品推荐

