我,我一直在尝试使用 nvidia GPU 进行硬件转码,一切正常,但是当我使用 scale_cuda 或 scale_npp 等缩放过滤器时,我收到错误消息“没有这样的过滤器”。我尝试使用编译指南编译 ffmpeg,也尝试了 Nvidia 网站上提供的指南,但仍然不起作用,即使使用这些编译版本后,我仍然收到错误消息“没有这样的过滤器”。有什么方法可以启用这些过滤器吗?如果我使用调整大小过滤器,它可以工作,但它会拉伸垂直视频,并且使用 ffmpeg 中的缩放过滤器会消耗更多的 CPU,而且效率不高。有人可以帮忙吗?提前谢谢您。
答案1
我遇到了可能相同的问题,请参阅下面的错误消息。
为我解决这个问题的方法是添加hwupload_cuda
声明-vf
,例如。
- 来自
-vf "scale_cuda=-2:720:format=yuv420p"
(错误) - 去
-vf "hwupload_cuda,scale_cuda=-2:720:format=yuv420p"
(工作)。
希望这能有所帮助。为了以防万一,这里是完整的命令:ffmpeg -hide_banner -hwaccel_output_format cuda -i "input-1080p.mp4" -map 0 -c:v hevc_nvenc -preset p7 -tune hq -b:v 2.5M -maxrate 8M -vf "hwupload_cuda,scale_cuda=-2:720:format=yuv420p" -c:a copy -c:s copy "output-720p.mp4"
...至于我收到的错误消息(使用来自的预编译可执行文件吉安,完整 git 构建版本:2023-07-19-git-efa6cec759),这里是:
Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scale_0'
[vf#0:0 @ 00000xxxxx00000] Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Function not implemented
Conversion failed!