一、略图
如下图,i925是最地层的驱动,如果没有它,甚至无法显示桌面,因此他是kernel自带的。而VAAPi inter Drive,libVA API,Media SDK libray是需要用户下载的驱动,它们一层层调用直到调用到i915。那么,我们使用gpu和桌面渲染使用gpu有什么区别呢,gpu本身只能处理图片逻辑,但现在我们编解码需要数据逻辑,因此我们需要把数据逻辑转化为图片逻辑然后给gpu进行处理,因此我们需要安装以上说的驱动来帮助我们作转换。

二、那么开始
先安装一些软件:
sudo apt-get install -y git make cmake g++ dh-autoreconf pkg-config libncurses5-dev libpthread-stubs0-dev libpciaccess-dev libxvmc-dev xutils-dev libsdl2-dev libxcb-shm0-dev
以下需要安装五个驱动,因为兼容性这些驱动版本之间要指定,他们在以下连接中下载:
MediaSDK-intel-mediasdk-22.5.4
安装libva

cd libva-2.16.0
./autogen.sh
make -j12
sudo make install
sudo gedit ~/.bashrc
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
source ~/.bashrc
sudo ldconfig

安装gmmlib-intel-gmmlib-22.2.0/

cd gmmlib-intel-gmmlib-22.2.0/
mkdir build
cd build/
cmake ..
make -j12
sudo make install
sudo ldconfig

安装media-driver-intel-media

cd media-driver-intel-media-22.5.4/
mkdir build
cd build/
cmake ..
make -j12
sudo make install
sudo gedit ~/.bashrc
export LIBVA_DRIVER_NAME=iHD
export LIBVA_DRIVERS_PATH=/usr/local/lib/dri
source ~/.bashrc
sudo ldconfig

然后验证:

sudo vainfo

出现以下功能表示成功:

Trying display: wayland
libva info: VA-API version 1.16.0
libva info: User environment variable requested driver ‘iHD’
libva info: Trying to open /usr/local/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_16
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.16 (libva 2.16.0)
vainfo: Driver version: Intel iHD driver for Intel® Gen Graphics - 22.5.4 ()
vainfo: Supported profile and entrypoints
VAProfileNone : VAEntrypointVideoProc
VAProfileNone : VAEntrypointStats
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSliceLP
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointEncSliceLP
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointEncSliceLP
VAProfileVP9Profile1 : VAEntrypointVLD
VAProfileVP9Profile1 : VAEntrypointEncSliceLP
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointEncSliceLP
VAProfileVP9Profile3 : VAEntrypointVLD
VAProfileVP9Profile3 : VAEntrypointEncSliceLP
VAProfileHEVCMain422_10 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointEncSliceLP
VAProfileHEVCMain444_10 : VAEntrypointVLD
VAProfileHEVCMain444_10 : VAEntrypointEncSliceLP

安装MediaSDK-intel-mediasdk

cd MediaSDK-intel-mediasdk-22.5.4/
mkdir build
cd build/
cmake ..
make -j12
sudo make install
sudo gedit ~/.bashrc
export LD_LIBRARY_PATH=/opt/intel/mediasdk/lib:$LD_LIBRARY_PATH
export MFX_HOME=/opt/intel/mediasdk/lib/pkgconfig
export PKG_CONFIG_PATH=/opt/intel/mediasdk/lib/pkgconfig:$PKG_CONFIG_PATH
source ~/.bashrc
sudo ldconfig

//查看h264_vaapi都支持哪些参数

ffmpeg -h encoder=h264_vaapi
ffmpeg -h encoder=h264_qsv

还可以查看支持哪些像素格式

然后安装ffmpeg:
Download FFmpeg
ffmpeg用5.0.1/5.0.2
如果用4.4.3/4.3无法编译265
这里笔者还添加了x264和aac

--disable-x86asm --enable-vaapi --enable-libmfx --enable-gpl --enable-decoder=h264 --enable-shared --enable-swscale --enable-nonfree --enable-libfdk-aac --prefix=/usr/local
make -j10
sudo make install

到这里对于一般的平台就结束了,可以运行qsv和vaapi命令,官方提供了命令行:
ffmpeg-wiki:Hardware/QuickSync
ffmpeg-wiki:Hardware/vaapi

三、N5105激活GUC和HuC
由于笔者的平台为intel N5105,为gen11 JasperLake只支持Low-Power模式,所有有些功能无法支持,测试它只支持h264编解码,h265解码,不支持265编码,码率控制模式只支持CQP,不支持CBR,VBR。因此需要激活GUC和HuC,同时对内核也有要求,因此选择ubuntu22.10,参考以下连接:
https://01.org/linuxgraphics/downloads/firmware
https://www.cyril.vip/blog/note/system/enable-huc-for-iris-xe/
https://jellyfin.org/docs/general/administration/hardware-acceleration/

sudo vim /etc/default/grub
修改 GRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX="i915.enable_guc=3"
重新生成 grub
sudo update-grub
sudo reboot

GUC和HUC包括对电量的管理,把一部分cpu的工作转移到GPU上,包含了码率控制。

