FFMpeg“vp9_cuvid”不会在输出 HEVC 视频中保存 VP9 4k 输入视频中的 HDR10

FFMpeg“vp9_cuvid”不会在输出 HEVC 视频中保存 VP9 4k 输入视频中的 HDR10

我尝试对此 4k VP9 HDR10 视频进行编码:https://www.youtube.com/watch?v=kgppJX0G--E使用这个命令行:

ffmpeg \
  -vsync 0 \
  -hwaccel cuda \
  -hwaccel_output_format cuda \
  -c:v vp9_cuvid \
  -crop 276x276x0x0 \
  -i "(PS5) THE PACIFIC WAR 1943 | Realistic Immersive ULTRA Graphics Gameplay [4K 60FPS HDR] Call of Duty [kgppJX0G--E].webm" \
  -c:v hevc_nvenc \
  -preset slow \
  -rc vbr \
  -rc-lookahead 20 \
  -b:v 28M \
  -bufsize 5M \
  -maxrate 28M \
  -g 250 \
  -an \
  -sn \
  output_video.hevc

FFMpeg 工作正常无法在 HEVC 输出视频中保存 HDR10(使用“hevc_cuvid”没有问题)。FFMpeg 给出以下错误:

Impossible to convert between the formats supported by the filter 'Parsed_null_0' and the filter 'auto_scale_0'
[vf#0:0 @ 0x557dd530b600] Error reinitializing filters!
[vf#0:0 @ 0x557dd530b600] Task finished with error code: -38 (Function not implemented)
[vf#0:0 @ 0x557dd530b600] Terminating thread with return code -38 (Function not implemented)
[vost#0:0/hevc_nvenc @ 0x557dd5313700] Could not open encoder before EOF
[vost#0:0/hevc_nvenc @ 0x557dd5313700] Task finished with error code: -22 (Invalid argument)
[vost#0:0/hevc_nvenc @ 0x557dd5313700] Terminating thread with return code -22 (Invalid argument)
[out#0/matroska @ 0x557dd52a7000] Nothing was written into output file, because at least one of its streams received no packets.

答案1

为了以正确的亮度和颜色编码 HDR 视频,我们可能会添加hevc_metadata比特流过滤器如下:

-bsf:v hevc_metadata=colour_primaries=9:transfer_characteristics=16:matrix_coefficients=9


比特流过滤器对编码的流数据进行操作,并执行比特流级别修改(hevc_metadata修改嵌入在 HEVC 流中的元数据)。

我们必须修改 HEVC 流嵌入元数据的原因是,“颜色描述”元数据对于正确播放 HDR 视频(亮度和颜色的术语)至关重要,而 FFmpeg 不会自动将这些属性从输入传递到输出。

为了查看这些“颜色描述”属性,我们可以使用媒体信息工具。

输入视频流的颜色描述属性:

Color range                              : Limited
Color primaries                          : BT.2020
Transfer characteristics                 : PQ
Matrix coefficients                      : BT.2020 non-constant

输出视频流的颜色描述属性:(不含比特流过滤器):

Color range                              : Limited
Matrix coefficients                      : Identity

我们可以看到,只有“颜色范围”属性从输入正确传递到输出。


获取正确的数字(9169)需要一些努力...
文档说“设置流中的颜色描述(参见 H.265 第 E.3.1 节和表 E.3、E.4 和 E.5)”。我们实际上必须从表中获取数字H.265 标准文档

添加比特流过滤器后,输出的颜色描述属性与输入相同:

Color range                              : Limited
Color primaries                          : BT.2020
Transfer characteristics                 : PQ
Matrix coefficients                      : BT.2020 non-constant

注意:
解决方案与错误信息无关:Impossible to convert between the formats supported by the filter 'Parsed_null_0' and the filter 'auto_scale_0'

相关内容