我最近一直在通过Shutter Encoder GUI 使用 FFMPEG 对视频进行编码。我一直在使用 CRF 作为质量指标,因为我不关心文件大小,只要它尽可能高效地编码即可。H.264 编码指南说“将17 或 18 视为视觉无损或接近无损”,但当我使用硬件加速时,它会导致质量显着下降,即使 CRF 没有改变。我知道 GPU 需要更高的比特率才能达到相同的质量,但 CRF 控制质量,所以我希望在文件大小增加时质量保持不变。
我最近一直在通过Shutter Encoder GUI 使用 FFMPEG 对视频进行编码。我一直在使用 CRF 作为质量指标,因为我不关心文件大小,只要它尽可能高效地编码即可。H.264 编码指南说“将17 或 18 视为视觉无损或接近无损”,但当我使用硬件加速时,它会导致质量显着下降,即使 CRF 没有改变。我知道 GPU 需要更高的比特率才能达到相同的质量,但 CRF 控制质量,所以我希望在文件大小增加时质量保持不变。
因为硬件编码使用固定功能块,其通用性和适应性远不如软件编码器。
硬件编码器总是比软件编码器差,除非它们经过专门调整以产生高质量的结果,这将导致它们具有更高的复杂性,因此在硅空间和开发时间方面成本更高。
这可能是硬件编码器可以完成的唯一工作,但它需要大量的空间才能达到与全功能软件编码器相同的复杂程度。为了降低复杂性,它将有捷径和权衡取舍。
因此,软件编码器将在 100 次中获得 99 次更好的结果。
显卡中的硬件编码器足以完成这项工作,而且速度很快。如果速度是关键,并且给定带宽(或给定质量的更大带宽)的质量损失是可以接受的,这是一个很好的选择。
如果您需要高质量的硬件编码器,那么您将为此付出更多。
您可以在直播流媒体的硬件与软件编码器中找到更多信息:您的选项解释 [2021 年更新]
添加@Mokubai 的答案:
H.264 是一种视频编码规范,存在可以生成 H.264 视频流的不同编码器(或编解码器)。最广为人知的是 x264,它是 ffmpeg 中的默认编码器。它仅在 CPU 上运行。还有在 GPU 上运行的 H.264 编码器,它们通常由 GPU 供应商提供:用于 Intel 集成 GPU 的 QSV,用于 Nvidia GPU 的 nvenc 等......
使用“硬件加速”绝对不是使用移植到 GPU(或任何其他硬件加速器)的相同编码器,它实际上使用完全不同的编码器(因为你在 Mac 上我不确定你选择了哪个软件,我知道 Apple 提供了自己的编码器)。关键是不仅算法不同,而且参数之间也不匹配:例如一个编码器中的crf参数在另一个编码器中不一定具有相同的效果,相同的值可能导致完全不同的效果质量(参数及其尺度未标准化)。