用ffmpeg修改/纠正H.264/AVC/H.265/HEVC视频的HDR元数据错误
以下方法是修改元数据,不是转换视频内容。修改元数据不会让非HDR内容具有HDR效果,也不能让HDR内容在非HDR设备中正常显示。
以下方法的用途是纠正原始视频文件中的元数据错误,比如HDR内容丢失了HDR元数据,或者误把非HDR内容标记为HDR等情况。
只有在原始视频元数据不正确/丢失的情况下,才应该使用下述方法进行修改。如果你想转换视频内容(比如把正常的HDR视频转换为正常的SDR视频),则应该使用其他参数,下述方法不能达到目的,只会得到色彩异常的视频文件。
H.264/AVC
H.264/AVC视频(8bit/10bit)标记为HDR(BT2020/PQ)的方法(可以用来修复错误标记为SDR的NVIDIA即时重放录屏):
ffmpeg -i "input.mp4" -map 0 -c copy -bsf:v h264_metadata=colour_primaries=9:transfer_characteristics=16:matrix_coefficients=9 -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range tv "output.mp4"
也可用于格式工厂,把-bsf:v h264_metadata=colour_primaries=9:transfer_characteristics=16:matrix_coefficients=9 -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range tv一段添加到ffmpeg参数里即可。
修改H.264/AVC视频的数据级别(有限、完全)
# 标记为完全范围
ffmpeg -i "input.mp4" -map 0 -c copy -color_range pc "output.mp4"
# 标记为有限范围
ffmpeg -i "input.mp4" -map 0 -c copy -color_range tv "output.mp4"
H.265/HEVC
把HEVC视频强行标记为HDR(BT2020/ST2084/PQ):
ffmpeg -i input.mp4 -c copy -bsf:v hevc_metadata=colour_primaries=9:transfer_characteristics=16:matrix_coefficients=9 output.mp4
把HEVC视频强行标记为非HDR(BT709):
ffmpeg -i input.mp4 -c copy -bsf:v hevc_metadata=colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 output.mp4
把HEVC视频强行标记为HDR(HLG):
ffmpeg -i input.mp4 -c copy -bsf:v hevc_metadata=colour_primaries=9:transfer_characteristics=18:matrix_coefficients=9 output.mp4
也可用于格式工厂,把-bsf:v hevc_metadata=colour_primaries=9:transfer_characteristics=16:matrix_coefficients=9一段添加到ffmpeg参数里即可。
修改H.265/HEVC视频的数据级别(有限、完全)
# 标记为有限范围
ffmpeg -i input.mp4 -c copy -bsf:v hevc_metadata=video_full_range_flag=0 output.mp4
# 标记为完全范围
ffmpeg -i input.mp4 -c copy -bsf:v hevc_metadata=video_full_range_flag=1 output.mp4



