Ubuntu配置安装GPU转码
ubuntu 测试使用 GPU-ffmpeg 转码视频
额外命令:
lsb_release -a lspci | grep -i vga
|
第一步:安装ffmpeg
第二步:1. 安装 NVIDIA 驱动
(1) 添加官方驱动仓库并更新
sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update
|
(2) 查看推荐驱动版本
输出示例:
== /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) 重启系统
(5) 验证驱动
正常输出应显示 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:
(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
vim /etc/environment 添加 PATH="/usr/local/cuda/bin"
|
(4) 验证 CUDA
正常输出应显示 CUDA 版本。
第四步: 验证 GPU 加速是否生效
1、检查编码器
ffmpeg -encoders | grep 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 组合命令*
windows 方案:
while ($true) { nvidia-smi; Start-Sleep -Milliseconds 500 }
|
2.2、nvtop(类 htop 工具)
sudo apt install nvtop 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
|
命令详解:
基础参数
-nostats
- 功能:禁用编码统计信息的输出。
- 说明:默认情况下,FFmpeg 会实时显示比特率、帧数等统计信息,此参数可减少输出干扰。
-loglevel warning
- 功能:设置日志级别为
warning。
- 说明:仅显示警告和错误信息,抑制冗余日志,使输出更简洁。
-hwaccel cuda
- 功能:启用 NVIDIA CUDA 硬件加速解码。
- 说明:利用 GPU 加速视频解码流程,提升处理速度。
-i ace.mp4
视频处理参数
-vf "scale=720:1270,setsar=1/1"
- 功能:应用视频滤镜链。
scale=720:1270:将视频缩放至 720x1270 分辨率(注意宽高比可能被改变)。
setsar=1/1:设置像素宽高比(Sample Aspect Ratio)为 1:1,确保方形像素显示。
- 说明:调整分辨率后需修正宽高比,避免播放时变形。
视频编码参数
-c:v h264_nvenc
- 功能:使用 NVIDIA NVENC 硬件编码器生成 H.264 视频流。
- 说明:相比 CPU 编码(如
libx264),硬件编码速度更快,但压缩效率略低。
-preset p3
- 功能:设置编码器预设为
p3。
- 说明:NVENC 预设范围
p1(最快)到 p7(最慢但质量更好),p3 平衡速度与质量。
-rc vbr
- 功能:使用可变比特率(Variable Bitrate)控制模式。
- 说明:VBR 根据内容复杂度动态分配码率,相比 CBR(恒定码率)更节省存储。
-b:v 0
- 功能:将视频目标比特率设为
0。
- 说明:在
-rc vbr + -cq 模式下,此参数表示由质量参数(-cq)主导码率分配。
-cq 23
- 功能:设置恒定质量模式的质量值为
23。
- 说明:NVENC 的
cq 范围通常为 0(无损)到 51(最差),23 是常见高质量选择。
-multipass fullres
- 功能:启用两趟编码(Two-Pass Encoding),使用全分辨率分析。
- 说明:首趟分析视频内容,次趟优化码率分配,提升压缩效率(需更高计算资源)。
-tune hq
- 功能:优化编码参数以追求高质量。
- 说明:适用于对画质要求较高的场景,可能牺牲部分编码速度。
音频与帧率参数
-c:a aac
- 功能:使用 AAC 编码器压缩音频流。
- 说明:AAC 是通用音频格式,平衡音质与文件大小。
-r 30
- 功能:强制输出视频帧率为
30 FPS。
- 说明:若输入帧率不一致,FFmpeg 会通过丢帧或插帧适配。
其他参数
-y
- 功能:自动覆盖输出文件(
3.mp4),无需用户确认。