我尝试对此 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
我们可以看到,只有“颜色范围”属性从输入正确传递到输出。
获取正确的数字(9
、16
和9
)需要一些努力...
文档说“设置流中的颜色描述(参见 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'