四、附录-参考:
Ubuntu18上安装QSV+FFMPEG环境

Ubuntu18.04 编译FFmpeg 支持 QSV 硬编解码
inter官方教程:在ubuntu16和centos7上配置ffmpeg+qsv:
An Operation Guide to Build, Install and Debug Media SDK Software Stack in Legacy Linux OS
MediaSDK_ffmpeg office

FFmpeg github
Welcome to the FFmpeg Bug Tracker and Wiki

以下连接也包括不同gen代别对264/265编解码的支持表格,如果是集显的话,cpu的代别就是显卡的代别,如i9就是gen9,同样的gen代也有不同的平台,如gen12包含6个平台。可通过如下两个命令查看平台名:
lspci -nn | egrep -i “3d|display|vga”
lshw -C display
ffmpeg-wiki:Hardware/QuickSync
ffmpeg-wiki:Hardware/vaapi
不同的系统,gpu厂商,套件,ffmpeg编解,互相支持表格:
wiki:HWAccelIntro

ffmpeg -re -c:v h264_qsv -i westlife.mp4 -c:v h264_qsv -q:v 30 output.mp4 -y
intel gpu占用率查看工具:
sudo apt-get install intel-gpu-tools
sudo intel_gpu_top

ffmpeg -re -c:v h264_qsv -i westlife.mp4 -c:v h264_qsv -q:v 30 output.mp4 -y
-q:v(视频)和-q:a(音频)是可变比特率 (VBR) 质量级别的选项。取值范围是 1-31,其中 1 是最高质量,31 是最低质量。或者,它们分别与-qscale:v和-qscale:a相同。 10-50

卸载安装的库:
MediaSDK-intel-mediasdk-22.5.4
sudo rm -r /opt/intel/mediasdk

media-driver-intel-media-22.5.4
sudo rm -r /usr/local/lib/pkgconfig/igfxcmrt.pc /usr/local/include/igfxcmrt /usr/local/lib/libigfxcmrt* /usr/local/lib/dri/iHD_drv_video.so

libva-2.16.0
sudo make uninstall

libva-utils-2.16.0
sudo make uninstall

sudo rm -r /usr/local/include/igdgmm /usr/local/lib/pkgconfig/igdgmm.pc /usr/local/lib/libigdgmm*

//合在一起时
sudo rm -r /opt/intel/media-driver/include/igdgmm /opt/intel/media-driver/lib/pkgconfig/igdgmm.pc /opt/intel/media-driver/lib/libigdgmm* /opt/intel/media-driver/lib/pkgconfig/igfxcmrt.pc /opt/intel/media-driver/include/igfxcmrt /opt/intel/media-driver/lib/libigfxcmrt* /opt/intel/media-driver/lib/dri/iHD_drv_video.so

ffmpeg使用qsv硬解码出来的视频帧格式是AV_PIX_FMT_NV12格式的

查看h264_vaapi都支持哪些参数:

ffmpeg -h encoder=h264_vaapi
ffmpeg -encoders|grep qsv查看支持的qsv的编码器 h264_qsv
ffmpeg -decoders|grep qsv 查看支持的qsv的解码器 h264_qsv

V…D h264_qsv H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
V…D hevc_qsv HEVC (Intel Quick Sync Video acceleration) (codec hevc)
V…D mjpeg_qsv MJPEG video (Intel Quick Sync Video acceleration) (codec mjpeg)
V…D mpeg2_qsv MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)
V…D vc1_qsv VC-1 video (Intel Quick Sync Video acceleration) (codec vc1)
V…D vp8_qsv VP8 video (Intel Quick Sync Video acceleration) (codec vp8)
V…D vp9_qsv VP9 video (Intel Quick Sync Video acceleration) (codec vp9)

查看编码器支持那些参数,这里用的并不会都支持,要根据自己的硬件平台:

ffmpeg -h encoder=h264_qsv

如其中提供了编码速度选择:

  -preset            <int>        E..V...... (from 1 to 7) (default medium)veryfast        7            E..V......faster          6            E..V......fast            5            E..V......medium          4            E..V......slow            3            E..V......slower          2            E..V......veryslow        1            E..V......

如果没有进行三、N5105激活GUC和HuC那么会遇到如下错误:

ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i westlife.mp4 -vf 'deinterlace_vaapi=rate=field:auto=1,scale_vaapi=w=1280:h=720' -c:v hevc_vaapi -q 2M output.mp4 -y
[hevc_vaapi @ 0x55bc9f190bc0] Failed to end picture encode issue: 24 (internal encoding error).
[hevc_vaapi @ 0x55bc9f190bc0] Encode failed: -5.
Video encoding failed
[aac @ 0x55bc9f18f380] Qavg: 236000000.000
[aac @ 0x55bc9f18f380] 2 frames left in the queue on closing
Conversion failed!
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i westlife.mp4 -c:v h264_vaapi -b:v 2M -maxrate 2M output.mp4
[h264_vaapi @ 0x563bd5e20a00] Driver does not support any RC mode compatible with selected options (supported modes: CQP).
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[aac @ 0x563bd5e1a480] Qavg: 7814.877
[aac @ 0x563bd5e1a480] 2 frames left in the queue on closing
Conversion failed!
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i output_hevc.mp4 -f null -

