引言

前面有水另外两篇不同的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硬件加速编译相关推荐

  1. FFMPEG NVIDIA硬件加速总结

    目录 1.NVDIA概述 2.FFmpeg集成到GPU 3.FFmpeg uses Video Codec SDK 4.ffmpeg对NVIDIA GPU的编译步骤 4.1configure命令 4. ...

  2. 使用 ffmpeg 转码 视频 (使用 nvidia 硬件加速 和 h265 编码)

    原来使用 staxrip 的 nvidia加速 转码一堆录像到 x265,码率大概为2000,画质很渣,虽然也许很大一部分是我不会调或者调错参数的原因 orz. 使用 libx265 编码质量很好,但 ...

  3. FFmpeg再学习 -- 硬件加速编解码

    为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...

  4. FFmpeg实现dxva2硬件加速

    原文地址:https://www.cnblogs.com/betterwgo/p/6125507.html Direct3D device manager,链接:http://www.cnblogs. ...

  5. ffmpeg Nvidia硬件加速总结

    0. 概述 FFmpeg可通过Nvidia的GPU进行加速,其中高层接口是通过Video Codec SDK来实现GPU资源的调用.Video Codec SDK包含完整的的高性能工具.源码及文档,支 ...

  6. Windows上ffmpeg使用GPU硬件加速多路rtsp转HLS直播流

    项目需要接入20多路rtsp转hls视频流,机器的CPU为i9-10900,显卡为P2200. CPU转码 最开始测试使用脚本: start ./ffmpeg -i rtsp://<账号> ...

  7. nvidia显卡加速matlab,利用nvidia cuda加速simulink S-function

    本帖最后由 蓝云风翼 于 2010-9-15 21:54 编辑 #define S_FUNCTION_NAME simuCuda /* Defines and Includes */ #define ...

  8. matlab外接显卡,利用nvidia CUDA加速MATLAB运算

    星期六早上去参加了旅英侨界运动会,认识了不少好朋友,也第一次听说了NVidia的CUDA,可以用GPU运算!NV牌八系列以上的芯片组就可以用!我的F8SV完全OK阿!据说利用GPU可以大幅缩短MATL ...

  9. [FFMPEG硬件加速]nvidia方案

    1.目标 <1>显卡性能参数: <2>方案可行性: 2.平台信息 2.1.查看当前显卡信息 命令:  lspci |grep VGA  信息:  01:00.0 VGA com ...

最新文章

  1. SqlServer数据库基础知识整理(不断更新~)
  2. python代码画简单图-python绘制简单彩虹图
  3. List------Linked 链表
  4. 49字母异位词分组(哈希表)
  5. php简述一下并集交集差集,总结了一下js中的差集、交集、并集
  6. hbase shell-dml(数据管理指令)
  7. SAP CRM WebClient UI CL_BSP_MESSAGES
  8. exec su-exec_WildFly Kubernetes exec探针
  9. 怎么格式化电脑_U盘格式化后数据能恢复吗?人人都能学会的恢复方法!
  10. 寄存器是中央处理器内的组成部分
  11. qq数据泄露_有哪些良好的上网习惯,可以避免隐私泄露?
  12. batch入门教程(3)
  13. OpenCV:读取与写入图片
  14. IS-IS详解(十七)——IS-IS 区域迁移与路由汇总
  15. Linux系统进程优化理论与方法
  16. gyb优化事项(1)
  17. uboot启动流程详细分析(基于i.m6ull)
  18. Python爬虫与信息提取(八)将新浪热搜排名导入数据库
  19. 简单总结协程Coroutine及Yield常见用法
  20. 业务架构 -- 序列4 -- 圈定边界(利益相关者分析)

热门文章

  1. 基于matlab计算aom衍射效率,实验七激光位相调制光谱特性检测-华东师范大学.ppt...
  2. Django中os.environ.setdefault(DJANGO_SETTINGS_MODULE, xxxx.settings)
  3. 【List<Map<String, Object>>】记录一次树形遍历方法
  4. 【JavaScript】isNaN 和 Number.isNaN 函数的区别?
  5. 教你如何锁定移动硬盘盘符
  6. WordPress 更换域名后访问后台跳转老域名解决办法
  7. python带你采集各种表情包,做群里最靓的崽~
  8. 大数据,大智慧,大未来
  9. Python pyecharts Bar图
  10. charles抓包工具的使用