FFmpeg - 如何在Linux上安装支持CUDA的FFmpeg
FFmpeg - 如何在Linux(Ubuntu)上安装支持CUDA的FFmpeg
笔者认为现在的很多“xx教程”只讲干什么不讲为什么,这样即使报错了看官也不知道如何解决。
在安装过程的探索部分会记录我的整个安装过程以及报错和报错的解决办法。
在省流之一步到位的方法部分会省去安装过程中磕磕绊绊的哪些坑,提供一种避坑的方法。
安装过程的探索
确保机器上安装好了NVIDIA驱动和CUDA Toolkit
可以通过nvidia-smi
命令检查NVIDIA驱动程序是否已正确安装,通过nvcc --version
命令来验证CUDA Toolkit
是否安装完成。
安装带有NVIDIA硬件加速支持的FFmpeg
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --enable-cuda-nvcc --enable-cuda-sdk --enable-libnpp --enable-nvenc --extra-cflags="-I/usr/local/cuda/include" --extra-ldflags="-L/usr/local/cuda/lib64"
make
sudo make install
非自由软件的启用
上一步执行时候会报错:
cuda_nvcc is nonfree and --enable-nonfree is not specified.If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.
大概意思是说cuda_nvcc
是非自由软件,需要在FFmpeg的配置选项中加入--enable-nonfree
。
这样生成的二进制文件将会包含非自由代码,可能会限制FFmpeg版本的分发。
./configure --enable-cuda-nvcc --enable-cuda-sdk --enable-libnpp --enable-nvenc --enable-nonfree --extra-cflags="-I/usr/local/cuda/include" --extra-ldflags="-L/usr/local/cuda/lib64"
make
sudo make install
安装ffnvcodec
上一步执行时候会报错:
ERROR: nvenc requested, but not all dependencies are satisfied: ffnvcodecIf you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.
ffnvcodec是FFmpeg对NVIDIA编解码SDK的封装,必须在系统中安装此库才能启用NVENC编码器。
sudo apt-get update
sudo apt-get install libnvidia-encode-<version> ffmpeg
sudo apt-get install nv-codec-headers
如何确定libnvidia-encode
的version
呢?需要将<version>
替换为NVIDIA驱动版本号。
nvidia-smi | grep "Driver Version"
可以看到| NVIDIA-SMI 470.239.06 Driver Version: 470.239.06 CUDA Version: 11.4 |
,即驱动版本Driver Version
为470.239.06
。
尝试sudo apt-get install libnvidia-encode-470.239.06 ffmpeg
报错找不到libnvidia-encode-470.239.06
。
尝试不加版本号sudo apt-get install libnvidia-encode
得到:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
虚拟软件包 libnvidia-encode 由下面的软件包提供:nvidia-340 340.108-0ubuntu5.20.04.2libnvidia-encode-390 390.157-0ubuntu0.20.04.1libnvidia-encode-525-server 525.105.17-0ubuntu0.18.04.1libnvidia-encode-515-server 515.105.01-0ubuntu0.18.04.1libnvidia-encode-470-server 470.182.03-0ubuntu0.18.04.1libnvidia-encode-450-server 450.236.01-0ubuntu0.18.04.1libnvidia-encode-418-server 418.226.00-0ubuntu0.18.04.2libnvidia-encode-550 550.54.15-0ubuntu1libnvidia-encode-535 535.161.08-0ubuntu1libnvidia-encode-470 470.239.06-0ubuntu1libnvidia-encode-545 545.23.08-0ubuntu1libnvidia-encode-525 525.147.05-0ubuntu1libnvidia-encode-450 450.248.02-0ubuntu1libnvidia-encode-515 515.105.01-0ubuntu1libnvidia-encode-510 510.108.03-0ubuntu1libnvidia-encode-520 520.61.05-0ubuntu1libnvidia-encode-495 495.29.05-0ubuntu1libnvidia-encode-465 465.19.01-0ubuntu1libnvidia-encode-460 460.106.00-0ubuntu1libnvidia-encode-455 455.45.01-0ubuntu1
请您明确地选择安装其中一个。E: 软件包 libnvidia-encode 没有可安装候选
其中libnvidia-encode-470
对应的470.239.06-0ubuntu1
不正是我显卡驱动的版本吗。
因此sudo apt-get install libnvidia-encode-470 ffmpeg
解决。
在执行命令sudo apt-get install nv-codec-headers
时报错无法定位软件包 nv-codec-headers
,因此需要手动下载其源码并编译安装:
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
sudo make install
最后一步之编译FFmpeg
准备工作做完了,直接
./configure --enable-cuda-nvcc --enable-cuda-sdk --enable-libnpp --enable-nvenc --enable-nonfree --extra-cflags="-I/usr/local/cuda/include" --extra-ldflags="-L/usr/local/cuda/lib64"
make
sudo make install
等待一会儿,就安装好了。
ffmpeg -hwaccels
可以看到:
Hardware acceleration methods:
vdpau
cuda
说明ffmpeg现在已经支持CUDA加速了。
(./configure
的时候抛出了警告WARNING: Option --enable-cuda-sdk is deprecated. Use --enable-cuda-nvcc instead.
,已经有--enable-cuda-nvcc
了,因此我们也可以删掉--enable-cuda-sdk
。)
启用libx264
sudo apt-get install libx264-dev
然后在./configure
的时候添加两个参数--enable-libx264
和--enable-gpl
(--enable-gpl
是添加--enable-libx264
的时候它让加的)
省流之一步到位的方法
若安装过程遇到任何报错可以尝试在在安装过程的探索中寻找可能的解决方法。
# 安装libnvidia-encode和ffmpeg开发包
sudo apt-get update
sudo apt-get install libnvidia-encode-<version> ffmpeg # 将<version>替换为你显卡驱动的版本
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
sudo make install
cd ..
# 编译安装FFmpeg
./configure --enable-cuda-nvcc --enable-libnpp --enable-nvenc --enable-nonfree --extra-cflags="-I/usr/local/cuda/include" --extra-ldflags="-L/usr/local/cuda/lib64" # 也可以加上--enable-libx264 --enable-gpl以便支持libx264
make
sudo make install
如何加速?加速命令是什么
ffmpeg -hwaccel cuda -i input.mp4 output.mp4
命令中-hwaccel cuda
选项告诉FFmpeg使用CUDA进行硬件加速。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:v h264_nvenc output.mp4
命令中-c:v h264_nvenc
选项指定使用NVIDIA的NVENC进行视频编码,而-hwaccel_output_format cuda
选项指定了使用CUDA格式的硬件加速输出。
End
有关FFmpeg的一些常用命令可以查看FFmpeg(强大的音视频处理工具) - 一些基本实用方法。
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/137449955
相关文章:
FFmpeg - 如何在Linux上安装支持CUDA的FFmpeg
FFmpeg - 如何在Linux(Ubuntu)上安装支持CUDA的FFmpeg 笔者认为现在的很多“xx教程”只讲干什么不讲为什么,这样即使报错了看官也不知道如何解决。 在安装过程的探索部分会记录我的整个安装过程以及报错和报错的解决办法。 在省流之一步到位的方法部分会省去安装过…...