ffmpeg+qsv / vaapi相关推荐

  1. [ffmpeg][qsv][windows]windows下配置fmpeg英特尔qsv

    [ffmpeg][qsv][windows]windows下配置fmpeg英特尔qsv 文章目录 [ffmpeg][qsv][windows]windows下配置fmpeg英特尔qsv 预装mingw ...

  2. 利用ffmpeg+QSV进行视频处理

    引言 ffmpeg是一个视频处理领域的"瑞士军刀",在很多应用中都会用到,这里就不详细介绍它的使用啦,有需要的可以参考其官方文档和大量网上的资料. 这里着重介绍一下qsv这个东东, ...

  3. 基于Intel 集成显卡的 FFmpeg 调用 VAAPI 硬件解码零数据拷贝链接推理引擎工作流程的实现

    概述 在视频处理流程中,视频的解码通常在 CPU 中进行,若用户需要使用集成显卡进行深度学习推理,解码数据需要从 CPU的缓存中拷贝至集成显卡中进行推理.本文旨在通过集成显卡进行硬件解码,使用FFmp ...

  4. FFmpeg+QSV+SDL2 格式流转说明

    最近在做ffmpeg qsv硬解码并使用sdl2显示服务,但是对于创建硬解码器之后,解码及显示流程中数据格式流转还是不清晰.本文可能存在误区,欢迎大家批评指正 1.创建硬解码器 解码第一步需要指定硬解 ...

  5. windows+ffmpeg+qsv实现inter核显加速视频解码编码

    inter核显也可以加速ffmpeg编解码,而且提升也非常大,比纯CPU快上4倍没有问题的. 只是ffmpeg通过qsv使用inter核显加速,需要安装inter media sdk和libmfx. ...

  6. ffmpeg qsv 编译

    ffmpeg 的编译一直困扰很长时间,平时一直是直接用官网的ffmpeg builds库,但是设计到ffmpeg的qsv硬解没办法只能自己编译,感激参考博客https://blog.csdn.net/ ...

  7. 英特尔QSV技术在FFmpeg中的实现与使用

    本文来自英特尔资深软件工程师张华在LiveVideoStackCon 2018讲师热身分享,并由LiveVideoStack整理而成.在分享中张华介绍了英特尔GPU硬件架构,并详细解析了英特尔QSV技 ...

  8. Ubuntu20.04 ffmpeg添加 Intel核显QSV加速支持

    背景介绍 ffmpeg 是一款非常常用的视频编码解码工具,而且 ffmpeg是支持 NV 显卡硬件加速以及 Intel 核显的 QSV 加速.在 Window 下,使用 ffmpeg 的 qsv 加速 ...

  9. ubuntu18.0.4编译ffmpeg开启qsv硬件编解码

    文章目录 前言 正文 1. libmfx / iHD 路线 前置安装 编译安装ffmpeg 2. VAAPI / i965 路线 前言 参考官方文档:http://trac.ffmpeg.org/wi ...

最新文章

  1. 如何使用python找出CPU数量
  2. Day 8: Harp.JS——现代静态web服务器
  3. android 获取图片像素密度,android 获取屏幕的密度和像素 点
  4. UML用例图总结来源于网络
  5. linux read nchars,Linux常用命令--read
  6. 学习vue第一篇记录
  7. 设计模式-Factory Method Pattern
  8. 如何使用阿里云ARMS轻松重现用户浏览器问题
  9. 深入理解Java main方法
  10. GO学习第三天——自定义包
  11. ACOUG 联合创始人盖国强:万象更新,数据库技术和生态的发展演进
  12. 【算法】07 AM-MCMC算法C++实现
  13. 卫星通信中信关站、关口站、地面终端的区分
  14. 图书馆管理系统mysql的创建_简单的图书馆管理系统数据库设计
  15. 模拟电子技术动画-PN结(动画是转的)内容再修改
  16. 2021Fall - 欧陆CS转交互留学项目信息整理
  17. CCNA学习-路由器交换机的管理配置
  18. 中国黑客的隐秘江湖:攻守对立 顶尖高手
  19. 漫步云中网络 ( by quqi99 )
  20. Android Room 数据库详解

热门文章

  1. 强大的开发工具 pry
  2. 数字孪生智慧环保可视化决策系统
  3. GM903在线电机转子磁场波形测试仪
  4. Unity 打包出的iOS 游戏 图片质量(Alpha)下降的问题
  5. 高新技术企业研发费用核算管理
  6. 【前端学习笔记—使用JS修改样式】
  7. The ONE --Bug记录
  8. 第二篇 线性数据结构的编程实验 第5章 应用顺序存取类线性表编程
  9. 快手实操经验,如何快速玩转快手直播带货
  10. pb打开pbw时提示Attempt to open datawindow failed错误解决办法