ffmpeg vaapi编码导致右侧出现黑条

ffmpeg vaapi编码导致右侧出现黑条

我正在尝试使用 vaapi 将 854x480 h264 mp4 视频转码为 h265 mp4 视频。

该视频确实看起来不错,并且编码速度非常快。但视频右侧有一个黑条。如果我将命令更改为升级到 1280x720,则不会发生这种情况。

ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i 1.mp4 -c:v hevc_vaapi -vf scale_vaapi=854:480 -ss 00:00:0.0 -t 10 -maxrate 400 output.mp4

答案1

您使用的是 AMD 硬件吗?

AFAICS 这是在 AMD 上使用硬件加速的一个错误。 (Ubuntu 20.04、ffmpeg 4.2.4.1、梅萨 20.0.8)

[hevc_vaapi @ 0x5644267bf7c0] Driver does not support some wanted packed headers (wanted 0xd, found 0).
[hevc_vaapi @ 0x5644267bf7c0] Driver does not support packed sequence headers, but a global header is requested.
[hevc_vaapi @ 0x5644267bf7c0] No global header will be written: this may result in a stream which is not usable for some purposes (e.g. not muxable to some containers).
[hevc_vaapi @ 0x5644267bf7c0] Cropping information on input frames ignored due to lack of API support.

使用软件编码不会发生这种情况:

因此,作为解决方法,请使用 hevc/lib265x 而不是 hevc_vaapi。

 -c:v hevc

答案2

简短的回答:要解决这个问题,您需要 mesa 24.0.5+ 并且还需要自己编译 ffmpeg这些补丁是手动应用的直到这些更改合并到上游。

长答案:这让我忙了一段时间,但是梅萨团队的 nyanmisaka 帮助了我!所以,根本问题在 radeonsi 的旧 VA-API 接口中,其中帧被填充以与 AMD GPU 架构兼容,但填充随后包含在编码中。根据 GPU 的不同,这会导致出现黑条,或者在我的情况下,甚至会出现由随机像素组成的条,这完全违背了一般压缩背后的主要假设,即显着增加了生成的文件大小。 Mesa 24.0.5+ 包含一个新的 vaapi 接口来修复此问题,但所需的ffmpeg 的变化使用此接口尚未合并到 ffmpegs 上游。

相关内容