背景介绍

ffmpeg 是一款非常常用的视频编码解码工具,而且 ffmpeg是支持 NV 显卡硬件加速以及 Intel 核显的 QSV 加速。在 Window 下,使用 ffmpeg 的 qsv 加速还算不太复杂,但在 Ubuntu 下,需要安装一大串工具,而且还需要自己编译 ffmpeg。之前尝试过失败后, 就放弃了。

过去一直使用二手服务器来进行视频转码压缩,服务器 CPU 一般核心多,而且 SAS 硬盘便宜,一台几十核的服务器装好虚拟机,一起运行解码,就算没有硬件加速,速度也是勉强过得去。

然而,最近由于各种电脑硬件价格飞涨,过去一千几百的二手服务器都已经涨到天价,更不要提硬盘了。而旧的服务器性能越来越落后,耗电和噪声都非常烦人,所以又萌生出拿旧的电脑装上 linux 服务器系统,配合核显 qsv 加速来替代服务器进行编码转码工作。

撸起袖子前的心理准备

在开始干之前,需要做好心理准备。因为我为了实现这个,已经重装多次系统了。

首先,关于如何在 Ubuntu 配置 Intel核显QSV 的中文资料,实在是少。知乎上有一个关于这个话题的文章写的非常详细,但是非常不幸的是我按照那篇文章的步骤,第一步编译 libva 就失败了。

而至于英文资料,大多都是复制或者引用 Intel 官方的 MediaSDK 的 Wiki 资料。最坑的是,官方的资料有很多地方没有讲清楚和不同介绍之间有矛盾。比较有用的一篇官方资料是《Build FFmpeg QSV》。安装配置的大致思路可以从这里找到。

硬件环境

我尝试了3个测试硬件环境,分别是一台 WIndow 的主机,以及两台 Ubuntu 的服务器。

Windows主机:

i5 4570+ z87 平台 (Window10)

Ubuntu服务器:

G4400 + h110 平台

J1900 准系统平台

以上服务器系统均为 Ubuntu 20.04

整体思路

关于配置这个硬件加速环境,其实难的不是具体的安装过程,而是没有一个全局的安装配置思路介绍,所以结合我的踩坑经验,介绍一下整体的思路,可能未必理解正确,供参考。

首先,我们要使用 ffmpeg 的 qsv 硬件加速,主要有两大步骤:

  • 安装好 Intel Media SDK

  • 编译 ffmpeg

其中,安装 Intel Media SDK 又可以分为两步:

  • Intel Media Driver for VAAPI (也就是 LibVA 和 Media-Driver 的安装)

  • Intel Media SDK 的编译安装

比较幸运的是,在 Ubuntu 19.04 之后,Intel Media Driver for VAAPI 已经可以使用 apt 安装,这个解决了很多奇怪的问题。我们剩下的难点就只有 编译 Intel Media SDK 和 ffmpeg 了。

Intel Media Driver for VAAPI 安装

因为我的系统是 Ubuntu 20.04 ,所以可以直接使用 apt 安装,如果是 Ubuntu 19 之前的系统,估计要走编译的方法。

执行以下命令,即可完成安装:

sudo apt-get install libmfx1 libmfx-tools
sudo apt-get install libva-dev libmfx-dev intel-media-va-driver-non-free
sudo apt-get install vainfo

安装完成后,需要配置以下环境变量,可以在 .bashrc 或者 .zshrc 末尾添加:

export LIBVA_DRIVER_NAME=iHD

我们可以使用 vainfo 来查看是否安装成功:

