文章目录

  • FFmpeg集成qsv的编译安装
    • 一、参考
    • 二、编译安装流程
      • 1. LibVA 和 Media-Driver 的安装
      • 2. Intel Media SDK 编译
      • 3. ffmpeg的编译安装
      • 4. 验证安装
    • 三、解码器基准命令
      • VAAPI
      • QSV
      • 其他

FFmpeg集成qsv的编译安装

一、参考

Ubuntu20.04 ffmpeg添加 Intel核显QSV加速支持
视频和视频帧:Intel GPU(核显)的编解码故事

二、编译安装流程

整体依赖关系:

主要步骤:

  • 安装intel media sdk

    • LibVA 和 Media-Driver 的安装
      ubuntu 19.04之后可以使用apt安装,可通过lsb_release -a命令查看当前系统版本

    • Intel Media SDK 编译安装

  • 编译安装ffmpeg

1. LibVA 和 Media-Driver 的安装

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

环境配置

vim ~/.bashrc
#末尾添加
export LIBVA_DRIVER_NAME=iHD

使用vainfo查看是否安装成功

2. Intel Media SDK 编译

# 安装依赖
sudo apt-get install git cmake pkg-config meson libdrm-dev automake libtool#下载MDSK源码
git clone https://github.com/Intel-Media-SDK/MediaSDK msdk
cd msdk

需要注意的点:使用vainfo,可以看到安装的libva版本是2.12.0

通过Releases · Intel-Media-SDK/MediaSDK · GitHub能够查看到MDSK与依赖的libva对照版本,使用git checkout 指定tag切换

如安装的2.12.0 libva版本,则对应下载 Media SDK 21.2.3,使用git checkout intel-mediasdk-21.2.3 切换

mkdir build && cd build
cmake ..
make
#安装
make installvim ~/.bashrc
#末尾添加
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/

3. ffmpeg的编译安装

#回归到原始下载msdk的目录,即#下载源码
git clone https://github.com/ffmpeg/ffmpegcd msdk
#编译
./configure --arch=x86_64 --disable-yasm --enable-vaapi --enable-libmfx
make# 安装
sudo make install

编译结果报警告但不影响后续,自行考虑是否修改编译配置

WARNING: The --disable-yasm option is only provided for compatibility and will be removed in the future. Use --enable-x86asm / --disable-x86asm instead.
–disable-yasm选项在未来会被移除,使用–enable-x86asm/–disable-x86asm代替

4. 验证安装

ffmpeg -codecs | grep qsv

ffmpeg -hwaccels 可查看支持的加速库

该命令只是列出此 ffmpeg 构建中启用的所有硬件加速组件,实际运行时可用性取决于硬件及其安装的合适驱动程序;如及时显示支持qsv加速库,还需要安装qsv的相关依赖,如mdsk等

测试解码能力
准备工具:intel_gpu_tools ,通过 apt-get install intel_gpu_tools安装

  • QSV硬件加速:ffmpeg -hwaccel qsv -i -c:v qsv解码器 你的视频文件 -f null - -benchmark

    • eg:ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -f null - -benchmark
  • VAAPI硬件加速:ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -i 你的视频文件 -f null - -benchmark
  • 软解码:ffmpeg -i 你的视频文件 -f null - -benchmark
  • 新建一个窗口键入intel_gpu_top可以观察gpu使用情况,vaapi和qsv两种方式都会用到
  • benchmark:显示实际使用的系统和用户时间以及最大内存消耗。并非所有系统都支持最大内存消耗,如果不支持,它通常会显示为 0

三、解码器基准命令

VAAPI

Fromhttp://trac.ffmpeg.org/wiki/Hardware/VAAPI
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i input.mp4 -f null -可以粗略作为解码器的基准
其中-hwaccel_device 仅在-hwaccel选项也被指定,即实际上
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i input.mp4 -f null - 等价于 ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -i input.mp4 -f null -
笔者查阅网上资料,一开始一直使用ffmpeg -hwaccel vaapi -i input.mp4 -f null -作为解码器基准,后面在以上链接查阅到上诉命令之后,测试了两个命令的区别,运行的速率差距大至一倍之差,原先笔者使用的命令的cpu占用率、gpu占用、内存消耗都比增加了-hwaccel_output_format vaapi 参数的命令大很多。

上诉附着的链接也给出了答案(可以打开链接,ctrl + F 搜索hwaccel_output_format 即可定位到)

  • The hardware codecs used by VAAPI are not able to access frame data in arbitrary memory. Therefore, all frame data needs to be uploaded to hardware surfaces connected to the appropriate device before being used. All VAAPI hardware surfaces in ffmpeg are represented by the vaapi pixfmt (the internal layout is not visible here, though).
    The hwaccel decoders normally output frames in the associated hardware format, but by default the ffmpeg utility download the output frames to normal memory before passing them to the next component. This allows the decoder to work standlone to make decoding faster without any additional options

大致意思就是:
vaapi硬件编解码器无法访问到内存中的帧数据,因此需要将帧数据上传到硬件表面,而参数的增加可以减少了将解码后位于硬件表面的数据下载到普通内存的步骤;新参数的增加用于指定要使用的格式,可以是软件格式(哪些格式可用取决于驱动程序),也可以是 vaapi 硬件格式,目的是表明不用去下载硬件表面

也正是因为vaapi硬件编解码器无法访问到内存中的帧数据,因此需要将帧数据上传到硬件表面,同等情况下,vaapi的内存消耗会比qsv硬件加速消耗得多

QSV

From QSV硬件加速相关命令

