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

编译支持cuda硬件加速的ffmpeg

本来以为很简单,因为印象中自己在windows机器上使用过。

目前的实在一个docker环境下的ubuntu系统里。

官方操作文档

按照官方操作文档Using FFmpeg with NVIDIA GPU Hardware Acceleration - NVIDIA Docs的描述,步骤很简单:

1、安装nv-codec-headers的头文件。

git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers && sudo make install && cd –

2、克隆ffmpeg源代码。

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/

3、安装编译源代码需要的依赖库。

sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev

4、配置编译条件,进行编译安装。

./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared

5、进行测试使用。

可能出问题的坑

但是这里隐含了几个前提条件。

1、nv-codec-headers是有版本对应的,需要根据目标机器上的驱动版本,选择对应的版本。

查看目标机器上的驱动版本可以执行nvidia-smi查看。

nv-codec-headers里的README文件里写了匹配的版本信息。

2、目标机器需要安装CUDA toolkit,这个文档里有写,可以执行nvcc --version查看是否安装成功。

3、配置ffmpeg编译条件的时候,里面包含了两个目录:

/usr/local/cuda/lib64和/usr/local/cuda/include。要确保这两个目录里确实有需要的文件。

笔者就发现目标机器上的/usr/local/cuda/lib64是空的,然后通过:

find / -name 'libcuda*' 命令找到了实际存在libcuda.so文件的目录是:/usr/lib/x86_64-linux-gnu/。

这样就需要替换掉编译条件里的目录。

4、启动docker的命令里需要把宿主机的视频能力赋予docker容器。

--gpus 'all,"capabilities=compute,video,utility"'

参考文档:https://www.cnblogs.com/azureology/p/18290262

User Guide — container-toolkit 1.10.0 documentation

最后所有依赖和路径设置正确以后。执行./configure的完整命令。会输出完整支持的编码解码器信息,注意看是否包含h264_nvenc。如果包含了就证明设置正确了。

http://www.lryc.cn/news/594647.html

相关文章:

  • cuda编程笔记(9)--使用 Shared Memory 实现 tiled GEMM
  • Linux进程核心机制:状态、优先级与上下文切换详解
  • 亚马逊自养号测评实战指南:从环境搭建到安全提排名
  • 微信小程序服务端快速对接指南(java版)
  • 添加状态信息
  • Docker实践:使用Docker部署blog轻量级博客系统
  • Python Matplotlib中的fontdict参数说明
  • 前后端分离项目进阶1---后端
  • 易语言+懒人精灵/按键中控群控教程(手机、主板机、模拟器通用)
  • 子网划分核心原理 (网络原理1)
  • Windows Server2022下使用SQL Server2019开发版搭建高可用集群
  • 如何用纯 HTML 文件实现 Vue.js 应用,并通过 CDN 引入 Element UI
  • 【js(3)】执行上下文/作用域链/垃圾回收与内存泄漏/闭包
  • Vue组件之间通信
  • C语言运算符优先级“潜规则”
  • 数据库的介绍和安装
  • HTTP,HTTPS
  • 文件的写出操作|文件的追加写入操作|文件操作的综合案例
  • mac安装node的步骤
  • IDEA 同时修改某个区域内所有相同变量名
  • 跑腿小程序|基于微信小程序的跑腿平台小程序设计与实现(源码+数据库+文档)
  • Taro 生命周期相关 API 详解
  • Idea或Pycharm上.idea的忽略提交的问题总结
  • Linux初识网络
  • 用 STM32 的 SYSTICK 定时器与端口复用重映射玩转嵌入式开发
  • 分布在内侧内嗅皮层(MEC)的带状细胞对NLP中的深层语义分析有什么积极的影响和启示
  • 微服务的编程测评系统-身份认证-管理员登录前端
  • .NET依赖注入IOC你了解吗?
  • 智能体性能优化:延迟、吞吐量与成本控制
  • 机器阅读理解(MRC)全面解析:任务分类、评估指标与57个数据集资源盘点