当前位置: 首页 > news >正文

ffmpeg+intel核显实现硬解码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、前言
  • 二、检查方法
    • 1.图形法
    • 2.nvidia-smi
    • 3.intel-gpu-tools
  • 三、安装使用
    • 1.libva-dev
    • 2.libva-utils
    • 3.编译安装
    • 4.测试
      • 1.vainfo
      • 2.ffmpeg测试解码
  • 总结


前言

之前写了一篇关于ffmpeg+nvcuvid实现硬解码的文章,最近得到一个只有intel集显的笔记本电脑,cpu是比较垃圾的5200U,核显是HD5500,也是个有年头的老爷机了吧。

因为intel解码没有nvidia那么热门,以目前只研究出来解码,暂时没研究出来编码。


一、前言

还是由于nvidia在AI领域的地位,导致目前生态很好,使用起来也几乎没有什么障碍,可以说是最简单的了。相比来讲amd和intel在这些领域就冷门了,好多东西搞起来不是那么容易。

这篇文章不解决驱动的问题,我使用的Ubuntu版本是22.04,本身已经自带集显驱动了,目前集显工作正常。如果,你的集显不能正常工作,那就不要继续往下看了,因为这篇文章不解决集显驱动的问题,也不针对amd设备。

二、检查方法

接下来我就教你通过几个简单的命令检查集显是不是正常工作了。实际上,我的电脑还带一个Nvidia GT 920M的独显,这个有年头的显卡,性能垃圾不说,还不带硬件编解码,实在是坑死。

检查intel显卡也很简单,下面说几个方法:

1.图形法

如果你装的是Desktop版,你直接在Settings->About里面看就行了。

在这里插入图片描述
因为我装了Nvidia的驱动,所以独显也显示出来了,后面那个就是集显。

2.nvidia-smi

这个属于排除法,如果你和我一样装了独显驱动(有独显),你只要切换集显显示,那么独显就罢工了,不会用来渲染桌面,只会用来承担AI的任务。一般建议配置下,相当于让Nvidia的独显完全解放出来,最大化为AI服务。

nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.199.02   Driver Version: 470.199.02   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:04:00.0 N/A |                  N/A |
| N/A   43C    P8    N/A /  N/A |      5MiB /  2004MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

No running processes found,这句话说明独显没有承担渲染桌面的任务,要不然程序列表会出现"Xorg"的字样,Ubuntu叫Xorg,其它它发行版可能不叫Xorg,我没有一个个测试过,感兴趣的请自行测试。

3.intel-gpu-tools

这个也是最规范的方法,监控Intel的GPU首要就是安装驱动,要不然这个工具是肯定不工作的,而且不用刻意指定具体设备,属于自行检测集显了。

Ubuntu默认是没有安装的,可以使用下面的命令安装:

sudo apt update
sudo apt install intel-gpu-tools

使用起来也简单:

sudo intel_gpu_top

就和top命令一样,每隔一段时间刷新一次。

在这里插入图片描述

主要看Video这一项,如果你的核显参与硬件编解码,Video就会被占用,还可以看到占用比例。

三、安装使用

在开始和ffmpeg结合之前,我们还需要安装几个必要的支持库,请继续往下看。

1.libva-dev

因为后面要本机编译,所以要安装开发环境。

咱们先看下这个库的描述:

apt info libva-dev

输出:

Package: libva-dev
Version: 2.14.0-1
Priority: optional
Section: universe/libdevel
Source: libva
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 720 kB
Provides: dh-sequence-libva
Depends: libva-drm2 (= 2.14.0-1), libva-glx2 (= 2.14.0-1), libva-wayland2 (= 2.14.0-1), libva-x11-2 (= 2.14.0-1), libva2 (= 2.14.0-1), libwayland-dev, libset-scalar-perl
Homepage: https://01.org/linuxmedia/vaapi
Download-Size: 115 kB
APT-Manual-Installed: yes
APT-Sources: http://mirrors.aliyun.com/ubuntu jammy/universe amd64 Packages
Description: Video Acceleration (VA) API for Linux -- development filesVideo Acceleration API (VA API) is a library ("libVA") and API specificationwhich enables and provides access to graphics hardware (GPU) acceleration forvideo processing on Linux and UNIX based operating systems. Acceleratedprocessing includes video decoding, video encoding, subpicture blending andrendering. The specification was originally designed by Intel for its GMA(Graphics Media Accelerator) series of GPU hardware, the API is however notlimited to GPUs or Intel specific hardware, as other hardware and manufacturerscan also freely use this API for hardware accelerated video decoding..This package provides the development environment for libva.

我简单翻译下:这个事Linux和Unix系统上的一个视频加速库,是Intel为自家的GPU中带的图形媒体加速器设计的API,但它是开源的,不限于用在Intel的GPU上,AMD和Nvidia都可以去实现这个API从而支持硬件加速。

