ubuntu20.04已安装 11.6版本 cuda,现需要通过源码编译方式安装使用 cuda 加速的 ffmpeg 步骤

ubuntu20.04上已经安装了 11.6版本的 cuda(CUDA_HOME=/usr/local/cuda-11.6),现在需要通过源码编译的方式安装使用cuda加速的 ffmpeg,请问我该下载具体哪个版本的ffmpeg源码?并给出详细的安装步骤

‌一、版本选择策略‌
    FFmpeg 主版本‌:
    ‌推荐 v5.1.2‌(2023 年 4 月发布),该版本完整支持 CUDA 11.x 的 NVDEC/NVENC 硬件加速接口,且修复了早期版本与 CUDA 11.6 的兼容性问题‌
    替代方案:若需更低版本,可选择 v4.4.3‌(需手动打补丁修复 API 兼容性)‌
    ‌依赖组件版本‌:
    NVIDIA Video Codec SDK 12.1‌:需与 CUDA 11.6 配套使用‌
    nv-codec-headers 12.0.16‌:提供 FFmpeg 所需的头文件‌

‌二、详细安装步骤‌
    1. 安装编译依赖
        1.1. 基础编译工具:
            sudo apt install build-essential nasm yasm cmake pkg-config libtool

        1.2. CUDA 加速依赖:
            1.2.1. sudo apt install libcuda1-510 nvidia-cuda-toolkit  # 驱动版本需 ≥510.39.01
                过程比较顺利,只是有点慢
            1.2.2. sudo apt install nvidia-cuda-dev  # CUDA 开发库
                过程比较顺利,只是有点慢
            1.2.2. sudo apt install libnvcuvid1  # CUDA 开发库
                    报错 Package 'libnvcuvid1' has no installation candidate 的解决方案:
                        方法1. 确认 libnvcuvid1 是否已经存在了(存在的话就不用重新安装了,还需要配置环境变量即可):
                            若 CUDA 11.6 已通过 .run 文件正确安装,libnvcuvid1 可能已存在于 /usr/local/cuda-11.6/lib64/ 目录下
                            但是我在 /usr/local/cuda-11.6/lib64/ 下没发现任何 libnvcuvid.so 前缀的文件
                            倒是使用 ldconfig -p | grep libnvcuvid 发现在  /usr/lib/wsl/lib/ 下有一个 libnvcuvid.so.1 文件( 对,你没看错,我的 ubuntu20.04是win10 wsl2下的虚拟环境 )
                            将 /usr/lib/wsl/lib/libnvcuvid.so.1 复制到 /usr/local/cuda-11.6/lib64/ 下
                            执行 echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc  # 配置环境变量‌
                            执行 source ~/.bashrc
                            此时相当于 libnvcuvid1 已经安装成功了
                        方法2. 若最初通过 .run 文件安装 CUDA 11.6,需重新添加 CUDA 官方 APT 源:
                            1. 清理旧 CUDA 安装残留(谨慎操作)
                                sudo apt purge nvidia-cuda-* cuda-* libnvcuvid1*
                                sudo rm -rf /etc/apt/sources.list.d/cuda*.list
                            2. 添加 CUDA 11.6 官方仓库(适用于 Ubuntu 20.04)
                                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
                                sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub
                                sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
                                sudo apt update
                            3. 安装完整 CUDA 工具包(包含 libnvcuvid1)
                                sudo apt install cuda-toolkit-11-6

    2. 部署 NVIDIA 编解码 SDK
        2.1. 下载 Video Codec SDK 12.1
            wget https://developer.nvidia.com/video-codec-sdk-12.1.14   # 404,可以官网下载:https://developer.nvidia.com/video-codec-sdk-archive
            unzip Video_Codec_SDK_12.1.14.zip -d nvidia_sdk
        2.2. 配置头文件路径
            sudo cp -r nvidia_sdk/Interface /usr/local/include/nvidia
    3. 安装 FFmpeg 源码
        3.1. 下载 FFmpeg v5.1.2
            wget https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n5.1.2.tar.gz
            tar -xzf n5.1.2.tar.gz
            cd FFmpeg-n5.1.2
        3.2. 配置编译参数(关键步骤)
                ./configure \
                --prefix=/usr/local \
                --enable-cuda-nvcc \
                --enable-cuvid \
                --enable-nvenc \
                --enable-nonfree \
                --enable-libnpp \
                --extra-cflags="-I/usr/local/cuda-11.6/include -I/usr/local/include/nvidia" \
                --extra-ldflags="-L/usr/local/cuda-11.6/lib64"
                报错:ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
                报错:ERROR: nvenc requested but not found
                    解决方案:需要安装 nv-codec-headers 12.0.16(参考:https://blog.csdn.net/liuliu123456/article/details/120998681):
                                git clone http://git.videolan.org/git/ffmpeg/nv-codec-headers.git
                                git  branch  -a发现有  remotes/origin/sdk/12.0,执行 git checkout sdk/12.0
                                make
                                sudo make install
                                export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}
                                pkg-config --modversion ffnvcodec
        3.3. 编译与安装
            3.3.1. make -j$(nproc)
                    报错: make: *** No rule to make target 'libavfilter/all_channel_layouts.inc', needed by 'libavfilter/formats.o'. Stop
                    ffmpeg 的版本不对,可能不是通过前面 3.1的方式下载 ffmpeg  n5.1.2 版本的,我最开始是使用 git  branch  -a 能查询到远端只有release/5.1,所以就直接 git  checkout  release/5.1 下载的是 release/5.1 版本,
                    其实执行 git tag -l 应该能查询到 n5.1.2 版本,然后 git checkout  n5.1.2,然后重新执行前面的 configure 步骤,但是记得先清空 make 命令产生的缓存(如下2个命令):
                            make clean  # 若 Makefile 支持 clean 规则
                            rm -rf libavfilter/*.o libavfilter/*.d

            3.3.2. sudo make install

    4. 环境验证
        4.1. 检查 CUDA 加速支持
            ffmpeg -hwaccels | grep cuda  # 应输出 "cuda"
        4.2. 验证编解码器
            ffmpeg -codecs | grep nvenc  # 应显示 h264_nvenc/hevc_nvenc
        4.3. 使用 ffmpeg 切割视频:
            1. ffmpeg -i ./demo.mp4 -c:v libx264 -ss 00:10:00 -to 00:20:00 -y -f mp4 ./demo_output.mp4    # 不使用 cuda 加速
            2. ffmpeg -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -i ./demo.mp4 -c:v h264_nvenc -ss 00:10:00 -to 00:20:00 -y -f mp4 ./demo_output.mp4 # 使用 cuda 加速

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984329.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《OkHttp:工作原理 拦截器链深度解析》

目录 一、OKHttp 的基本使用 1. 添加依赖 2. 发起 HTTP 请求 3. 拦截器(Interceptor) 4. 高级配置 二、OKHttp 核心原理 1. 责任链模式(Interceptor Chain) 2. 连接池(ConnectionPool) 3. 请求调度…

HeidiSQL:一款免费的数据库管理工具

HeidiSQL 是一款免费的图形化数据库管理工具,支持 MySQL、MariaDB、Microsoft SQL、PostgreSQL、SQLite、Interbase 以及 Firebird,目前只能在 Windows 平台使用。 HeidiSQL 的核心功能包括: 免费且开源,所有功能都可以直接使用。…

C/C++蓝桥杯算法真题打卡(Day3)

一、P8598 [蓝桥杯 2013 省 AB] 错误票据 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 读取数据行数unordered_map<int, int> idCount; // 用于统计每个ID出现的次数vector<int> ids; …

【2025软考高级架构师】——软件工程(2)

摘要 本文主要介绍了软件工程中常见的多种软件过程模型&#xff0c;包括瀑布模型、原型模型、V模型、W模型、迭代与增量模型、螺旋模型、构件组装模型、基于构件的软件工程&#xff08;CBSE&#xff09;、快速应用开发&#xff08;RAD&#xff09;、统一过程/统一开发方法和敏…

【Vue3 Element UI - Plus + Tyscript 实现Tags标签输入及回显】

Vue3 Element Plus TypeScript 实现 Tags 标签输入及回显 在开发后台管理系统或表单页面时&#xff0c;动态标签&#xff08;Tags&#xff09; 是一个常见的功能需求。用户可以通过输入框添加标签&#xff0c;并通过关闭按钮删除标签&#xff0c;同时还需要支持标签数据的提…

Easysearch 使用 AWS S3 进行快照备份与还原:完整指南及常见错误排查

Easysearch 可以使用 AWS S3 作为远程存储库&#xff0c;进行索引的快照&#xff08;Snapshot&#xff09;备份和恢复。同时&#xff0c;Easysearch 内置了 S3 插件&#xff0c;无需额外安装。以下是完整的配置和操作步骤。 1. 在 AWS S3 上创建存储桶 登录 AWS 控制台&#x…

【CSS3】筑基篇

目录 复合选择器后代选择器子选择器并集选择器交集选择器伪类选择器 CSS 三大特性继承性层叠性优先级 背景属性背景色背景图背景图平铺方式背景图位置背景图缩放背景图固定背景复合属性 显示模式显示模式块级元素行内元素行内块元素 转换显示模式 结构伪类选择器结构伪类选择器…

【MySQL】(4) 表的操作

一、创建表 语法&#xff1a; 示例&#xff1a; 生成的数据目录下的文件&#xff1a; 二、查看表结构 三、修改表 语法&#xff1a; 另一种改表名语法&#xff1a;rename table old_name1 to new_name1, old_name2 to new_name2; 示例&#xff1a; 四、删除表 语法&#xf…

C++:string容器(下篇)

1.string浅拷贝的问题 // 为了和标准库区分&#xff0c;此处使用String class String { public :/*String():_str(new char[1]){*_str \0;}*///String(const char* str "\0") // 错误示范//String(const char* str nullptr) // 错误示范String(const char* str …

