Red Vice

2025年2月27日 • Ryan

视频编码需要用眼睛看

在多媒体领域,质量工程师优化的是_感知_质量。眼睛、耳朵,以及大脑对它们的信号处理都极其复杂,根本不可能完全通过计算来复制。不存在什么“客观”的衡量标准,只有各种带有困难权衡的代理指标。修改视频尤其棘手,因为正如我之前在这个博客上提到的,存在各种微妙地影响感知,但又令人不悦,且无法纠正的偏差。

这意味着没有什么可以替代实际观看结果。如果你是一名视频工程师,你必须查看示例输出,并问问自己是否喜欢看到的内容。你应该定期这样做,尤其是在考虑更改任何内容时,如果你的流程中包含任何涉及 ML 的环节,更应该如此。你不能简单地指向一些指标,然后说“LGTM(看起来不错)”!在这个特殊的领域,如果指标与熟练的人工判断发生冲突,通常是指标错了。

Netflix 在他们的工程博客上发表了一篇关于视频“deep downscaler”的文章,但不幸的是,这篇文章充斥着问题。我最初是因为有人引用它才看到这篇文章的,点击进去阅读后非常失望。希望这篇文章能提供一个反驳的观点!

我将在下面详细介绍,但最终这些细节都无关紧要; Netflix 发布的单张图片对比看起来像这样:

Downscaler 比较

请注意振铃效应、奇怪的色彩偏移,以及看似虚假的“细节”。如果上面的图片是他们最好的例子,那么这个东西就不应该发布——结果看起来很糟糕,无论指标如何。博客文章没有承认这一点令人尴尬,这让我怀疑有多少工程师读了这篇文章但选择什么也不说。

这篇文章

好的,让我们逐节分析:

神经网络如何融入 Netflix 视频编码?

粗略地说,在我们的流程中,编码视频有两个步骤:

  1. 视频预处理,包括在编码之前应用于高质量源视频的任何转换。视频降尺度是本文中最相关的例子,它根据不同设备的屏幕分辨率调整我们的编码,并在不同的网络条件下优化图像质量。通过视频降尺度,可以生成源视频的多个分辨率版本。例如,一个 4K 源视频将被降尺度到 1080p、720p、540p 等。这通常通过传统的重采样滤波器来完成,比如 Lanczos。

