ffmpeg利用NVIDIA硬件加速编译
引言
前面有水另外两篇不同的ffmpeg编译的博文,主要是针对不同的命令与相关的调用形式,如果只是在shell命令下直推视频,普通编译加搭建srs3就好了,而如果是需要配合python或者其它编程语言,这时候还要加上libx264、yasm等进行兼容,提高效率,前面两篇链接如下:
ffmpeg源码带libx264安装并用ffplay推流测试
ffmpeg与srs3编译以及常用命令测试总结
NVIDIA驱动检查
这里需要检查的东西是cuda和cudnn是否已经安装成功并适配显卡驱动,具体的安装与测试方法我在之前的文章有说明:
Linux下从0开始GPU环境搭建与启动测试
确认无误后就进入下一步。
ffmpeg安装
首先检查一下当前系统是否依赖都齐全了,如果要使用yasm汇编编译器、libx264 H.264视频编码器是否都有,相关的依赖还可以再用命令检查一遍:
sudo apt install libfdk-aac-dev libmp3lame-dev libx264-dev libx265-dev libsdl2-dev
在有ffmpeg解压好的文件夹的前提下,我们还需要进入ffmpeg文件夹下拉取NVIDIA的nvidia codec头文件,这是ffmpeg开启GPU必不可少的一个文件库,我们需要拉取下来并进行编译:
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
make
sudo make install
确保无误后进入ffmpeg的重新编译。
如果时间比较多,推荐看看NVIDIA官方出品的Using_FFmpeg_with_NVIDIA_GPU_Hardware_Acceleration.pdf,基本上所有博客或者安装笔记都是照着这个PDF在安装,只不过最后的configure方式不同,NVIDIA只给了一个通用格式,下图为PDF中它介绍的版本:
这里我的编译命令与方式如下:
# PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
./configure --prefix=/usr/local/ffmpeg --enable-cuda-nvcc --enable-cuvid --enable-shared --enable-nvenc --enable-shared --extra-libs=-lpthread --extra-libs=-lm --enable-gpl --enable-libx264 --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-nonfreemake -j8
make install
如果提示找不到依赖库找不到安装目录,上述configure中还需加上PKG_CONFIG_PATH=/usr/local/lib/pkgconfig放在configure前,否则会报错为ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec。具体的原理可以网上搜索 configure, pkg-config , PKG_CONFIG_PATH这三者直接的关系,我这里就不再赘述。编译的时候开启多进程为8个,这样速度会快很多,因为ffmpeg只要configure不报错,基本上make不会出现问题。
上面具体的编译参数可以查看我下面列举的表格,在这里做个记录:
命令 |
帮助信息 |
--help |
显示此帮助信息|print this message |
--log[=FILE|yes|no] |
记录测试并输出到config.err文件|log tests and output to FILE [config.err] |
--prefix=PREFIX |
安装程序到指定目录(默认/usr/local)|install in PREFIX [/usr/local] |
--libdir=DIR |
安装库到指定目录(默认prefix/lib)|install libs in DIR [PREFIX/lib] |
--shlibdir=DIR |
指定共享库路径(默认prefix/lib)|install shared libs in DIR [PREFIX/lib] |
--incdir=DIR |
指定includes路径(默认prefix/include/ffmpeg)|install includes in DIR[PREFIX/include/ffmpeg] |
--mandir=DIR |
指定man page路径(默认prefix/man)install man page in DIR [PREFIX/man] |
--enable-mp3lame |
启用mp3编码libmp3lame(默认关闭)enable MP3 encoding via libmp3lame[default=no] |
--enable-libogg |
启用ogg支持libogg(默认关闭)enable Ogg support via libogg [default=no] |
--enable-vorbis |
启用Vorbis支持libvorbis(默认关闭)enable Vorbis support via libvorbis [default=no] |
--enable-faad |
启用faad支持libfaad(默认关闭)enable FAAD support via libfaad [default=no] |
--enable-faadbin |
启用faad运行时链接支持(默认关闭)build FAAD support with runtime linking[default=no] |
--enable-faac |
启用faac支持libfaac(默认关闭)enable FAAC support via libfaac [default=no] |
--enable-libgsm |
启用GSM支持libgsm(默认关闭)enable GSM support via libgsm [default=no] |
--enable-xvid |
启用xvid支持xvidcore(默认关闭)enable XviD support via xvidcore [default=no] |
--enable-libx264 |
启用H.264编码(默认关闭)enable H.264 encoding via x264 [default=no] |
--enable-mingw32 |
启用MinGW本地/交叉win环境编译|enable MinGW native/cross Windows compile |
--enable-mingwce |
启用MinGW本地/交叉winCE环境编译enable MinGW native/cross WinCE compile |
--enable-a52 |
启用A52支持(默认关闭)enable GPLed A52 support [default=no] |
--enable-a52bin |
启用运行时打开liba52.so.0(默认关闭)open liba52.so.0 at runtime [default=no] |
--enable-dts |
启用DTS支持(默认关闭)enable GPLed DTS support [default=no] |
--enable-pp |
启用后加工支持(默认关闭)enable GPLed postprocessing support [default=no] |
--enable-static |
构建静态库(默认启用)build static libraries [default=yes] |
--disable-static |
禁止构建静态库(默认关闭)do not build static libraries [default=no] |
--enable-shared |
构建共享库(默认关闭)build shared libraries [default=no] |
--disable-shared |
禁止构建共享库(默认启用)do not build shared libraries [default=yes] |
--enable-amr_nb |
启用amr_nb float音频编解码器|enable amr_nb float audio codec |
--enable-amr_nb-fixed |
启用fixed amr_nb codec | use fixed point for amr-nb codec |
--enable-amr_wb |
启用amr_wb float音频编解码器|enable amr_wb float audio codec |
--enable-amr_if2 |
启用amr_wb IF2音频编解码器|enable amr_wb IF2 audio codec |
--enable-sunmlib |
启用Sun medialib(默认关闭)| use Sun medialib [default=no] |
--enable-pthreads |
启用pthreads(多线程)(默认关闭)use pthreads [default=no] |
--enable-dc1394 |
启用libdc1394、libraw1394抓取IIDC-1394(默认关闭)enable IIDC-1394 grabbing using libdc1394 and libraw1394 [default=no] |
--enable-swscaler |
启用计数器支持?(默认关闭)software scaler support [default=no] |
--enable-avisynth |
允许读取AVISynth脚本本件(默认关闭)allow reading AVISynth script files [default=no] |
--enable-gpl |
允许使用GPL(默认关闭)allow use of GPL code, the resulting libav* and ffmpeg will be under GPL [default=no] |
编译成功后,我们可以进行测试,命令为:
ffmpeg -hwaccels# 查看硬解码器
ffmpeg -codecs | grep cuvid# 查看硬编码器
ffmpeg -codecs | grep nvenc
看见有cuda和cuvid即为成功。
而如果看前面的第一篇文章,装了srs的话就能进行本地推流测试了:
ffmpeg -hwaccel cuvid -c:v h264_cuvid -rtsp_transport tcp -i "rtsp://admin:admin@127.0。0.1:1935/H264?channel=1&subtype=0&unicast=true&proto=Onvif/video
" -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y /home/2.mp4
ffmpeg利用NVIDIA硬件加速编译相关推荐
- FFMPEG NVIDIA硬件加速总结
目录 1.NVDIA概述 2.FFmpeg集成到GPU 3.FFmpeg uses Video Codec SDK 4.ffmpeg对NVIDIA GPU的编译步骤 4.1configure命令 4. ...
- 使用 ffmpeg 转码 视频 (使用 nvidia 硬件加速 和 h265 编码)
原来使用 staxrip 的 nvidia加速 转码一堆录像到 x265,码率大概为2000,画质很渣,虽然也许很大一部分是我不会调或者调错参数的原因 orz. 使用 libx265 编码质量很好,但 ...
- FFmpeg再学习 -- 硬件加速编解码
为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...
- FFmpeg实现dxva2硬件加速
原文地址:https://www.cnblogs.com/betterwgo/p/6125507.html Direct3D device manager,链接:http://www.cnblogs. ...
- ffmpeg Nvidia硬件加速总结
0. 概述 FFmpeg可通过Nvidia的GPU进行加速,其中高层接口是通过Video Codec SDK来实现GPU资源的调用.Video Codec SDK包含完整的的高性能工具.源码及文档,支 ...
- Windows上ffmpeg使用GPU硬件加速多路rtsp转HLS直播流
项目需要接入20多路rtsp转hls视频流,机器的CPU为i9-10900,显卡为P2200. CPU转码 最开始测试使用脚本: start ./ffmpeg -i rtsp://<账号> ...
- nvidia显卡加速matlab,利用nvidia cuda加速simulink S-function
本帖最后由 蓝云风翼 于 2010-9-15 21:54 编辑 #define S_FUNCTION_NAME simuCuda /* Defines and Includes */ #define ...
- matlab外接显卡,利用nvidia CUDA加速MATLAB运算
星期六早上去参加了旅英侨界运动会,认识了不少好朋友,也第一次听说了NVidia的CUDA,可以用GPU运算!NV牌八系列以上的芯片组就可以用!我的F8SV完全OK阿!据说利用GPU可以大幅缩短MATL ...
- [FFMPEG硬件加速]nvidia方案
1.目标 <1>显卡性能参数: <2>方案可行性: 2.平台信息 2.1.查看当前显卡信息 命令: lspci |grep VGA 信息: 01:00.0 VGA com ...
最新文章
- SqlServer数据库基础知识整理(不断更新~)
- python代码画简单图-python绘制简单彩虹图
- List------Linked 链表
- 49字母异位词分组(哈希表)
- php简述一下并集交集差集,总结了一下js中的差集、交集、并集
- hbase shell-dml(数据管理指令)
- SAP CRM WebClient UI CL_BSP_MESSAGES
- exec su-exec_WildFly Kubernetes exec探针
- 怎么格式化电脑_U盘格式化后数据能恢复吗?人人都能学会的恢复方法!
- 寄存器是中央处理器内的组成部分
- qq数据泄露_有哪些良好的上网习惯,可以避免隐私泄露?
- batch入门教程(3)
- OpenCV:读取与写入图片
- IS-IS详解(十七)——IS-IS 区域迁移与路由汇总
- Linux系统进程优化理论与方法
- gyb优化事项(1)
- uboot启动流程详细分析(基于i.m6ull)
- Python爬虫与信息提取(八)将新浪热搜排名导入数据库
- 简单总结协程Coroutine及Yield常见用法
- 业务架构 -- 序列4 -- 圈定边界(利益相关者分析)
热门文章
- 基于matlab计算aom衍射效率,实验七激光位相调制光谱特性检测-华东师范大学.ppt...
- Django中os.environ.setdefault(DJANGO_SETTINGS_MODULE, xxxx.settings)
- 【List<Map<String, Object>>】记录一次树形遍历方法
- 【JavaScript】isNaN 和 Number.isNaN 函数的区别?
- 教你如何锁定移动硬盘盘符
- WordPress 更换域名后访问后台跳转老域名解决办法
- python带你采集各种表情包,做群里最靓的崽~
- 大数据,大智慧,大未来
- Python pyecharts Bar图
- charles抓包工具的使用