新火种AI|商汤发布下棋机器人元萝卜,率先深入家庭场景。
作者:小岩 编辑:彩云 如今提及生成式AI(AIGC),已经不算什么新鲜产物了。自2014年GAN神经网络出现,2017年Transformer架构演进,再加上2023年ChatGPT的大火,无不说明生成式AI正在有条…...

CSS实现三栏自适应布局(两边固定,中间自适应)
绝对定位的元素会脱离文档流,它们是相对于包含块(通常是最近的具有相对定位、绝对定位或固定定位属性的父元素)进行定位的。当你把一个绝对定位的元素的高度设置为100%时,它会相对于其包含块的高度来确定自己的高度。如果包含块是…...

MoCo 算法阅读记录
论文地址:🐰 何凯明大神之作,通过无监督对比学习预训练Image Encoder的表征能力。后也被许多VLP算法作为ITC的底层算法来使用。 一方面由于源代码本身并不复杂,但是要求多GPU分布式训练,以及需要下载ImageNet这个大规模…...

华为OD机试 - 数组连续和 - 滑动窗口(Java 2024 C卷 100分)
华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…...

微店micro获得微店micro商品详情,API接口封装系列
微店商品详情API接口封装系列主要涉及注册账号、获取API密钥、选择API接口、发送请求以及处理响应等步骤。以下是详细的流程: 请求示例,API接口接入Anzexi58 一、注册账号并获取API密钥 首先,你需要在微店开放平台注册一个账号。注册成功后…...

