文章目录

  • 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. mysql 存储中文问题
  2. 转载:asp.net生成缩略图通用函数(支持多种生成方式)
  3. RSA加密解密及数字签名Java实现--转
  4. 关于ipconfig中setclassid的初步认识
  5. Tomcat提示:Error starting static Resources......
  6. Linux下main函数带参数问题和atoi函数详解
  7. 腾讯分布式数据库DCCB
  8. 心电信号越界怎么回事_心电信号的分析
  9. 【转贴】常识普及:广府人是越佬族
  10. MOCTF-WRITE-UP(二)
  11. vulcan 编程_Vulcan和AUSK之间的比较:如何充分利用Node,React和GraphQL
  12. php checkbox多选框默认选中的实现。
  13. (方法总结)Python 一行代码提取字符串每个单词首字母的两种方法
  14. Flink(初识Flink,快速上手)
  15. 数组和链表分别比较适合用于什么场景
  16. 多元高斯分布是非参_多元高斯分布(多元正态分布)简介
  17. Golang学习系列第六天:操作MongoDB
  18. liunx邮件群发服务器,邮件发送服务器 Postfix
  19. 目前流行的22款网店系统
  20. 微商水印相机邀请码8uic07

热门文章

  1. JS判断移动端上拉和下滑
  2. AW3410S应用分享,10GHz / USB3.1模拟数据开关,多路复用/分离器
  3. slf4j,log4j,log back之间的关系和区别
  4. 解决:Webpack does not exit the program after finishing to compile
  5. MySQL查看表中的索引的SQL语句
  6. 转贴一篇:《不尽阑珊----阿休罗的眼泪》
  7. 当前流行的前端及框架介绍(React和Vue)
  8. java爬取彩票数据_爬取彩票信息(有空试下)
  9. 在NS3中添加新的VANET模块
  10. 【互联网那些事儿】小度 i 耳目