我是 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 处理)以减少传输和转码开销,那么您将能够真正看到性能的提升。