基于Harbor构建docker私有仓库

Harbor 是一个开源的企业级容器镜像仓库&#xff0c;主要用于存储、签名和扫描容器镜像。Harbor 基于 Docker Registry 构建&#xff0c;并在此基础上增加了许多企业级特性&#xff0c;以满足企业对安全性、可扩展性和易用性的需求。Harbor 的架构由多个组件组成&#xff0c;包…

阿里发布新开源视频生成模型Wan-Video,支持文生图和图生图,最低6G就能跑,ComFyUI可用!

Wan-Video 模型介绍&#xff1a;包括 Wan-Video-1.3B-T2V 和 Wan-Video-14B-T2V 两个版本&#xff0c;分别支持文本到视频&#xff08;T2V&#xff09;和图像到视频&#xff08;I2V&#xff09;生成。14B 版本需要更高的 VRAM 配置。 Wan2.1 是一套全面开放的视频基础模型&…

运动控制卡--概述学习

目录 概述 技术背景 常见的运动控制卡分类&#xff1a; 国外品牌 国内品牌 各个品牌官网 国外品牌 国内品牌 概述 运动控制卡被称作控制卡&#xff0c;只是因为它做成卡的形式&#xff0c;可以插进工控机主板上&#xff0c;一般走pci或pcie通讯。运动控制卡负责接收计算…

