使用下面的命令可以列出 #ffmpeg 中所有的编码器
ffmpeg -encoders
这个帖子整理一下ffmpeg中支持GPU硬件加速的编码器。
如果你的GPU支持硬件加速,则可以使用右侧的非默认编码器来提高转码速度。就我本人在笔记本平台Intel低压U的使用经验,ffmpeg在开启核显硬件加速后可以降低30%的CPU占用,并且节约70%~80%的转码时间。
三大桌面GPU厂商的硬件编、解码器进化历程表
在下面的三组表格中,可以查询到自己GPU硬件支持的编码格式:
看起来Intel的核显虽然性能一直拉跨,硬件编码器却一直给得非常厚道,某些特殊编码的视频剪辑似乎是得独显核显全都要才能最大化效率
Windows
(版本:ffmpeg 4.3)
默认编码器 | 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 | ||
AV1 | libaom-av1 |
对比本表格与上面的硬件支持表格,可以发现其中的一些格式,例如VP8编码,Intel最新的GPU硬件上支持,但ffmpeg软件上并没有做适配
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 | ||
AV1 | libaom-av1 |
注: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 VAAPI_DISABLE_INTERLACE 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 |
macOS
可以执行这个命令查看mac版ffmpeg支持硬件加速的编码器
ffmpeg -encoders | grep videotoolbox
楼主没有macOS设备,因此大概永远不会整理。欢迎有macOS的同学编辑更新