FFmpeg中的硬件加速编码器

注意:本帖讨论的是硬编不是硬解

使用下面的命令可以列出 ffmpeg 中所有的编码器

ffmpeg -encoders

这个帖子整理一下ffmpeg中支持GPU硬件加速的编码器。

如果你的GPU支持硬件加速,则可以使用非默认的编码器来提高转码速度。就我本人在笔记本平台Intel低压U的使用经验,ffmpeg在开启核显硬件加速后可以降低30%的CPU占用,并且节约70%~80%的转码时间。

三大桌面GPU厂商以及苹果的硬件编、解码器进化历程表

在下面的三组表格中,可以查询到自己GPU硬件支持的编码格式:

看起来Intel的核显虽然3D性能一直拉跨,硬件编码器却一直给得非常厚道,某些特殊编码的视频渲染似乎是得独显核显全都要才能最大化效率

Windows

(版本:ffmpeg 5.0)

默认编码器 AMD硬件加速 Intel硬件加速 Nvidia硬件加速
H.264/AVC libx264 h264_amf h264_qsv h264_nvenc
nvenc
nvenc_h264
H.265/HEVC libx265 hevc_amf hevc_qsv hevc_nvenc
nvenc_hevc
MJPEG mjpeg mjpeg_qsv
MPEG-2 mpeg2video mpeg2_qsv
VP8 libvpx
VP9 libvpx-vp9 vp9_qsv

对比本表格与上面的硬件支持表格,可以发现Intel比较新的GPU硬件上支持VP8编码,但ffmpeg for Windows软件上并没有做适配

macOS (Intel & Apple Silicon)

(版本:ffmpeg 5.0)

默认编码器 Intel硬件加速 Apple Silicon硬件加速
H.264/AVC libx264
libopenh264
h264_videotoolbox h264_videotoolbox
H.265/HEVC libx265 hevc_videotoolbox hevc_videotoolbox
VP8 libvpx
VP9 libvpx-vp9 ? ?
ProRes prores
prores_aw
prores_ks
prores_videotoolbox

ffmpeg5.0更新说是新增了VP9和ProRes的硬件加速,不过我安装的1月17号的build只找到了ProRes

Linux (x86)

(版本:ffmpeg 4.3)

默认编码器 AMD硬件加速 Intel硬件加速 Nvidia硬件加速
H.264/AVC libx264 h264_vaapi
h264_omx
h264_vaapi h264_nvenc
nvenc
nvenc_h264
H.265/HEVC libx265 ?hevc_vaapi hevc_vaapi hevc_nvenc
nvenc_hevc
MJPEG mjpeg mjpeg_vaapi
MPEG-2 mpeg2video mpeg2_vaapi
VP8 libvpx vp8_vaapi
VP9 libvpx-vp9 vp9_vaapi

注:ffmpeg对于Intel GPU有完整的VAAPI支持,而对于AMD GPU的支持是不完整的:

https://trac.ffmpeg.org/wiki/Hardware/VAAPI

H.264 encode is working on GCN GPUs, but is still incomplete. No other codecs are supported by Mesa for encode yet.

Encoding and interlacing support in Mesa are incompatible because of the data layout in GPU memory. By default, frames are separated into fields and interlaced video is supported but encoding is not. Set the environment variable VAAPIDISABLEINTERLACE to 1 to be able to use the encoder (but without any interlaced video support.

不过考虑到ffmpeg的官方Wiki并不是实时更新,我也不确定最新的AMD GPU在最新的Linux驱动下是不是已经支持HEVC硬件加速编码了

树莓派

树莓派并不是一个设计来转码的设备,其GPU的硬件编码器部分只支持非4K分辨率的H.264视频

默认编码器 树莓派硬件加速
H.264/AVC libx264 h264_omx