【并行计算与CUDA开发】英伟达硬件加速解码器在 FFMPEG 中的使用
这篇文档介绍如何在 ffmpeg 中使用 nvenc 硬件编码器。
私有驱动
nvenc
本身是依赖于 nvidia
底层的私有驱动的,所以想要使用编码器首先需要安装 nvidia
的私有驱动。在 NVIDIA
VIDEO CODEC SDK 的介绍中说明,最新版本的 nvenc sdk 5.0
在 Linux 需要
346.22 以上的驱动,在windwos 下则需要 347.07 以上的驱动
The latest NVENC SDK version available is 5.0, which requires NVIDIA GPUdriver 347.09 or above for Windows and 346.22 or above for Linux.
目前 Ubuntu 15.04 上的驱动满足这个要求,Windows 平台可以直接到官网上下载最新的驱动安装。(个人不建议去官网下载最新的 Linux 驱动,因为我试了很多次都没有安装成功,最终会导致无法进入系统)。
在 Ubuntu 15.04 下使用下面的命令安装最新的驱动。
sudo apt-get install nvidia-346 \
nvidia-346-vum \
nvidia-modprobe \
nvidia-opencl-icd-346 \
nvidia-prime \
nvidia-settings
注意 nvidia-modprobe
必须要安装,因为私有驱动使用的内核模块,需要安装这个包在系统启动的时候加载这些内核模块。安装完成之后可能无法进入系统,这个应该是 nvidia
中的一个 BUG
,你可以重启之后选择 grub
中的 ubuntu
中低版本的内核进入系统之后重启再选择高版本的内核进入系统。这一点非常的诡异,目前没有找到原因。
高级 选项
启动系统之后使用 lsmod | grep nvidia
应该会得到类似下面的结果:
nvidia_uvm 69632 0
nvidia 8380416 36 nvidia_uvm
drm 348160 7 i915,drm_kms_helper,nvidia
直接通过 sudo modprobe nvidia_uvm
好像也无法成功的加载需要的模块。
另外安装驱动安装完成之后会在 /dev 下面创建几个和 nvidia
相关的设备,通过ls
应该会得到类型以下的结果:
/dev/nvidia*
/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm
编译 FFMPEG
要想在 FFMPEG 中使用 nvenc
编码器,你需要在编译选项中加入 enable-nvenc
选项。这个选项依赖于 nvEncodeAPI.h
头文件,这个头文件并没有包含在私有驱动中,你需要到 NVIDIA
VIDEO CODEC SDK 中下载 SDK,解压后在Samples/common/inc
目录下有这个头文件,把它拷贝到可以链接到的目录中去。
之后编译就可以顺利的通过,得到包含 nvenc
编码器的库。
使用 nvenc
FFMPEG 中直接使用 av_find_encoder_by_name("nvenc")
就可以找到这个这个编码器并使用它。nvenc.c
的 pix_fmts_nvenc
变量定义来看,这个编码器应该是支持 YUV420P
, YUV444P
和 NV12
三种格式的,但是测试的过程中发现YUV420P
没办法使用,所以应该吧 AVCodecContext
的 pix_fmt
设置成NV12
。
【并行计算与CUDA开发】英伟达硬件加速解码器在 FFMPEG 中的使用的更多相关文章
- 【并行计算与CUDA开发】英伟达硬件加速编解码
硬件加速 并行计算 OpenCL OpenCL API VS SDK 英伟达硬件编解码方案 基于 OpenCL 的 API 自己写一个编解码器 使用 SDK 中的编解码接口 使用编码器对于 OpenC ...
- 【并行计算-CUDA开发】英伟达硬件解码器分析
这篇文章主要分析 NVCUVID 提供的解码器,里面提到的所有的源文件都可以在英伟达的 nvenc_sdk 中找到. 解码器的代码分析 SDK 中的 sample 文件夹下的 NvTranscoder ...
- CUDA学习笔记4:CUDA(英伟达显卡统一计算架构)代码运行时间测试
CUDA内核运行时间的测量函数 cudaEvent_t start1; cudaEventCreate(&start1); cudaEvent_t stop1; cudaEventCreate ...
- CUDA学习笔记2:CUDA(英伟达显卡统一计算架构)与已有的VS项目结合
一.步骤 1.先新建一个简单的控制台应用程序,项目名称为Mytest,如下图所示: 2.在项目中添加一个名为Test.cu文件,如下图所示: 3.在解决方案资源管理器中选择该项目并点击右键,在弹出的菜 ...
- 【视频开发】【CUDA开发】英伟达CUVID硬解,并通过FFmpeg读取文件
虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...
- 不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题
2006年,机器学习界泰斗Hinton,在Science上发表了一篇使用深度神经网络进行维数约简的论文 ,自此,神经网络再次走进人们的视野,进而引发了一场深度学习革命.深度学习之所以如此受关注,是因为 ...
- 英伟达CUVID硬解,并通过FFmpeg读取文件
虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...
- 【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南
举报 说到显卡,就不免令人想到英伟达和AMD两家面向个人消费级和企业级最大的显示芯片生产企业,英伟达和AMD,今天小编为大家简单的介绍一下英伟达的显卡选购方面的攻略,为一些想要购买显卡的用户提供一些参 ...
- 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )
前言 本文讲解如何在VS 2010开发平台中搭建CUDA开发环境. 当前配置: 系统:WIN7 64位 开发平台:VS 2010 显卡:英伟达G卡 CUDA版本:6.0 若配置不同,请谨慎参考本文. ...
随机推荐
- ubuntu 服务器添加新磁盘
原文 Linux系统扩容根目录磁盘空间的操作方法 这篇文章主要介绍了Linux系统扩容根目录磁盘空间的操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 一.使用背景 Linux根目录磁 ...
- 组件化网页开发 / 步骤一 · 4-4 匹配HTML标签
组件化网页开发 / 步骤一 · 4-4 匹配HTML标签
- E:last-child
E:last-child 语法: E:last-child { sRules } 说明: 匹配父元素的最后一个子元素E.大理石平台厂家大理石平台厂家 要使该属性生效,E元素必须是某个元素的子元素,E的 ...
- npm install命令
1. --save-prod/-P 使用该命令后,会在package.json的dependencies中出现,是生产环境依赖: 该命令是默认命令. npm install react // 等同于 ...
- Activiti服务类- RepositoryService服务类
Activity服务类-1 RepositoryService服务类一共47个接口1.创建部署//开始创建一个新的部署.DeploymentBuilder createDeployment(); 2. ...
- RabbitMq、ActiveMq、Kafka和Redis做Mq对比
转载自:https://blog.csdn.net/qiqizhiyun/article/details/79848834 一.RabbitMq RabbitMQ是一个Advanced Message ...
- harbor 私有镜像仓库使用
使用harbor私有镜像仓库 登录镜像仓库reg.lvusyy.com docker login reg.lvusyy.com [centos@k8smaster ~]$ sudo docker lo ...
- 内存管理2-@class关键字
Review: 给对象发送消息,进行相应的计数器操作. Retain消息:使计数器+1,改方法返回对象本身 Release消息:使计数器-1(并不代表释放对象) retainCount消息:获得对象当 ...
- Linux 修改文件夹的用户组权限
将ubsadm文件夹所属用户修改为userschown -R ubsadm:users /home/ubsadm 此命令将用户123的用户组改为rootusermod -g 123 root
- Js 中那些 隐式转换
曾经看到过这样一个代码: (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]*~+[]]] = sb , 你敢相信, ...