sudo vainfo
>
error: XDG_RUNTIME_DIR not set in the environment.
error: can't connect to X server!
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.7 (libva 2.6.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 20.1.1 ()
vainfo: Supported profile and entrypointsVAProfileNone                   : VAEntrypointVideoProcVAProfileNone                   : VAEntrypointStatsVAProfileMPEG2Simple            : VAEntrypointVLDVAProfileMPEG2Simple            : VAEntrypointEncSliceVAProfileMPEG2Main              : VAEntrypointVLDVAProfileMPEG2Main              : VAEntrypointEncSliceVAProfileH264Main               : VAEntrypointVLDVAProfileH264Main               : VAEntrypointEncSliceVAProfileH264Main               : VAEntrypointFEIVAProfileH264Main               : VAEntrypointEncSliceLPVAProfileH264High               : VAEntrypointVLDVAProfileH264High               : VAEntrypointEncSliceVAProfileH264High               : VAEntrypointFEIVAProfileH264High               : VAEntrypointEncSliceLPVAProfileVC1Simple              : VAEntrypointVLDVAProfileVC1Main                : VAEntrypointVLDVAProfileVC1Advanced            : VAEntrypointVLDVAProfileJPEGBaseline           : VAEntrypointVLDVAProfileJPEGBaseline           : VAEntrypointEncPictureVAProfileH264ConstrainedBaseline: VAEntrypointVLDVAProfileH264ConstrainedBaseline: VAEntrypointEncSliceVAProfileH264ConstrainedBaseline: VAEntrypointFEIVAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLPVAProfileVP8Version0_3          : VAEntrypointVLDVAProfileHEVCMain               : VAEntrypointVLDVAProfileHEVCMain               : VAEntrypointEncSliceVAProfileHEVCMain               : VAEntrypointFEI

Intel Media SDK 编译

首先先安装好依赖:

sudo apt-get install git cmake pkg-config
sudo apt-get install meson libdrm-dev automake libtool

接下来下载 MSDK 的源码:

git clone https://github.com/Intel-Media-SDK/MediaSDK msdk

进入目录:

cd msdk

这里有一个大坑,我们使用 apt 安装的 libva 版本是 1.7,然而最新的 MediaSDK 需要的 libva 版本要更高,所以在 cmake 的过程就会报错。我们需要的是跳回旧的 MediaSDK 版本即可。

# 使用 Media SDK 20.1.1 的版本
git checkout abb56fa

接下来就可以开始编译了:

mkdir build && cd build
cmake ..
make# 如果没有报错,可以执行安装
sudo make install

安装完成后,需要再完善以下环境变量的配置,同样修改 .bashrc 或者 .zshrc

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
export LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri/
export LD_LIBRARY_PATH=/opt/intel/mediasdk/lib/

ffmpeg 编译

完成上述步骤,就可以开始 ffmpeg 编译了。

首先还是先下载源码:

git clone https://github.com/ffmpeg/ffmpeg

接下来可以开始编译:

cd ffmpeg
./configure --arch=x86_64 --disable-yasm --enable-vaapi --enable-libmfx
make# 如果没有报错 即可安装
sudo make install

到这里,我们的 全部步骤都已经完成了。

最后,可以测试一下 ffmpeg 是否能正常已经安装好了 qsv:

ffmpeg -codecs | grep qsv
ffmpeg version N-102538-g0bdd677c5f Copyright (c) 2000-2021 the FFmpeg developersbuilt with gcc 9 (Ubuntu 9.3.0-17ubuntu1~20.04)configuration: --arch=x86_64 --disable-yasm --enable-vaapi --enable-libmfxlibavutil      57.  0.100 / 57.  0.100libavcodec     59.  1.100 / 59.  1.100libavformat    59.  2.100 / 59.  2.100libavdevice    59.  0.100 / 59.  0.100libavfilter     8.  0.101 /  8.  0.101libswscale      6.  0.100 /  6.  0.100libswresample   4.  0.100 /  4.  0.100D.V.L. av1                  Alliance for Open Media AV1 (decoders: av1 av1_qsv )DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_qsv ) (encoders: h264_qsv h264_v4l2m2m h264_vaapi )DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_v4l2m2m ) (encoders: hevc_qsv hevc_v4l2m2m hevc_vaapi )DEVIL. mjpeg                Motion JPEG (decoders: mjpeg mjpeg_qsv ) (encoders: mjpeg mjpeg_qsv mjpeg_vaapi )DEV.L. mpeg2video           MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_v4l2m2m mpeg2_qsv ) (encoders: mpeg2video mpeg2_qsv mpeg2_vaapi )D.V.L. vc1                  SMPTE VC-1 (decoders: vc1 vc1_qsv vc1_v4l2m2m )DEV.L. vp8                  On2 VP8 (decoders: vp8 vp8_v4l2m2m vp8_qsv ) (encoders: vp8_v4l2m2m vp8_vaapi )DEV.L. vp9                  Google VP9 (decoders: vp9 vp9_v4l2m2m vp9_qsv ) (encoders: vp9_vaapi vp9_qsv )

可以看到,这里我们已经安装好了支持 qsv 的ffmpeg了。

总结

虽然到这里,大部分的工作已经完成。然而,配置好的 ffmpeg 在转码某些视频的时候,会出现下面有绿边的情况,具体还没找到解决的方法。

所以,准备开始去研究新坑了。

如果文章对你有帮助,请不要忘记点赞、收藏、关注哦。

