我有一台 Linux 机器,想用 ffmpeg 编码一些视频。我有听到我的 CPU(第二代酷睿 i5 处理器)硬件支持 h.264 编码。
是否可以让 ffmpeg 使用它?如果可以,如何使用?
答案1
不,不是。FFMPEG 不支持 Intel 的 QuickSync 技术。要使用 QuickSync,程序必须通过 Intel Media SDK,而 Linux 不支持该 SDK。
答案2
截至目前,英特尔的 QuickSync 技术在 Linux 上得到支持,并通过两种主要方式实现:VAAPI 和英特尔的 Media SDK。
配置正确后,您将通过 Intel MediaSDK 获得基于 QuickSync 的编码器,即h264_qsv
和hevc_qsv
。要查看编码器使用情况:
ffmpeg -h encoder=h264_qsv
ffmpeg -h encoder-hevc_qsv
--enable-vaapi
第二种方法是通过 VAAPI API,需要使用阶段传递的选项构建 FFmpeg ./configure
。这是 Debian 和 Arch Linux 等发行版的默认设置,因此开箱即用。
要列出 FFmpeg 构建中可用的基于 VAAPI 的编码器和过滤器,请运行:
$ for i in encoders decoders filters; do
echo $i:; ffmpeg -hide_banner -${i} | egrep -i "vaapi"
done
关于用法:
ffmpeg -h encoder=hevc_vaapi
ffmpeg -h encoder=h264_vaapi
ffmpeg -h encoder=vp8_vaapi
ffmpeg -h encoder=vp9_vaaapi
从上面发布的列表中,可以明显看出上面的每个编码器在输出时将视频编解码器输出到哪里,从 H.265/HEVC 到 VP9。
平台支持因您的平台而异:
(a). 从 Sandybridge(第二代英特尔酷睿处理器显卡)到现在,一直支持 H.264 编码。
(b). Skylake 及更高版本支持 HEVC 编码,Kabylake 及更高版本支持 10 位编码。
(c). VP8 编码至少在 Broadwell(第五代英特尔酷睿处理器显卡)及更高版本上可用。
(d). VP9 编码至少从 Kabylake 及以上版本开始可用。Coffelake 及以上版本将提供 10 位 VP9 编码。
关于编码质量的一些额外说明:
现在,关于 QSV 的一些小注释,以及对其进行调整以实现高质量编码:
与任何其他基于硬件的编码器一样,英特尔的 Quick Sync 编码器与纯软件编码器(如 x264 和 x265)相比有几个限制,即质量控制和对支持的输入纹理类型的严格限制。因此,如果您正在考虑将 QuickSync 用于任何专业工作流程,请在投资之前评估性能优势与感知编码质量。
如果您正在 VAAPI 上查看高质量编码,请确保您至少使用的是 Haswell(英特尔第 4 代 iGPU),因为此架构引入了诸如“目标用途”(TU)概念等功能。此功能旨在让您能够轻松访问一系列渐变,而无需强迫用户选择比特率和速率控制方法。在之前的迭代中,虽然技术上有七个步骤,但实际上只有三个步骤可供使用:质量(TU1)、平衡(TU4)和速度(TU7)。随着英特尔高清显卡的最新推出,这种情况发生了变化,每个步骤都完全可选,并由英特尔媒体 SDK 公开。
值得注意的是针对比特率控制算法的最新优化,值得注意的概念是 LA-BRC。看看它这里。 看这回答有关同一问题的更多指示。
目前,英特尔已将之前的 QuickSync 技术委托给 MediaSDK 平台,目前和未来的产品将基于 OneVPL。参见这些过渡说明有关更多详细信息,请参阅 Github 上的 MediaSDK 项目。
答案3
x264 无需使用 MediaSDK 即可访问 QuickSync。英特尔联系了他们,他们互相帮助实现了这一目标(谷歌搜索“x264 QuickSinc”)。也许可以利用他们的努力并将其带到 ffmpeg...