为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。
安装Media SDK
首先到Github上下载MediaSDK:https://github.com/Intel-Media-SDK/MediaSDK/releases
当然按照Intel的尿性,下载的位置可能有变化,找不到的时候就参考一下官方页面:Intel® Media SDK。
随后解开压缩包,并且执行其中的安装脚本:
tar -xzvf MediaStack.tar.gz
cd MediaStack
chmod +x install_media.sh
sudo ./install_media.sh这第一步就算完了。
编译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。 但是在实际测试中,这样的转码速度会下降,不知道是不是像素格式引起的。
参考资料
最后更新于
这有帮助吗?