ffmpeg学习 源代码编译、英伟达硬件加速

这篇具有很好参考价值的文章主要介绍了ffmpeg学习 源代码编译、英伟达硬件加速。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用cpu进行软编解码时,cpu效率低并且占用高。使用硬件加速,能够明显降低CPU的占用,参看博客 ffmpeg学习(16)AVDevice使用。 这里以使用英伟达gpu进行h264编解码加速为例说明,其他平台类似。

1、winodws硬件加速支持

在windows平台直接下载官方的预编译ffmpeg、lib开发包,都已经支持了英伟达显卡硬件加速。使用命令ffmpeg.exe -hide_banner true -codecs |findstr h264,查询结果如下
ffmpeg学习 源代码编译、英伟达硬件加速
可以看到英伟达硬件支持的解码器有 h264_cuvid,编码器有h264_nvenc、nvenc_h264、nvenc。

2、linux下硬件加速支持

使用sudo apt get install ffmpeg后是默认不支持的硬件加速的,查看支持使用命令 ffmpeg -hide_banner true -codecs | grep h264,结果如下
ffmpeg学习 源代码编译、英伟达硬件加速
并没有出现同windows下类似带有nv或者cu字样的的编解码器名称。
为了使用硬件加速功能,需要从源代码进行编译,添加硬件加速支持。

编译ffnvcodec

再nvidia硬件上进行ffmpeg加速,需要准备ffnvcodec。

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

编译环境

sudo apt-get install build-essential yasm cmake libnuma1 libnuma-dev

后面编译ffmpeg源码时可以根据缺少项再安装。

ffmpeg编译

可以使用git命令 git clone https://git.ffmpeg.org/ffmpeg.git /ffmpeg 拉取最新的ffmpeg分支,这里以ffmpeg n4.0.2版本为例
编译与安装命令

./configure --enable-shared --enable-nonfree --enable-cuda-sdk --enable-libnpp \
--extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64 \
--prefix=/home/wanggao/software/FFmpeg-n4.0.2/install

make -j8
sudo make install

其他完整的编译选项

./configure --enable-shared --enable-nonfree --enable-cuda-sdk --enable-libnpp \
--extra-cflags=-I/usr/local/cuda/include \
--extra-ldflags=-L/usr/local/cuda/lib64 \
--prefix=/home/wanggao/software/FFmpeg-n4.0.2/install \
\
--disable-doc \
--disable-htmlpages \
--disable-podpages \
--disable-txtpages \
--disable-manpages \
\
--enable-gpl \
--enable-libx264 \
--enable-encoder=libx264 \
--enable-decoder=h264 \

注意:上述命令行编译了所有内容,导致编译生成的库较大,可以根据具体情况编译需要的模块。
先使用 –disable-all 禁用所有模块,再添加 –enable-xxxxx 开启xxxxx模块
上面添加了H.264的支持。

编译完成后,再次命令 ffmpeg -hide_banner true -codecs | grep 264 查看支持情况
ffmpeg学习 源代码编译、英伟达硬件加速
这里明显对nvidia的硬件有了特定的编码器 h264_cuvid、解码器nvenc和h264_nvenc。

查看相关编解码器的信息,例如查看解码器h264_cuvid信息,如下
ffmpeg学习 源代码编译、英伟达硬件加速
再查看编码器h264_nvenc的信息(还包含preset、profile、level以及其他更多编码参数),仅列出支持的像素编码,如下图
ffmpeg学习 源代码编译、英伟达硬件加速

3、linux下硬件加速使用、问题解决

在ffmpeg源代码中可以使用 如下代码

AVCodec *enc = avcodec_find_encoder_by_name("h264_nvenc");

AVCodec *dec = avcodec_find_decoder_by_name("h264_cuvid");

正常运行时,发现cpu占用降低,会有gpu的占用。

可能出现的的问题

在编码程序中,设定编码器h264_nvenc,运行程序报错

[h264_nvenc @ 0x7fad9030f100] Driver does not support the required nvenc API version. Required: 11.0 Found: 9.0
[h264_nvenc @ 0x7fad9030f100] The minimum required Nvidia driver for nvenc is 390.25 or newer

这种错误明确提示驱动版本不支持。我们可以在nv-codec-headers/README文件中有要求说明

FFmpeg version of headers required to interface with Nvidias codec APIs.

Corresponds to Video Codec SDK version 11.0.10.

Minimum required driver versions:
Linux: 455.28 or newer
Windows: 456.71 or newer

查看本机的驱动版本已经gpu型号,驱动版本为 418.67, 是低于要求版本的,需要更新驱动。
ffmpeg学习 源代码编译、英伟达硬件加速
但是我们注意到,机器的显卡名称不全。首先使用 lspci | grep -i vga 查看显卡的PCI ID号,为 NVIDIA Corporation Device 1e04 (rev a1)