ffmpeg -hwaccel qsv -c:v h264_qsv -i 10min39.mp4 -f null -
命令执行时,会报警告

WARNING: defaulting hwaccel_output_format to qsv for compatibility with old commandlines. This behaviour is DEPRECATED and will be removed in the future. Please explicitly set “-hwaccel_output_format qsv”.

可以将命令修改为
ffmpeg -hwaccel qsv -hwaccel_output_format qsv -c:v h264_qsv -i 10min39.mp4 -f null -

如果运行之后报警告

convert the video using the Intel® Quick Sync Video accelerator. You can ignore the info message about “A decode call did not consume any data: expect more data at input”, that just indicates it has reached the end of the file.
笔者查阅资料,出现该警告只是表明到达文件末尾

其他

除了intel_gpu_top ,以上测试解码能力的命令输出结果output当中Video的像素格式,可以得知是否成功使用了对应的硬件加速插件

FFmpeg集成qsv的编译安装相关推荐

  1. 【流媒体服务器的搭建】2. 源码编译安装ffmpeg

    前言 centos 7 ffmpeg 编译时,打开H264功能时,必须已安装H264(参考这里).否则遇错:ERROR: libx264 not found. 官网 http://ffmpeg.org ...

  2. ffmpeg安装之linux编译安装

    转发自白狼栈:查看原文 关于ffmpeg的安装,有的人可能要折腾很久,甚至折腾一个礼拜,究其原因,基本都是编译安装惹的祸. 我们提供4种安装方式,最复杂的莫过于centos7上的编译安装. ffmpe ...

  3. opencv 编译安装时出现报错 modules/videoio/src/cap_ffmpeg_impl.hpp:585:34: error: ‘AVStream {aka struct AVStre

    目录 1. 报错 2. 报错原因 3. 卸载当前ffmpeg 3.1. 卸载apt安装的ffmpeg 3.2. 卸载编译安装的ffmpeg 4. 编译安装ffmpeg 4.3 4.1. 下载安装包 4 ...

  4. macOS上如何安装(不需要编译安装或者brew)、使用ffmpeg转码的教程,以及如何使用硬件加速

    最近要将mkv格式转为mp4格式,由于compressor不支持mkv,所以就打算用ffmpeg来转,但是由于视频文件巨大,简单的命令太慢了,所以就想用硬件加速,但是由于macOS的特殊性,官网上给出 ...

  5. Ubuntu18.04 编译FFmpeg 支持 QSV 硬编解码

    在Linux下,由于FFmpeg软解码CPU占用过高,所以打算使用h264_qsv硬解码,本文并非原创,主要参考以下文章,在此记录下编译过程,以便日后使用. 参考文章: 视频和视频帧:FFMPEG+I ...

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

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

  7. 开发人员学Linux(8):CentOS7编译安装Subversion及Apache并集成

    1.前言 本篇将介绍如何编译安装SVN服务器端管理软件subverion和Web服务器Apache.本来在前面的系列文章已经讲过使用Nginx作为Web服务器的,所以我一直在找有关subverion集 ...

  8. ffmpeg 编译安装 ubuntu18.04 4.1

    centos 64可以下载的:https://download.csdn.net/download/m0_37641005/10642836 gpu转码: https://my.oschina.net ...

  9. brew安装php-ffmpeg,mac 系统编译安装ffmpeg

    发表于 2019-05-03 19:03:20 by 月小升 mac 系统编译安装macOS High Sierra Version 10.13.6(17G6030) git clone https: ...

最新文章

  1. fdisk命令非交互模式及parted的mkpart命令第一个参数说明
  2. gamma函数stiriling公式_SVM参数: C和gamma
  3. 使用gdb调试程序详解
  4. 数字图像处理实验(3):PROJECT 02-03, Zooming and Shrinking Images by Pixel Replication
  5. java中Class.getResource用法(用于配置文件的读取)
  6. ZBar 自定义界面
  7. sqlserver结果集转为字符串
  8. Spring Web Flow 入门demo(二)与业务结合 附源码
  9. 什么是485转光纤?485光纤转换器功能特点及技术参数详解
  10. 个性签名设计软件_佩服!我用Python设计了一个签名软件
  11. leetcode 1217 python
  12. 一维优化黄金分割法c语言程序,机械优化设计黄金分割法.doc
  13. 用APICloud开发仿微信聊天App制作经验分享
  14. 我们一起学一学渗透测试——黑客应该掌握的Windows基础
  15. 海信电视微助手怎么连接电脑连接网络连接服务器,海信智能电视连接手机的教程详解!...
  16. 分支限界算法 之 A*算法(启发式搜索算法)---九宫重排游戏(也称八数码问题)
  17. openwrt路由 ssh后台测网速测速命令
  18. PTA实验11-1-7 藏头诗 (15 分)
  19. 软件质量管理体系 type:pdf_管理体系未来发展浅析
  20. 对凌承芯433M无线收发模块的测试

热门文章

  1. 加密技术应用以及DNS应用
  2. 什么是死锁(死锁的理解)
  3. DUMP文件分析1:DUMP文件简介
  4. 2021全军士兵高考成绩查询,道南教育:2021新高考|6月25日左右公布高考成绩,本科不再分一二三批...
  5. 中望3D 2021 轮廓曲线
  6. 微众银行 算法工程师 校招 一面面经
  7. 关于ftp的文件批量下载(包括文件夹和文件)的多种方法
  8. Kibana教程之一:下载与安装
  9. Java图片上传+回显技术
  10. HTML中常用特殊符号总汇