C语言中的数据结构--链表的应用1(2)
前言 上一节我们学习了链表的概念以及链表的实现,那么本节我们就来了解一下链表具体有什么用,可以解决哪些实质性的问题,我们借用习题来加强对链表的理解,那么废话不多说,我们正式进入今天的学习 单链表相关经典算法O…...
.Net6 使用Autofac进行依赖注入
一、背景 刚接触.net 6,记录一下在.net6上是怎么使用Autofac进行动态的依赖注入的 二、注入方式 1、新建一个webapi项目,框架选择net 6 2、引用Nuget包---Autofac.Extensions.Dependency 3、在Program.cs上添加如下代码 //依赖注入 builder.Host.Us…...

第十二届蓝桥杯省赛真题(C/C++大学B组)
目录 #A 空间 #B 卡片 #C 直线 #D 货物摆放 #E 路径 #F 时间显示 #G 砝码称重 #H 杨辉三角形 #I 双向排序 #J 括号序列 #A 空间 #include <bits/stdc.h> using namespace std;int main() {cout<<256 * 1024 * 1024 / 4<<endl;return 0; } #B 卡片…...

DC40V降压恒压芯片H4120 40V转5V 3A 40V降压12V 车充降压恒压控制器
同步整流恒压芯片在现代电子设备中发挥着重要作用,为各种设备提供了稳定、高效的电源管理解决方案。 同步整流恒压芯片是一种电源管理芯片,它能够在不同电压输入条件下保持输出电压恒定。这种芯片广泛应用于各种电子设备中,如通讯设备、液晶…...

2、Qt UI控件 -- qucsdk项目使用
前言:上一篇文章讲了qucsdk的环境部署,可以在QDesigner和Qt Creator中看到qucsdk控件,这一篇来讲下在项目中使用qucsdk库中的控件。 一、准备材料 要想使用第三方库,需要三个先决条件, 1、控件的头文件 2、动/静态链…...
MATLAB算法实战应用案例精讲-【人工智能】AIGC概念三部曲(三)
目录 前言 算法原理 大模型 什么是AIGC? AIGC和Chat GPT的关系 常见的AIGC应用...

外汇110:外汇交易不同货币类别及交易注意事项!
外汇市场是一个庞大而复杂的市场,其中有各种各样的货币品种。对于外汇投资者来说,了解外汇品种的特性和走势是比较重要的。1. 货币种类 外汇市场中的货币品种可以分为主要货币、次要货币和外围货币。 主要货币:主要指美元、欧元、英镑、日元、…...
gerrit 拉取失败
在浏览器gerrit的设置界面设置的邮箱地址和在命令行使用git config --gloable user.email设置的邮箱地址必须保持一致吗 在浏览器gerrit的设置界面设置的邮箱地址和在命令行使用git config --global user.email设置的邮箱地址并不一定需要保持一致。这两个邮箱地址是独立的&am…...
大数据行业英语单词巩固20240410
20240410 Communication - 沟通 Example: Effective communication is essential for project success. 有效的沟通对于项目的成功至关重要。 Collaboration - 协作 Example: Team collaboration is crucial in achieving our goals. 团队协作对于实现我们的目标至关重要。 …...

天软特色因子看板 (2024.4 第3期)
该因子看板跟踪天软特色因子A05005(近一月单笔流出金额占比(%),该因子为近一月单笔流出金额占比(% 均值因子,用以刻画下跌时的 单成交中可能存在的抄底现象 今日为该因子跟踪第3期,跟踪其在SH000852 (中证1000) 中的表现,要点如下…...

使用QT 开发不规则窗体
使用QT 开发不规则窗体 不规则窗体贴图法的不规则窗体创建UI模板创建一个父类创建业务窗体main函数直接调用user_dialog创建QSS文件 完整的QT工程 不规则窗体 QT中开发不规则窗体有两种方法:(1)第一种方法,使用QWidget::setMask函…...
如何构建企业经营所需的商业智能(BI)能力
构建企业经营所需的商业智能(BI)能力是一项涉及诸多关键环节与细致考量的系统工程,通过科学的数据处理、分析与应用,赋能企业实现精准决策,提升运营效率,优化业务流程,并在竞争激烈的市场环境中…...

【vue】watch监听取不到this指向的数?
今天同事问我,watch里this指向的数值,别的地方却可以打印出来。工具也能看到数值,但打印出来却是undifined,先看看代码: 懒得打字了直接上截图吧 ps: 在Vue组件中,如果你在watch选项中访问this…...

Ubuntu-22.04安装VMware虚拟机并安装Windows10
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VMware是什么?二、安装VMware1.注册VMware账号2.下载虚拟机3.编译vmmon&vmnet4.加载module5.安装bundle 三、安装Windows101.基础配置2.进阶…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...