FFMPEG v4 和 v5 的 GPU 加速编码性能比较

FFMPEG v4 和 v5 的 GPU 加速编码性能比较

我注意到,h264_nvenc与 FFmpeg 4.3/4.4 相比,使用简单的全硬件转码测试最近的 FFmpeg 5.1 版本时编码性能有所下降。

  • 使用 FFmpeg 4.3 转码大约需要 92 秒(最新报告速度为 14.3 倍)。
  • 使用 FFmpeg 5.1 转码大约需要 134 秒(上次报告的速度为 9.83 倍)。因此,这种-hwaccel cuda -hwaccel_output_format cuda使用似乎会导致编码速度变慢。

有没有类似的问题?有什么提示可以诊断这个问题吗?

输入文件

input.mp4 是一个视频,其中包含以下内容:

  • 视频:21分51秒,H.264([电子邮件保护]), 720p, 25 fps, 892 kbps 比特率, yuv420p
  • 音频:AAC,128 kbps,44.1 kHz

FFmpeg 调用

旧版 FFmpeg v4.3.1 的调用参数为:

ffmpeg -y -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2M output.mp4

新的 FFmpeg v5.1.3 版本带有调用参数:

ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -extra_hw_frames 8 -i input.mp4 -c:v h264_nvenc -b:v 2M output.mp4

构建和运行时

测试运行使用在 Docker 容器中创建的 ffmpeg 版本,并使用nvidia/cuda:12.0.1-devel-ubuntu22.04nvidia/cuda:12.0.1-base-ubuntu22.04安装libnpp-12-0为运行时映像。带有来自此标签的标头:https://github.com/FFmpeg/nv-codec-headers/archive/refs/tags/n12.0.16.0.tar.gz

FFMPEG 使用以下配置构建:

RUN cd /tmp/ffmpeg-${FFMPEG_VERSION} && \
    ./configure \
    --prefix=${PREFIX} \
    --disable-debug \
    --disable-doc \
    --disable-ffplay \    
    --enable-version3 \
    --enable-gpl \
    --enable-nonfree \
    --enable-small \
    --enable-libfdk-aac \
    --enable-openssl \
    --enable-cuda \
    --enable-cuvid \
    --enable-nvenc \    
    --enable-libnpp \
    --enable-nvenc \    
    --enable-shared \
    --extra-cflags="-I${PREFIX}/include -I${PREFIX}/include/ffnvcodec -I/usr/local/cuda/include/" \
    --extra-ldflags="-L${PREFIX}/lib -L/usr/local/cuda/lib64/" \
    --extra-libs=-ldl  && \
    make && \
    make install && \
    make distclean && \
    hash -r

硬件:NVIDIA GeForce RTX 2080、驱动程序版本:536.23、Windows 10 上的 Docker 4.24.1。基于 Kubernetes 的部署也报告了性能差异。

提前感谢您对此问题的评论和反馈。

相关内容