主要看下Description,如果你是初学者就干脆不要看了,直接用,等有时间了再研究。

sudo apt update
sudo apt install libva-dev

2.libva-utils

这个工具在Ubuntu的官方源里是没有的,但是OpenBSD和Fedora居然有,搞不明白为什么Ubuntu不给。但是不要急,我们自己编译。

git clone https://gitee.com/anold/libva-utils.git

关于分支的选择我多提一嘴,我一开始拉的是master,由于版本很新编译直接报错,大致意思是av1编码报错。我去查了下,我的老古董肯定不支持av1的,当然最新的核显可能支持av1,这个需要去Intel额官网查下。

如果你不能确定,或者你的核显很新,你可以编译master,不报错就对了,报错的话就降版本,选一个早期的版本重新编译即可。

我用的是2.10版本,解码可以,编码我没有需要,所以就没有细测。

3.编译安装

前面下载源代码之后进入编译安装阶段。

./autogen.sh #会编译测试程序
./autogen.sh -Denable-tests #不会编译测试程序
make -j4 #程序不大,不需要太多线程
sudo make install

4.测试

1.vainfo

vainfo是libva-utils里面的自带工具,可以看到自己的核显支持哪些格式。

先测试你的核显支持什么样的格式:

vainfo --display drm --device /dev/dri/card0

一般核显都应该是card0,成功的话显示结果,下面是我的结果:

libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.14 (libva 2.14.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.3.1 ()
vainfo: Supported profile and entrypointsVAProfileMPEG2Simple            : VAEntrypointVLDVAProfileMPEG2Main              : VAEntrypointVLDVAProfileH264Main               : VAEntrypointVLDVAProfileH264High               : VAEntrypointVLDVAProfileJPEGBaseline           : VAEntrypointVLDVAProfileH264ConstrainedBaseline: VAEntrypointVLDVAProfileVP8Version0_3          : VAEntrypointVLD

我的这张卡是不支持H265和AV1的,支持VP8但是不支持VP9。

2.ffmpeg测试解码

这个需要辅助于前面的intel_gpu_top工具,通过ffmpeg解码一个视频并监控对核显解码器的占用情况。

先打开一个终端,运行intel_gpu_top开始监测:

sudo intel_gpu_top

另开一个终端,执行ffmpeg的解码程序

ffmpeg -vcodec h264_qsv -an -i <你的视频> -f mp4 -y output.mp4

-vcodec:指定Intel的解码器
-an:不要声音
-f:输出格式

返回第一个终端,查看Video占用情况:
在这里插入图片描述
Video对应硬件编解码单元。


总结

1、总体比Nvidia难一点点
2、有问题请评论,我会收到邮件提醒

相关文章:

ffmpeg+intel核显实现硬解码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前言二、检查方法1.图形法2.nvidia-smi3.intel-gpu-tools 三、安装使用1.libva-dev2.libva-utils3.编译安装4.测试1.vainfo2.ffmpeg测试解码 总结 前言 之…...

电脑开机出现Boot Device怎么办?

开机出现Boot Device这个问题很常见&#xff0c;有时还会出现No Boot Device的问题&#xff0c;虽然多了一个单词&#xff0c;但意思是相同的&#xff0c;这些问题说明你的系统盘出现了问题&#xff0c;或者是引导出现了问题。这该如何解决呢&#xff1f; 方法1. 检查主板或硬盘…...

面试题. 一次编辑

字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串&#xff0c;编写一个函数判定它们是否只需要一次(或者零次)编辑。 示例 1: 输入: first "pale" second "ple" 输出: True 示例 2: 输入: first &…...

Unity悬浮显示提示内容

在编写unity时&#xff0c;需要实现鼠标在某一个按钮上时&#xff0c;就显示其子物体中对应的下拉菜单&#xff0c;为此编写了一个公共类&#xff0c;对于需要悬浮显示的控件均可挂载此类。代码如下&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using Un…...

变形金刚在图像识别方面比CNN更好吗?

链接到文 — https://arxiv.org/pdf/2010.11929.pdf 一、说明 如今&#xff0c;在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;转换器已成为goto架构&#xff08;例如BERT&#xff0c;GPT-3等&#xff09;。另一方面&#xff0c;变压器在计算机视觉任务中的使用…...

【Javascript】ES6新增之类的认识

在现代编程语言中&#xff0c;类是面向对象编程范式中的核心概念之一。 与函数类似&#xff0c;类本质上是一种特殊的函数&#xff0c;它允许我们将数据和操作封装在一起&#xff0c;以创建具有共同行为和状态的对象。 在类的世界里&#xff0c;我们有类表达式和类声明&#xf…...

C#随机法 双峰函数 求极值 避免落入局部最优解

避免落入局部最优解&#xff0c;只要让步长够长即可。 x1 resultX1 random1.NextDouble()*100; 如果后面不乘以100&#xff0c;则很大概率落入负数的最大值 Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX10,max-999999,maxTemp0;for (int i …...

JavaScript高级:常见设计模式

设计模式是在软件开发中重复出现的问题的解决方案&#xff0c;它们是经过验证的、被广泛接受的最佳实践。设计模式可以让我们避免重复造轮子&#xff0c;提高代码质量和可维护性。在本文中&#xff0c;我们将介绍几种常见的设计模式&#xff0c;以及它们的实现和应用。 1. 单例…...

32bit国产低功耗无线MCU芯片

超低功耗无线MCU芯片MS1642&#xff0c;集成了高性能的32位ARMCortex-M0内核&#xff0c;宽电压工作范围的MCU。嵌入高达64Kbytes高可靠Flash和8Kbytes SRAM存储器&#xff0c;最高工作频率32MHz。芯片集成多路I2C、USART等通讯外设&#xff0c;1路12bit ADC&#xff0c;5个16b…...

scope组件穿透

今天我们以单选框为例来探究一下样式的穿透问题 1.代码 <template><div class""><el-radio v-model"radio" label"1">备选项</el-radio><el-radio v-model"radio" label"2">备选项</el-r…...

分类预测 | Python实现LR逻辑回归多输入分类预测

分类预测 | Python实现LR逻辑回归多输入分类预测 目录 分类预测 | Python实现LR逻辑回归多输入分类预测基本介绍模型描述源码设计学习小结参考资料基本介绍 逻辑回归是一种广义线性的分类模型且其模型结构可以视为单层的神经网络,由一层输入层、一层仅带有一个sigmoid激活函数…...

【微信小程序】通过使用 wx.navigateTo方法进行页面跳转,跳转后的页面中通过一些方式回传值给原页面

以下是几种常见的回传值的方式&#xff1a; 使用 wx.navigateTo 方法传递参数&#xff1a; 在跳转时&#xff0c;可以在目标页面的 URL 中携带参数&#xff0c;然后在目标页面的 onLoad 方法中获取参数&#xff0c;并在目标页面中进行处理。例如&#xff1a; // 原页面跳转到目…...

DIP: Spectral Bias of DIP 频谱偏置解释DIP

On Measuring and Controlling the Spectral Bias of the Deep Image Prior 文章目录 On Measuring and Controlling the Spectral Bias of the Deep Image Prior1. 方法原理1.1 动机1.2 相关概念1.3 方法原理频带一致度量与网络退化谱偏移和网络结构的关系Lipschitz-controlle…...

【考研数学】概率论与梳理统计 | 第一章——随机事件与概率(1)

文章目录 一、随机试验与随机事件1.1 随机试验1.2 样本空间1.3 随机事件 二、事件的运算与关系2.1 事件的运算2.2 事件的关系2.3 事件运算的性质 三、概率的公理化定义与概率的基本性质3.1 概率的公理化定义3.2 概率的基本性质 写在最后 一、随机试验与随机事件 1.1 随机试验 …...

LeetCode 36题:有效的数独

题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff…...

word横向页面侧面页码设置及转pdf后横线变竖线的解决方案

在处理材料的时候&#xff0c;会遇到同一个文档里自某一页开始&#xff0c;页面布局是横向的&#xff0c;这时候页码要设置在侧面&#xff0c;方法是双击页脚&#xff0c;然后在word工具栏上选择“插入”——>“文本框”——>“绘制竖版文本框”&#xff0c;然后在页面左…...

华为OD机试 - 字符串划分(Java JS Python)

题目描述 给定一个小写字母组成的字符串 s,请找出字符串中两个不同位置的字符作为分割点,使得字符串分成三个连续子串且子串权重相等,注意子串不包含分割点。 若能找到满足条件的两个分割点,请输出这两个分割点在字符串中的位置下标,若不能找到满足条件的分割点请返回0,…...

使用 `nmcli` 在 CentOS 8 上添加永久路由

CentOS 8 使用 NetworkManager 作为默认的网络管理工具&#xff0c;因此我们可以使用 nmcli 工具来实现相同的目标。使用 nmcli 可以更加直观地管理路由&#xff0c;并且更符合 CentOS 8 的默认网络管理方式。 以下是使用 nmcli 在 CentOS 8 上添加永久路由的步骤&#xff1a;…...

Java基础五之for循环小练习

加油,新时代大工人&#xff01; 一、Java基础之算术运算符 二、Java基础之类型转换 三、Java基础之【字符串操作以及自增自减操作】 四、Java基础之赋值运算符和关系运算符 package base;import java.io.InputStream; import java.util.Scanner;/*** author wh* date 2023年08…...

解决 Python RabbitMQ/Pika 报错:pop from an empty deque

使用 python 的 pika 包连接rabbitmq&#xff0c;代码如下&#xff1a; import pika import threading import timedef on_message(channel, method_frame, header_frame, body):print(fon_message thread id: {threading.get_ident()})delivery_tag method_frame.delivery_t…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...