For the complete documentation index, see llms.txt. This page is also available as Markdown.

为FFMPEG添加Intel QSV支持

简介

使用CPU转码的速度过于慢,在使用12核心的i7-10710U CPU全力转码也只有75fps的情况下,使用自带的Mesa Intel® UHD Graphics (CML GT2)进行转码在CPU占用率只有1/3的情况下,就可以达到400+fps的转码速度,速度提升了6倍。

但是直接使用apt-get安装的ffmpeg是不带QSV支持的,因为QSV并不是开源的,所以只有自己编译了。

如果完全按照Intel® Quick Sync Video Installation的指示安装,恐怕是要过错年的。文档的格式排版辣眼睛不说,而且连术语都变了,文档让你安装的MediaServerStudio,早已经变成了MediaSDK。

2026-02-17更新

这个年是彻底要过错了,我重新安装了系统,准备编译带QSV的ffmpeg,结果MediaSDK也被废弃了,现在改了个狗屁名叫甚么Intel Video Processing Library (Intel VPL)。不过好消息是,我在Debian下安装的ffmpeg默认支持基于libvpl的QSV编解码器了,libvpl也可以从apt直接安装了。这样就省去了我很多的事儿了。我认为这是做了一件人事,值得鼓励。

所以以后只需要参考使用的部分即可,至于安装的部分,我决定留在这里,作为某大公司产品因为拍脑袋引起的产品设计混乱的一个见证。

2026-09-22更新

我上面还是写的简单了,让我再补充一下吧。

首先要确认你的ffmpeg是有qsv编码器的:

# ffmpeg -hide_banner -encoders | grep qsv 
 V..... av1_qsv              AV1 (Intel Quick Sync Video acceleration) (codec av1)
 V..... h264_qsv             H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
 V..... hevc_qsv             HEVC (Intel Quick Sync Video acceleration) (codec hevc)
 V..... mjpeg_qsv            MJPEG (Intel Quick Sync Video acceleration) (codec mjpeg)
 V..... mpeg2_qsv            MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)
 V..... vp9_qsv              VP9 video (Intel Quick Sync Video acceleration) (codec vp9)

然后你需要一些妙妙小依赖(记得apt update再安装)

至于为什么要non-free,我搜索了一下大概是这个解释:

这源于 Debian 对软件自由的严格定义。“non-free” 并不意味着需要付费,而是指软件包中包含了不可读的二进制代码(binary blobs)。Intel 的显卡驱动为了提高效率,部分着色器代码以二进制形式提供,这不符合 Debian 的“自由”标准,因此被拆分到 non-free 仓库中。

最重要的还是得安装libmfx,如果你是11代及之后的CPU的话,可以安装 libmfx-gen1.2,但是我的XPS是几年前买的,还是10代CPU,不支持什么oneVPL,所以需要安装下面的过时的包(Intel你做个人吧):

最后可以简单跑一个测试指令:

没有Conversion failed!那就是可以了。

余下的部分都是历史了。


安装Media SDK

首先到Github上下载MediaSDK:https://github.com/Intel-Media-SDK/MediaSDK/releases

当然按照Intel的尿性,下载的位置可能有变化,找不到的时候就参考一下官方页面:Intel® Media SDK。

随后解开压缩包,并且执行其中的安装脚本:

这第一步就算完了。

编译FFMPEG

Intel文档里的这一部分不能说完全正确吧,只能说错漏百出。这里参考ffmpeg的官方的Wiki比较好。

首先安装需要的包:

官网文档要求安装这些包,但是我的Ubuntu 20.04找不到libdav1d-dev所以干脆不装了,不影响QSV的使用,git-core也可以不用安装,不过我的机器上已经安装了git了。

之后下载源代码并且生成配置:

注意,由于我们可能不止使用qsv的ffmpeg,所以一个比较实用的命令会是:

这个时候可能会提示:ERROR: libmfx not found。

参考这个ISSUE

只需要export PKG_CONFIG_PATH=/opt/intel/mediasdk/lib/pkgconfig/就可以了。

实际情况是,我的电脑是64位,所以应该是:export PKG_CONFIG_PATH=/opt/intel/mediasdk/lib64/pkgconfig。

最后直接make就行:

编译完看一眼支持的codec是不是正确:

正确的话应该输出类似:

测试

编译出来的ffmpeg就可以直接用了,这时我测试的指令:

在实际测试的过程中,一些选项是不能用的,比如-pix_fmt yuv420p -crf 23这一类的,去掉就可以。

偶尔会遇到像素格式不对的问题,需要设置如此设置 -vf hwupload=extra_hw_frames=64,scale_qsv=format=nv12。 但是在实际测试中,这样的转码速度会下降,不知道是不是像素格式引起的。

参考资料

最后更新于