ffmpeg 使用相同型号和性能但用途不同的多个 GPU

ffmpeg 使用相同型号和性能但用途不同的多个 GPU

操作系统 Ubuntu 22.04.1 ffmpeg 版本 N-109649-gab8cde6efa

我从官方来源安装了 GPU 驱动程序。

wget https://international.download.nvidia.com/XFree86/Linux-x86_64/525.78.01/NVIDIA-Linux-x86_64-525.78.01.run
chmod +x NVIDIA-Linux-x86_64-525.78.01.run
sudo ./NVIDIA-Linux-x86_64-525.78.01.run

并从源代码编译 ffmpeg 以启用硬件编码。

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
cd ffmpeg
./configure --enable-libfribidi --enable-libfontconfig --enable-filter=drawtext --enable-gpl --enable-libx264 --enable-libfreetype --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
make -j $(nproc)
sudo mv ffmpeg /usr/bin

这是 nvtop 的输出

尼维特

尽管使用相同的命令和相同的文件,但 GPU 0 的 GPU 使用率远低于 GPU 1。GPU 0 插入第一个 PCI-E 16x 插槽,GPU 1 插入下一个 PCI-E 16x 慢速插槽。

输入视频是 H.264 1080P 30FPS 视频。这是我用来编码视频的命令。

  ffmpeg -hide_banner -y \
    -hwaccel cuda \
    -hwaccel_device $hwaccel_device \
    -i tmp/videos/$2/$1.mp4 \
    -filter:v fps=30 \
    -threads 16 \
    -c:a aac \
    -ar 48000 \
    -c:v h264_nvenc \
    -profile:v main \
    -crf 20 \
    -sc_threshold 0 \
    -vf scale=w=1920:h=1080:force_original_aspect_ratio=decrease \
    -b:v 5000k \
    -maxrate 4500000 \
    -bufsize 4500000 \
    -b:a 192k \
    tmp/videos/$2/$1_1080p.mp4

为什么 GPU 0 的使用率比 GPU 1 低得多?同样值得注意的是,CPU 确实有板载显卡,而我用它来驱动显示器,因此 GPU 应该专用于编码。

答案1

您找错地方了。

NVENC 不使用 GPU 的 CUDA 核心。在您的屏幕截图中,“ENC”在设备 0 上显示为 100%,在设备 1 上显示为 97%。

相关内容