QSV 硬件加速不适用于 ffmpeg 7.0

QSV 硬件加速不适用于 ffmpeg 7.0

多年来,我一直使用 Intel Quick Sync (QSV) 硬件加速和 ffmpeg 进行解码、编码和过滤。我在 Windows 7 和 10 上只使用了 4.4-full_build-www.gyan.dev,因为当我查看较新的版本时,它们缺少修复不完美视频的基本功能。

我现在正在尝试 7.0-essentials_build-www.gyan.dev,因为它可以访问 hevc_qsv 和 h264_qsv 编解码器的改进。但我根本无法让它与 QSV 一起运行,因为它不会初始化设备。

我简化了一个测试命令来测试这一点:

ffmpeg -hide_banner -loglevel verbose ^
 -init_hw_device qsv=hw -hwaccel qsv -hwaccel_device qsv -hwaccel_output_format qsv ^
 -i "InputFile.avi" ^
 -vsync vfr -c:a aac -profile:a aac_he -q:a 1.1 ^
 -vf "hwupload=extra_hw_frames=128,vpp_qsv=w=iw/2:h=ih/2" ^
 -c:v hevc_qsv -preset faster -y ^
 "F:\Convert\OutputFile.mp4"

这在 4.4 中完美运行。我通常使用 -init_hw_device qsv:hw,child_device_type=qsv 来创建设备,但各种来源都说更简单的版本也可以工作,并且在 4.4 中确实如此;但 7.0 拒绝了这一点并且不会创建子设备。我上面给出的示例在 7.0 中也完全失败了,它告诉我我应该使用“-init_hw_device qsv=hw”来创建设备,而你可以看到命令有一个设备。我还尝试了在网络上或 ffmpeg 网站文档中找到的各种其他版本,包括:

-init_hw_device qsv=qsv:MFX_IMPL_hw 
-init_hw_device qsv=qsv:MFX_IMPL_HARDWARE 
-init_hw_device qsv:hw,child_device=1
replacing qsv=hw with qsv=hw_auto or qsv=auto_any

以及各种创建命令的组合,但我找不到 7.0 可以接受的设置。我想知道是否有人成功地从早期版本的 ffmpeg 迁移到 7.0 并且仍然可以使用 QSV。如果是这样,您能否发布创建工作硬件设备所需的代码的完整示例,以便仍然可以使用 QSV 加速编解码器和过滤器?

答案1

不是驱动程序。我是在其他地方的帖子中偶然发现答案的。

我上面给出的语法多年来一直有效

-init_hw_device qsv:hw,child_device_type=qsv

不再有效,尽管我在任何文档中都找不到任何说明原因的内容。但是,有些人说必须将 child_device_type 更改为伪设备 d3d11va 。这更接近了,但对我来说也不起作用,它会产生大量错误。但将行更改为:

-init_hw_device qsv=qsv,child_device_type=dxva2

对我来说确实有效。过去,我曾尝试过使用 ffmpeg 4.4 的这种语法,但只有非常少量的硬件加速。我也在带有 Nvidia 显卡的另一个 Windows 10 系统上尝试过,使用 d3d11va 解码时确实获得了一点加速。显然,在连接硬件设备的方式上发生了一些我从未见过的毫无警告的变化(如果这确实在某处公开,我欢迎更正),并且 hw_auto 和 auto_all 选项不起作用。

由于设备会随着软件和硬件的变化而变化,您可能必须尝试各种接口:但希望有一个可以工作的接口。

在某些系统上,vaapi、opencl 或 vulkan 等其他接口也可能有效。我不确定这样做有什么好处。由于任务管理器 GPU 显示告诉我使用 dxva2 确实可以访问硬件加速进行解码和编码,所以我可能会在这里停下来,因为我已经有了一些可行的东西。

相关内容