硬件加速下的 FFMPEG 性能

硬件加速下的 FFMPEG 性能

我正在使用 FFMPEG 进行一些视频转换,对硬件加速有疑问。

首先,我在配备 i7 处理器的笔记本电脑上转换了一段视频。经过一些提示,我使用英特尔的 QuickSync 最大限度地提高了速度,这极大地提高了性能。我的视频是用 gopro 相机拍摄的 1080p 视频。我使用的是从 gyan.dev 下载的最新 Windows 版本

这是我的命令:

ffmpeg.exe -y hwaccel qsv -i MY_VIDEO.mp4 -codec:v h264_qsv -preset slow -b:v 8000000 -bf 2 -flags +cgop -c:a copy -movflags faststart CONVERTED.mp4

它以大约 160fps 的速度处理视频,与软件编码器相比非常棒。

现在我有一台游戏电脑 - 配有 i7 10700F Comet Lake 处理器和NVIDIA GeForce RTX 3070显卡。我以为速度会大幅提升。命令是一样的,只是解码器和编码器变了。

ffmpeg.exe -y hwaccel cuda -i MY_VIDEO.mp4 -codec:v h264_nvenc -preset slow -b:v 8000000 -bf 2 -flags +cgop -c:a copy -movflags faststart CONVERTED.mp4

不幸的是,速度大约是 180fps。我是不是漏掉了什么,还是这就是 ffmpeg 用这张显卡能达到的最好效果?它的速度几乎和我的笔记本电脑一样快。

答案1

CPU 和 GPU 上的硬件编码器将针对特定的性能水平。

硬件编码块的性能取决于实际硬件块,而较少依赖于一般卡的性能。

3070 可能在 3D 渲染方面完全胜过集成显卡,但除非硬件编码器也强大得多,否则获得类似的性能并不完全令人惊讶。硬件编码器的目标是“超过”(例如)4K60,但能达到什么程度则取决于每个制造商设计的模块。远远超出这个范围将达到成本与收益的极限。

现代硬件编码器是 GPU 核心旁边的硅片上的特定区域,专用于视频编码,几乎完全不受 GPU 上核心的速度或数量的影响。

曾经有编码器使用 GPU 计算核心,但它们可能会严重影响游戏或系统性能,因为它们会占用可能需要它们的其他资源。它们还需要针对每个显卡制造商(AMD、Intel 和 Nvidia)进行专门编程,因此责任落在了制造商身上。他们又回到了在硬件(硅片)上进行编程,因为这意味着复制粘贴一个块,而不是为每个性能级别和代重写软件,并试图不使用“过多”资源,因为这会损害他们玩游戏的主要用途的性能。

问题在于,这些硬件模块往往表现出类似的性能,因为它们对于大多数任务来说“足够好”。但您可能会看到,对于任何给定的比特率,一个硬件编码器都会产生不同的质量输出。

相关内容