当前位置: 首页 > news >正文

ubuntu环境编译ffmepg支持nvidia显卡加速

文章目录

  • 1. 安装NVIDIA驱动
  • 2. 安装CUDA&NV-CODEC
    • 2.1 安装CUDA
    • 2.2 安装NV-CODEC
  • 3. 编译ffmpeg
    • 3.1 安装依赖
    • 3.2 下载源码安装依赖
    • 3.3 验证
  • 4. 使用

1. 安装NVIDIA驱动

  1. 安装依赖包

    sudo apt install -y ubuntu-drivers-common
    
  2. 编辑 /etc/modprobe.d/blacklist-nouveau.conf 文件,添加以下内容:

    blacklist nouveau
    blacklist lbm-nouveau
    options nouveau modeset=0
    alias nouveau off
    alias lbm-nouveau off
    
  3. 关闭nouveau

    echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
    
  4. 重新生成内核并重启

    sudo update-initramfs -u
    sudo reboot
    
  5. 重启后验证

    lsmod | grep nouveau
    

    如果没有输出,则禁用成功;

  6. 查找推荐驱动

    ubuntu-drivers devices
    

    输出如下:
    image-20250220114042673

  7. 安装推荐驱动

    sudo apt install -y nvidia-driver-535-server
    

    安装成功后重启执行nvidia-smi输出如下则证明驱动安装成功,注意这里的CUDA Version为最高安装版本,并非已安装版本

    image-20250220115053302

2. 安装CUDA&NV-CODEC

2.1 安装CUDA

去NVIDIA官网直接下载不高于nvidia-smi显示的版本,我们安装12.0版本,按照官网描述安装

image-20250220134133409

image-20250220134205352

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

安装成功后将以下内容加到/etc/profile文件

export PATH=$PATH:/usr/local/cuda-12.0/bin/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.0/lib64

执行source /etc/profile后执行nvcc --version输出如下内容则证明安装成功

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Mon_Oct_24_19:12:58_PDT_2022
Cuda compilation tools, release 12.0, V12.0.76
Build cuda_12.0.r12.0/compiler.31968024_0

2.2 安装NV-CODEC

因为我们cuda安装的是12.0版本,因此执行以下指令安装ffnvcodec,参考NVIDIA官网

git clone -b sdk/12.0 git@github.com:FFmpeg/nv-codec-headers.git
cd nv-codec-headers && sudo make install && cd

3. 编译ffmpeg

3.1 安装依赖

sudo apt-get -y install \
    build-essential \
    pkg-config \
    libtool \
    automake \
    yasm \
    nasm \
    cmake \
    libtool \
    libc6 \
    libc6-dev \
    unzip \
    wget \
    libnuma1 \
    libnuma-dev \
    libx264-dev \
    libx265-dev \
    libssl-dev \
    librtmp-dev \
    libsrt-dev \
    libfreetype6-dev

3.2 下载源码安装依赖

前往ffmpeg官网下载ffmpeg源码,最好下载5以上版本,我用4.x版本编译时候有莫名报错,换到5版本一切正常;我们以ffmpeg-5.1.6版本为例,解压后进入ffmpeg源码目录,执行以下命令

./configure \
  --prefix=$(pwd)/install \
  --extra-cflags="-I/usr/local/cuda/include" \
  --extra-ldflags="-L/usr/local/cuda/lib64" \
  --enable-shared \
  --enable-static \
  --extra-libs=-lstdc++ \
  --enable-gpl \
  --enable-version3 \
  --enable-libfreetype \
  --enable-libx264 \
  --enable-libx265 \
  --enable-openssl \
  --enable-librtmp \
  --enable-libsrt \
  --enable-demuxer=rtsp \
  --enable-muxer=rtsp \
  --enable-cuda-nvcc \
  --enable-libnpp \
  --enable-cuda \
  --enable-cuvid \
  --enable-nvenc \
  --enable-nvdec \
  --enable-nonfree

成功后会输出如下信息:

image-20250221110235921

​ 执行make -j$(nproc) && make install即可在源码目录下生成install目录;

3.3 验证

依然修改/etc/profile将ffmpeg加入环境变量,大致效果如下:

export PATH=$PATH:/usr/local/cuda-12.0/bin/:/home/ffmpeg-5.1.6/install/bin/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.0/lib64:/home/ffmpeg-5.1.6/install/lib

执行source /etc/profile生效环境变量,执行以下命令验证

ffmpeg -encoders | grep nvenc

输出如下内容,则证明成功

V....D h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
V....D hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)

4. 使用

# H.264加速编码
ffmpeg -i input.mp4 -c:v h264_nvenc -b:v 2M -g 30 -c:a copy output_gpu_h264.mp4

# HEVC/H.265加速编码
ffmpeg -i input.mp4 -c:v hevc_nvenc -b:v 2M -g 30 -c:a copy output_gpu_h265.mp4

相关文章:

  • Unity摄像机与灯光相关知识
  • 51c大模型~合集71
  • 2025年Java高级工程师面试题精选:30道高频问题深度解析
  • Linux操作系统:智能工业电表开发
  • 【Python爬虫(32)】从单飞 to 团战:Python多线程爬虫进化史
  • MSE损失函数
  • BUU40 [安洵杯 2019]easy_serialize_php
  • MyBatis-Plus之通用枚举
  • Redis 缓存穿透、击穿、雪崩:问题与解决方案
  • 网络安全工具大全
  • 堆、优先队列、堆排序
  • 使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作
  • 国产编辑器EverEdit - 如何在EverEdit中管理工程?
  • SpringCloud面试题----微服务开发如何处理通信和数据一致性问题
  • 新书速览|鸿蒙HarmonyOS NEXT开发之路 卷1:ArkTS语言篇
  • 微信小程序——访问服务器媒体文件的实现步骤
  • 深入剖析Linux C中线程未释放问题
  • 安卓系统远程控制电脑方法,手机远控教程,ToDesk工具
  • 在 Mac ARM 架构的 macOS 系统上启用 F1 键作为 Snipaste 的截屏快捷键
  • Ubuntu24.04安装不同版本的pip
  • 1688网站建设方案书模板/百度信息流怎么投放
  • dw怎样做网站切换/网站运营管理
  • 代码怎么做网站/关键词免费下载
  • 高端上海网站设计公司价格/网络推广怎么学
  • 做cps要做什么类型的网站/seo是什么意思如何实现
  • 群晖nas安装wordpress安装/seo排名教程