0%

Ubuntu配置安装GPU转码

Ubuntu配置安装GPU转码

ubuntu 测试使用 GPU-ffmpeg 转码视频

额外命令:

lsb_release -a   # 查看发行版本及代号
lspci | grep -i vga # 查看是否存在gpu

第一步:安装ffmpeg

apt install ffmpeg

第二步:1. 安装 NVIDIA 驱动

(1) 添加官方驱动仓库并更新

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

(2) 查看推荐驱动版本

ubuntu-drivers devices

输出示例:

== /sys/devices/pci0000:00/0000:00:02.0/0000:03:00.0 ==
modalias : pci:v000010DEd00001C82sv000010DEsd00001C82bc03sc00i00
vendor : NVIDIA Corporation
model : GP107 [GeForce GTX 1050 Ti]
driver : nvidia-driver-570-server - distro non-free
driver : nvidia-driver-550 - distro non-free
driver : nvidia-driver-418-server - distro non-free
driver : nvidia-driver-570 - distro non-free recommended
driver : nvidia-driver-545 - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-535 - distro non-free
driver : nvidia-driver-450-server - distro non-free
driver : nvidia-driver-390 - distro non-free
driver : nvidia-driver-470 - distro non-free
driver : nvidia-driver-470-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin

(3) 安装推荐的驱动(如 570 版本)

sudo apt install nvidia-driver-570

(4) 重启系统

sudo reboot

(5) 验证驱动

nvidia-smi

正常输出应显示 GPU 状态:

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce GTX 1050 Ti Off | 00000000:03:00.0 Off | N/A |
| 30% 35C P8 N/A / 75W | 0MiB / 4096MiB | 0% Default |
+-----------------------------------------+----------------------+----------------------+

第三步: 安装 CUDA 工具包(可选)

如果需开发 GPU 计算应用(如 AI、深度学习),安装 CUDA:

(1) 访问 CUDA Toolkit Archive 选择版本(推荐 CUDA 11.8 或 12.x)

(2) 通过命令行安装(以 CUDA 12.2 为例)

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.9.0/local_installers/cuda-repo-ubuntu2204-12-9-local_12.9.0-575.51.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-9-local_12.9.0-575.51.03-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-9-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-9

(3) 添加变量

虽然系统显示 cuda-toolkit-12-9 已安装,但 nvcc 的路径未添加到系统环境变量中。此时需要手动将 CUDA 的二进制目录加入 PATH

export PATH=/usr/local/cuda/bin:$PATH
source ~/.bashrc

## root 用户添加环境变量
vim /etc/environment
添加 PATH="/usr/local/cuda/bin"

(4) 验证 CUDA

nvcc --version

正常输出应显示 CUDA 版本。

第四步: 验证 GPU 加速是否生效

1、检查编码器

ffmpeg -encoders | grep nvenc
# 应输出包含 h264_nvenc 的行

正常输出:

root@R7-13:~# ffmpeg -encoders | grep nvenc
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_hevc NVIDIA NVENC hevc encoder (codec hevc)
V....D hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)

2、监控 GPU 使用情况

2.1、nvidia-smi + watch 组合命令*
# 每秒刷新一次 GPU 状态,适合快速查看核心利用率、显存占用和温度
watch -n 1 nvidia-smi # Linux/macOS

windows 方案:

while ($true) { nvidia-smi; Start-Sleep -Milliseconds 500 }
2.2、nvtop(类 htop 工具)
# 支持交互式操作和动态排序,适合多 GPU 服务器
sudo apt install nvtop # Ubuntu/Debian
nvtop

第四步:使用GPU转码

# 本地文件转码
ffmpeg -nostats -loglevel warning -hwaccel cuda -i ace.mp4 -vf "scale=720:1270,setsar=1/1" -c:v h264_nvenc -preset p3 -rc vbr -b:v 0 -cq 23 -multipass fullres -tune hq -c:a aac -r 30 -y 3.mp4

# 带请求头
ffmpeg -nostats -loglevel warning -hwaccel cuda -headers "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36\r\nReferer: https://exx.tv/\r\n" -i "https://xxx.m3u8" -vf "scale=720:1270,setsar=1/1" -c:v h264_nvenc -preset p3 -rc vbr -b:v 0 -cq 23 -multipass fullres -tune hq -c:a aac -r 30 -y 3.mp4

命令详解:

基础参数
  1. -nostats
    • 功能:禁用编码统计信息的输出。
    • 说明:默认情况下,FFmpeg 会实时显示比特率、帧数等统计信息,此参数可减少输出干扰。
  2. -loglevel warning
    • 功能:设置日志级别为 warning
    • 说明:仅显示警告和错误信息,抑制冗余日志,使输出更简洁。
  3. -hwaccel cuda
    • 功能:启用 NVIDIA CUDA 硬件加速解码。
    • 说明:利用 GPU 加速视频解码流程,提升处理速度。
  4. -i ace.mp4
    • 功能:指定输入文件为 ace.mp4

视频处理参数
  1. -vf "scale=720:1270,setsar=1/1"
    • 功能:应用视频滤镜链。
      • scale=720:1270:将视频缩放至 720x1270 分辨率(注意宽高比可能被改变)。
      • setsar=1/1:设置像素宽高比(Sample Aspect Ratio)为 1:1,确保方形像素显示。
    • 说明:调整分辨率后需修正宽高比,避免播放时变形。

视频编码参数
  1. -c:v h264_nvenc
    • 功能:使用 NVIDIA NVENC 硬件编码器生成 H.264 视频流。
    • 说明:相比 CPU 编码(如 libx264),硬件编码速度更快,但压缩效率略低。
  2. -preset p3
    • 功能:设置编码器预设为 p3
    • 说明:NVENC 预设范围 p1(最快)到 p7(最慢但质量更好),p3 平衡速度与质量。
  3. -rc vbr
    • 功能:使用可变比特率(Variable Bitrate)控制模式。
    • 说明:VBR 根据内容复杂度动态分配码率,相比 CBR(恒定码率)更节省存储。
  4. -b:v 0
    • 功能:将视频目标比特率设为 0
    • 说明:在 -rc vbr + -cq 模式下,此参数表示由质量参数(-cq)主导码率分配。
  5. -cq 23
    • 功能:设置恒定质量模式的质量值为 23
    • 说明:NVENC 的 cq 范围通常为 0(无损)到 51(最差),23 是常见高质量选择。
  6. -multipass fullres
    • 功能:启用两趟编码(Two-Pass Encoding),使用全分辨率分析。
    • 说明:首趟分析视频内容,次趟优化码率分配,提升压缩效率(需更高计算资源)。
  7. -tune hq
    • 功能:优化编码参数以追求高质量。
    • 说明:适用于对画质要求较高的场景,可能牺牲部分编码速度。

音频与帧率参数
  1. -c:a aac
    • 功能:使用 AAC 编码器压缩音频流。
    • 说明:AAC 是通用音频格式,平衡音质与文件大小。
  2. -r 30
    • 功能:强制输出视频帧率为 30 FPS
    • 说明:若输入帧率不一致,FFmpeg 会通过丢帧或插帧适配。

其他参数
  1. -y
    • 功能:自动覆盖输出文件(3.mp4),无需用户确认。