FFMPEG 硬件解码器比软件解码器慢很多,为什么?

FFMPEG 硬件解码器比软件解码器慢很多,为什么?

我是 ffmpeg 新手。我想将视频转换为 mjpeg(帧独立)。起初我认为硬件加速应该更快。然后我尝试了硬件解码器和软件解码器:

"ffmpeg.exe" -y -hwaccel auto -ss 00:02:59 -to 00:04:17 -i "INPUT.mp4" -c:v mjpeg -q:v 1 -c:a pcm_s16le OUTPUT.mov

结果是:

frame= 1871 fps=127 q=1.0 Lsize=  447288kB time=00:01:17.99 bitrate=46980.0kbits/s speed= 5.3x

但,

"ffmpeg.exe" -y -ss 00:02:59 -to 00:04:17  -i "INPUT.mp4"  -c:v mjpeg  -q:v 1  -c:a pcm_s16le  OUTPUT.mov

结果是:

frame= 1871 fps=405 q=1.0 Lsize=  447288kB time=00:01:17.99 bitrate=46980.0kbits/s speed=16.9x

硬件解码器比软件解码器慢很多。这是怎么回事?

非常感谢您的帮助。

答案1

我相信您的设置速度较慢的原因之一是您要求 GPU 进行解码,但要求 CPU 进行编码。

在这种情况下,视频数据需要在内存和 GPU 之间传输,然后再传输回 CPU,并且它们之间的视频数据格式可能需要转码。因此,在 GPU、内存和 CPU 之间的总线传输和格式转码之间,速度会比所有基于 CPU 的解码和编码都要慢。

如果您只是解码为原始视频或者通过 GPU 解码和编码而没有使用任何额外的非 GPU 过滤器(这会导致视频被复制回内存以供 CPU 处理)以减少传输和转码开销,那么您将能够真正看到性能的提升。

相关内容