Ubuntu20.04 ffmpeg添加 Intel核显QSV加速支持相关推荐

  1. UnRaid利用iGVT-g插件实现Nas宿主机、虚拟机同时使用intel核显输出或硬解(硬件加速)功能

    文章目录 0.前言 1.准备工作 1.1.1台用intel处理器的组建的Nas主机(UnRaid系统必须是6.9.2及以上) 1.2.1台或多台显示器 1.3.1个DisplayLink转接器(USB ...

  2. 台式机ubuntu,使用intel核显作显示输出,nvidia独显做cuda运算

    问题来源: 将显示线插到独显上安装完ubuntu之后装完nvidia显卡驱动,使用nvidia-smi命令会发现Xorg和compiz两个服务占用了一部分显存,随着ubuntu不关机使用越来越久,甚至 ...

  3. 文明6游戏 linux,《文明6》正式支持Linux/SteamOS 但不支持Intel核显和A卡

    2K旗下策略游戏"文明"系列最新作<文明6>正式登陆Linux/SteamOS平台,在<文明6>的Steam页面上显示其已经支持Linux和SteamOS版 ...

  4. win10怎么更新显卡驱动_Intel发布核显新驱动:支持Win10 H2更新、11代酷睿狂喜-Intel,核显,驱动,Win10 ——快科技(驱动之家旗下媒体)-...

    10月份又要到微软升级Windows 10系统了,Intel今天也发布了最新的核显驱动,支持Win10 H2更新,同时给11代酷睿的锐炬核显增加了多款游戏支持,包括最新的魔兽世界资料片. 以下是详细的 ...

  5. 桌面窗口管理器dwm.exe内存过高,intel核显内存泄漏问题(附核显升级链接)

    系统 win10笔记本 intel核显630 问题概述 电脑长时间运行后突然变得很卡,打开任务管理器后发现[桌面窗口管理器]占内存过高,甚至能吃10个G,如图: 分析 查询各种论坛后基本确定问题为内存 ...

  6. Intel核显--OpenCL环境--Linux

    Machine :Intel Xeon i7 6700(core) + Intel HD Graphics 530(skyLake) +Linux (CentOS 7.2或7.3,我的7.3)+ecl ...

  7. VPU?APU?GPU?折腾从AMD-GPU回到Intel核显+OpenCL+Linux环境搭建

    大神说: 也就是说APU比较适合计算部分少,但传输耗时多的情况:而GPU相反. 请注意APU的一些细节, 如何才能做到无传输. 因为APU上稍微不注意, 按照传统写法很容易造成一次内存内部的传输的. ...

  8. 第一代intel核显id:0046的10.9驱动安装详解(转)

    一代0046 intel核显hd1000m 10.8的驱动已经失效了,开不了QE/CI的 从tonymac找来的驱动,并完善一下 直接上驱动啦 安装步骤务必按照顺序进行,不然是驱动不起来的 第一步:首 ...

  9. windows下Intel核显应用ffmpeg的qsv插件编解码

    1.怎么查看核显是否支持QSV技术? 百度搜索CPU型号,进入设备技术参数页面,下面是笔者机器CPU参数页面,看到下图中红线框的内容说明,CPU支持QSV技术. 2.ffmpeg官网发布的window ...

最新文章

  1. linux和windows双系统引导,windows和linux双系统引导问题
  2. 面试题 16.11. 跳水板
  3. measure,layout,draw的相关方法
  4. blob的真实地址怎么获得_《和平精英》不夜海上花套装怎么获得 不夜海上花免费领取地址_和平精英...
  5. Android中网络请求创建单个线程池的方法
  6. 背包问题——01背包问题——饭卡
  7. 测得怎么样了?作为一名软件测试员,工作有时候似乎挺苦逼的,我太难了……
  8. HDFS某个节点的磁盘满了
  9. spring用的是哪种工厂模式_业务复杂就用 ifelse?刚来的技术大佬用这招彻底干掉了!...
  10. wpsOffice文件在线预览-java接入
  11. dw移动图片位置,dw的移动的图片代码
  12. Python组合数据类型(第6周)
  13. SDHC卡与SD卡的区别究竟在哪?
  14. 【魔改蜗牛星际】B双主板变“皇帝板”扩展到8个SATA口
  15. 台式计算机功率图片,【图片】台式机电源别随便买!教你如何选择合适功率的电脑电源!_电脑吧_百度贴吧...
  16. (一)极大似然估计法原理讲解
  17. 线上引流方法有哪些?怎么做线上引流推广?线上引流推广方法
  18. 基于matlab的图像形状与分类毕业设计(含源文)
  19. android 全套安装包,原神1.1直装版下载-原神1.1完整安装包v1.1安卓版下载_飞翔下载...
  20. python的打开方式有哪些_python中打开程序的方式有哪些

热门文章

  1. 【微信小程序】点击图标跳转页面
  2. jude 使用学习-2018
  3. 限界上下文(BC)是什么
  4. 老板是个黑心狼(3)蠢--“骂”老板(9)第一季大结局
  5. 工业视觉_57:霍夫(Hough)直线识别,交点与夹角
  6. Android 应用页面延缓载入
  7. 2017电子设计大赛-光电科技协会板球控制系统
  8. 如何一招永久删除hao123流氓网页挟持
  9. 用C语言实现电脑小游戏——扫雷
  10. 教学计划编制问题(C语言)