【并行计算与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 若配置不同,请谨慎参考本文. ...
随机推荐
- python协程初步---一个生成器的实现
和列表那种一下占据长度为n的内存空间不同的是,生成器在调用的过程中逐步占据内存空间,因此有着很大的优势 一个斐波纳契数列的例子 def myfibbo(num): a,b=, count= while ...
- 洛谷P1144 最短路计数【堆优化dijkstra】
题目:https://www.luogu.org/problemnew/show/P1144 题意:问1到各个节点的最短路有多少条. 思路:如果松弛的时候发现是相等的,说明可以经过该点的最短路径到达当 ...
- 基本操作-MySQL
创建: 主键约束: 单字段: id int(11) primary key 或者 primary key(id) 多字段: primary key(id,name) 外键约束: constraint ...
- Vue项目开发最新、最全代码规范文档
Vue项目开发最新.最全代码规范文档 2019年02月21日 10:43:49 yw00yw 阅读数 337 一. 目录结构 |— build 构建脚本目录 |— build.js 生产环境构建( ...
- Eclipse 调试 darknet 代码
一.准备 1. 安装Java8 我们采用Eclipse Neon版本的IDE,所以需要Java8的运行环境,下面为安装Java8的命令,如下所示: sudo add-apt-repository pp ...
- 数据结构实验之栈与队列四:括号匹配(SDUT 2134)
#include <bits/stdc++.h> using namespace std; typedef long long ll; char s[100]; char a[100]; ...
- DUILib学习笔记---消息处理
WIN32下窗口消息循环 MSG msg = { 0 }; while( ::GetMessage(&msg, NULL, 0, 0) ) { ::TranslateMessage(& ...
- 分页——为Mybatis配置PageHelper
1.pom.xml追加 pagehelper : 4.1.4 2.mappers.xml中追加 <plugins> <plugin interceptor="com.git ...
- python 识别鼠标左键点击
#coding=utf- import pyHook import pythoncom # 监听到鼠标事件调用 def onMouseEvent(event): if(event.MessageNam ...
- 利用python获取自己的qq群成员信息
利用python获取自己的qq群成员信息! 首先说明一下需要使用的工具以及技术:python3 + selenium selenium安装方法:pip install selenium 前提:获取自己 ...