先忽略糟糕的写作[[1](https://redvice.org/2025/encoding-requires-eyes/<#fn:1>)],令人好奇的是他们没有明确说明 Netflix 之前使用的是什么。Lanczos 是一个例子,还是当前最佳选择[[2](https://redvice.org/2025/encoding-requires-eyes/<#fn:2>)]?这很重要,因为人们希望他们能建立一个基线,以便以后比较结果,而这个基线应该是现有的最佳合理选择。

  1. 使用传统的视频编解码器进行视频编码,比如 AV1。编码通过利用视频中存在的空间和时间冗余,大大减少了需要流式传输到你设备上的视频数据量。

我再次想知道他们为什么要提到 AV1,因为我知道 Netflix 大部分目录并不是以这种格式提供的;他们肯定很关心硬件解码器支持。此外,预处理和编码之间的区别并不像最后一句话暗示的那么明确,因为这些编解码器是有损的,而且是以一种意识到感知质量现实的方式进行的。

我们发现,通过用基于神经网络的视频降尺度器替换传统的视频降尺度器,我们可以利用神经网络 (NN) 来提高 Netflix 的视频质量。这种方法,我们称之为“deep downscaler”,有几个关键优势:

我确信,既然他们称之为 deep downscaler,它实际上会使用深度学习,对吧?

  1. 一种用于降尺度的学习方法可以提高视频质量,并可以根据 Netflix 的内容进行定制。

先不提我对“一种学习方法”这个短语的反感,我对“根据 Netflix 的内容进行定制”的说法非常怀疑。Netflix 的目录非常广泛,而且视频编码已经尝试过很多基于内容的专业化方法,但结果证明,不如专注于改进通用功能和添加调整旋钮。可以说,编码器 x264 最突出,它主要是在 Touhou 素材上开发的。

  1. 它可以作为一个直接替代的解决方案集成,也就是说,我们不需要对 Netflix 的编码端或客户端设备端进行任何其他更改。数百万支持 Netflix 流媒体的设备可以自动从这个解决方案中受益。

记住这一点,稍后会用到:Netflix 有_很多_不同的客户端,而这假设不会对它们进行任何更改。

  1. 一个独立的、基于 NN 的视频处理模块可以独立发展,可以用于视频降尺度之外的应用,并且可以与不同的编解码器结合使用。

怀疑

当然,我们相信 NN 在视频应用中的变革潜力,不仅仅是视频降尺度。虽然传统的视频编解码器仍然很普遍,但基于 NN 的视频编码工具正在蓬勃发展,并在压缩效率方面缩小性能差距。deep downscaler 是我们利用神经网络提高视频质量的务实方法。

“缩小性能差距”是一种相当乐观的说法,但我会将这一点留到另一篇文章中讨论。

我们基于 NN 的视频降尺度方法

deep downscaler 是一种神经网络架构,旨在通过学习更高质量的视频降尺度器来提高端到端的视频质量。它由两个组成部分组成:一个预处理模块和一个调整大小模块。预处理模块旨在在后续的调整大小操作之前对视频信号进行预滤波。调整大小模块产生较低分辨率的视频信号,该信号作为编码器的输入。我们采用了一种自适应网络设计,适用于我们用于编码的各种分辨率。

Downscaler 比较

我不确定他们在这里所说的自适应网络设计到底是什么意思。一位朋友建议说,也许这只是意味着预处理模块上的固定权重?然而,我非常怀疑他们声称结果将生成为各种分辨率的说法。避免过度拟合将是相当具有挑战性的,并且这篇文章中没有任何内容让我相信他们已经克服了这些困难。他们轻描淡写地带过了这一点,但这似乎对整个项目至关重要。

在训练期间,我们的目标是生成最佳的降采样表示,以便在放大后,均方误差最小化。由于我们无法直接针对传统的视频编解码器进行优化(它是不可微分的),因此我们排除了有损压缩的影响。我们专注于一个强大的降尺度器,它是在给定的传统放大器(比如双三次插值)的情况下训练的。我们的训练方法是直观的,并且产生了一个不与特定编码器或编码实现相关的降尺度器。然而,它需要进行彻底的评估,以证明其在 Netflix 编码中的广泛使用的潜力。

终于有一些细节了!我很好奇他们将如何解决训练降尺度模型时缺乏参考的问题,而这在某种程度上解释了这一点;他们在降尺度后放大回原始分辨率时,优化了 PSNR(峰值信噪比)。我读到这篇文章后的第一反应是:

  1. 嗯,PSNR 并不好[[3](https://redvice.org/2025/encoding-requires-eyes/<#fn:3>)]。
  2. 我们实际谈论的是哪种双三次插值?这并没有让我相信作者对视频了解多少。
  3. 所以这就像一个自编码器,但解码器被双三次插值放大所取代?
  4. 这是否意味着一旦你的电视决定用双线性插值进行放大,这一切都会瓦解?
  5. Netflix 真的能可靠地控制客户端设备上的放大方法吗[[4](https://redvice.org/2025/encoding-requires-eyes/<#fn:4>)]?毕竟,他们之前特意说明该项目假设不会对客户端进行任何更改!
  6. 我不会称之为直观。老实说,这听起来有点蠢,而且很脆弱。
  7. 不将此与特定编码器联系起来是明智的,但他们的可微性理由没有任何意义。

这里最奇怪的部分是,以这种方式制定的问题实际上有一个闭式解,而且我敢打赌,它的运行速度比神经网络快得多!ML 在更模糊的场景中可能很好,但是在这里,你已经简化了事情,以至于你可以直接做一些数学运算并编写一些代码[[5](https://redvice.org/2025/encoding-requires-eyes/<#fn:5>)]!

通过神经网络提高 Netflix 视频质量

deep downscaler 的目标是提高 Netflix 会员的端到端视频质量。通过我们的实验,包括客观测量和主观视觉测试,我们发现 deep downscaler 提高了各种传统视频编解码器和编码配置的质量。

从一开始的例子来看,主观视觉测试是由愚蠢和盲目的人进行的。

例如,对于 VP9 编码,并假设一个双三次插值放大器,我们测量到相对于传统的 Lanczos 降尺度,平均 VMAF Bjøntegaard-Delta (BD) 速率增益约为 5.4%。我们还测量到 VMAF-NEG 的 BD 速率增益约为 4.4%。我们在下面展示了我们 Netflix 标题中的一个示例结果。deep downscaler(红点)在相似的比特率下提供了更高的 VMAF,或者在较低的比特率下产生了相当的 VMAF 分数。

再说一遍,实际使用的放大滤波器是什么?虽然我很高兴 VMAF 很好,但结果看起来很糟糕!这意味着 VMAF 是错误的。但是,他们之所以用 VMAF 来跟进,是因为 PSNR 不好,而且每个人都知道这一点;只是计算起来很方便。最后,VP9 是如何发挥作用的?我假设他们在放大之前对降尺度的视频进行了编码,但细节非常重要。

除了客观测量之外,我们还进行了人体受试者研究,以验证 deep downscaler 的视觉改进。在我们的基于偏好的视觉测试中,我们发现 deep downscaler 在各种编码方案和放大算法中都受到了约 77% 的测试对象的青睐。受试者报告说细节保留得更好,视觉效果更清晰。下面显示了一个视觉示例。[注意:示例是上面的那个]

而且巧合的是,虚假细节和过度锐化是基于 ML 的滤波的常见破坏性行为,尽管这些行为会使视频质量下降,但未经训练的用户会“更喜欢”这些行为。如果这就是标准,那就对所有内容运行 Warpsharp,然后宣告大功告成[[6](https://redvice.org/2025/encoding-requires-eyes/<#fn:6>)];我确信你会让大部分人说它看起来更好。

这个例子也没有提到视频被降尺度到什么分辨率,所以不清楚这是否能代表实际的使用案例。再次强调,没有关于如何进行测试的真实细节,所以我无法判断实验结构是否合理。

我们还进行了 A/B 测试,以了解 deep downscaler 的整体流媒体影响,并检测任何设备播放问题。我们的 A/B 测试显示 QoE(体验质量)有所提高,而没有产生任何不利的流媒体影响。这表明了为所有流媒体 Netflix 的设备部署 deep downscaler 的好处,而不会对我们的会员造成播放风险或质量下降。

用行话来说,这意味着它们对压缩性的影响不大。这并不令人惊讶。

我们如何高效地大规模应用神经网络?

考虑到我们的规模,应用神经网络可能会导致编码成本显著增加。为了获得可行的解决方案,我们采取了几个步骤来提高效率。

是的,这就是为什么闭式解几乎肯定更快。

神经网络架构的设计考虑到了计算效率,并且避免了任何负面的视觉质量影响。例如,我们发现只需要几个神经网络层就足够满足我们的需求了。为了进一步减少输入通道,我们只对亮度应用基于 NN 的缩放,并使用标准的 Lanczos 滤波器缩放色度。

好的,太酷了,所以它实际上并不 deep。毕竟,为什么文字要有意义呢?再次强调,_存在闭式解_时,只需要几层并不太令人震惊。

此外,虽然只将其应用于亮度可能是一个不错的主意,但如果它改变了亮度,你可能会得到非常奇怪的结果。我认为这就是导致上面示例中“虚假细节”的原因。

我们将 deep downscaler 实现为一个基于 FFmpeg 的滤波器,它可以与其他视频转换(比如像素格式转换)一起运行。我们的滤波器可以在 CPU 和 GPU 上运行。在 CPU 上,我们利用 oneDnn 来进一步减少延迟。

好的,当然,所有这些都在 FFmpeg 上运行,所以为什么这个不能呢。

将神经网络集成到我们的下一代编码平台中

Netflix 的编码技术和媒体云工程团队共同创新,推出了我们的下一代编码平台 Cosmos。我们的 deep downscaler 工作是展示 Cosmos 如何推动 Netflix 未来媒体创新的绝佳机会。下图显示了 deep downscaler 如何集成到 Cosmos 编码微服务中的自顶向下视图。

Downscaler 比较

行业术语 行业术语 行业术语 行业术语 行业术语。我特别讨厌“编码地层函数”。

一个 Cosmos 编码微服务可以为多个编码工作流程提供服务。例如,可以调用一个服务来对高质量输入视频进行复杂性分析,或者生成用于实际 Netflix 流媒体的编码。在一个服务中,“地层函数”是一个专门用于运行无状态和计算密集型函数的无服务器层。在一个“地层函数”调用中,我们的 deep downscaler 在编码之前被应用。在 Cosmos 的推动下,我们可以利用底层的 Titus 基础设施,并在我们所有的多 CPU/GPU 环境中大规模运行 deep downscaler。

为什么整个部分都在这里?所有这些都应该被删除。此外,再次强调,行业术语 行业术语 行业术语 行业术语 行业术语。

未来展望

deep downscaler 为 Netflix 视频编码的更多 NN 应用铺平了道路。但我们的旅程尚未结束,我们将努力改进和创新。例如,我们正在研究其他一些用例,比如视频去噪。我们还在寻找更高效的解决方案来大规模应用神经网络。我们对基于 NN 的工具如何在下一代编解码器中发挥作用感兴趣。归根结底,我们热衷于使用新技术来提高 Netflix 的视频质量。为了你的眼睛!

我不确定一个将具有闭式解的问题,并产生糟糕结果的降尺度器,能为除了更多行业术语垃圾邮件之外的任何东西铺平道路。我期待看到他们将如何处理去噪!

感谢 Roger Clark 和 Will Overman 阅读了这篇文章的草稿。错误当然是我自己的。

  1. 1: 好的,我忍不住了,但至少我把它限制在一个脚注中。第二句话写得很糟糕,更奇怪的是后面的第三句和第四句,读起来像是完全不同的人写的。我怀疑这篇文章经过了太多的编辑,但一路上没有人坐下来好好地通读一遍。
  2. 2: 不是。
  3. 3: PSNR 是一种误差指标,根本没有考虑到人类感知的怪癖。它很容易计算,而且“客观”,但不幸的是,人类的大脑很奇怪。
  4. 4: 我非常非常怀疑。
  5. 5: 当然,我怀疑这样做会揭示结果实际上并不是很好。
  6. 6: 总有一天,当我在开玩笑的时候,有人会认真对待我,我会后悔一切的。

« Git 用于字幕翻译:可能是一个错误 © 2025 Red Vice。版权所有。