通过可以通过英伟达显卡PCI ID查询
列表 http://pci-ids.ucw.cz/read/PC/10de
查询 http://pci-ids.ucw.cz/mods/PC/10de?action=help?help=pci
ffmpeg学习 源代码编译、英伟达硬件加速
知道了显卡类型,之后就是去官网下载安装合适版本驱动了。

安装驱动,测试代码,一切OK。文章来源地址https://www.toymoban.com/news/detail-408225.html

到了这里,关于ffmpeg学习 源代码编译、英伟达硬件加速的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • blender源代码编译运行

    其实在blender官网上已经给出了编译步骤https://wiki.blender.org/wiki/Building_Blender/Windows,由于在源码编译的过程中还遇到了很多问题,特此记录一下。 Visual Studio2019或者2022(至少选择【Desktop Development with C++】),我自己是下载的2022版,这里记录了下载的方法及过程https://blog.csdn.net

    2024年02月02日
    浏览(33)
  • Python反编译exe获取封装源代码

    先把exe和pyinstxtractor放在一起 会得到一个文件夹 安装解析库 一共有两个,还有个struct 用sublime打开两个文件,看到一堆二进制,其中struct是多一行的,把struct的第一行复制到前一个文件中 uncompyle6 C:UserslenovoDesktop20223102412-李凌飞exemerge_ALL_ALL_V1.0.exe_extractedmerge_ALL_ALL_V1.0

    2024年01月19日
    浏览(40)
  • mysql源代码编译安装(可自拟版本)

    centOS7 mysql5.6.40为例 关闭防火墙的条件下 1.yum安装 2.rpm查询一下 3.创建mysql用户,用于授权目录 -s /sbin/nologin 不允许用户进行任何交互操作 -M 不要自动创建用户的 home 目录 mysql 为用户名 查看用户是否已经存在 ​在想要指定目录下载 这里我以/opt/mysql为例 1.下载源码 可以换别

    2024年02月14日
    浏览(31)
  • ADSP-21489的开发详解:Norflash的硬件设计及程序烧写详解(含源代码)

    编者的话 Flash 编程与烧写,原本应该是开发的最后一步,当所有程序都做好了,在线编译运行正常,才会通过 Flash 编程,生成二进制的可执行文件 LDR,再通过 JTAG 仿真器将 LDR 文件烧写到 Flash 中,上电 BOOT 实现脱机运行的功能。 我们为何把这个章节安排在第二个阶段,是因

    2023年04月24日
    浏览(28)
  • X86架构下交叉编译arm64源代码

    glibc在/lib(/lib32 /lib64)目录下的.so文件为libc.so.6 glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有

    2023年04月21日
    浏览(40)
  • Java源代码是如何编译,加载到内存中的?

    相信许多开发同学看过《深入理解java虚拟机》,也阅读过java虚拟机规范,书籍和文档给人的感觉不够直观,本文从一个简单的例子来看看jvm是如何工作的吧。 本文所有操作均在mac上进行。 示例代码采用最常见的双重检索单例模式: 经过编译后,我们得到class文件,然后用

    2024年02月13日
    浏览(29)
  • Linux Red Hat 9.0使用源代码编译安装Nginx

    目录 前言 编译安装Nginx源代码 下载安装必须的依赖项(GCC编译器,GNU make工具,PCRE库和zlib库) 创建nginx组和用户账户 进入浏览器,拉取nginx源码(Nginx 1.20.2版本) 上传到Red Hat(此处上传在/home/zyz下) 移动源码到root用户下 解压 进入nginx-1.20.2目录下 检查平台安装环境 执行

    2024年03月10日
    浏览(41)
  • 银河麒麟V10 SP1 ARM编译QT源代码

    最近因为一些事情需要在银河麒麟ARM系统上[银河麒麟V10 SP1 ARM 2203 linux5.4.96-11]安装QT5.12.4版本,由于QT官方不提供ARM版的安装包,无奈只能自己手动编译源代码。 后续补充:实际上我要装的是Qt5.14.2 而不是 5.12.4,不过同样的环境下Qt5.14.2也编译成功了。 这是一篇个人笔记,对

    2024年02月05日
    浏览(48)
  • 【Java可执行命令】(一)编译工具javac:从源代码到字节码,深入解析Java编译工具 javac ~

    Java 编程语言的可执行命令程序 javac 是 Java Development Kit (JDK) 的一部分,旨在将 Java 源代码编译为可执行的字节码文件。 javac 的设计目的是为了支持 Java 的跨平台特性,使开发人员能够编写一次代码,然后在不同的操作系统上运行。 javac 是 Java 编译器的命令行前端,它将 Ja

    2024年02月16日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包