网络编程-----服务器(多路复用IO 和 TCP并发模型)

一、单循环服务器模型 1. 核心特征 while(1){newfd accept();recv();close(newfd);}2. 典型应用场景 HTTP短连接服务&#xff08;早期Apache&#xff09;CGI快速处理简单测试服务器 3. 综合代码 #include <stdio.h> #include <sys/types.h> /* See NO…

Java【网络原理】(3)网络编程续

目录 1.前言 2.正文 2.1ServerSocket类 2.2Socket类 2.3Tcp回显服务器 2.3.1TcpEchoServer 2.3.2TcpEchoClient 3.小结 1.前言 哈喽大家好&#xff0c;今天继续进行计算机网络的初阶学习&#xff0c;今天学习的是tcp回显服务器的实现&#xff0c;正文开始 2.正文 在…

SpringMvc与Struts2

一、Spring MVC 1.1 概述 Spring MVC 是 Spring 框架的一部分&#xff0c;是一个基于 MVC 设计模式的轻量级 Web 框架。它提供了灵活的配置和强大的扩展能力&#xff0c;适合构建复杂的 Web 应用程序。 1.2 特点 轻量级&#xff1a;与 Spring 框架无缝集成&#xff0c;依赖…

web—HTML

什么是web ●Web:全球广域网&#xff0c;也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 在浏览器中呈现精美的网页。 1.网页由那几部分组成&#xff1f; >文字、图片、视频、音频、超链接&#xff0c;&#xff0c;&#xff0c; 2.我们看到的网页&#xf…

php虚拟站点提示No input file specified时的问题及权限处理方法

访问站点&#xff0c;提示如下 No input file specified. 可能是文件权限有问题&#xff0c;也可能是“.user.ini”文件路径没有配置对&#xff0c;最简单的办法就是直接将它删除掉&#xff0c;还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

INFINI Labs 产品更新发布&#xff01;此次更新&#xff0c;Easysearch 增加了新的功能和数据类型&#xff0c;包括 wildcard 数据类型、Point in time 搜索 API、异步搜索 API、数值和日期字段的 doc-values 搜索支持&#xff0c;Console 新增了日志查询功能。 INFINI Easyse…

关于OceanBase与CDH适配的经验分享

CDH是Cloudera早期推出的一个开源平台版本&#xff0c;它实质上成为了Apache Hadoop生态系统内公认的安装与管理平台&#xff0c;专为企业级需求量身打造。CDH为用户提供了即装即用的企业级解决方案。通过整合Hadoop与另外十多项关键开源项目&#xff0c;Cloudera构建了一个功能…

解决VScode 连接不上问题

问题 &#xff1a;VScode 连接不上 解决方案&#xff1a; 1、手动杀死VS Code服务器进程&#xff0c;然后重新尝试登录 打开xshell &#xff0c;远程连接服务器 &#xff0c;查看vscode的进程 &#xff0c;然后全部杀掉 [cxqiZwz9fjj2ssnshikw14avaZ ~]$ ps ajx | grep vsc…