有损解压缩总是产生相同的输出吗?

mic*_*key 7 compression mp3 jpeg aac h.264

考虑到有损压缩格式(对于图像,音频,视频等......)并且考虑到它只在相同的压缩输入文件上运行,相同的解压缩算法是否始终生成相同的输出?那么不同类型的解压缩器,它们是否会以相同的输入生成相同的输出?我已经读到某些地方,一些jpeg-decompression算法以速度换取质量,这意味着它们不会产生相同的输出.

总而言之,鉴于我们可以知道正在使用的压缩和解压缩算法,我们是否能够依赖输出总是相同的.通过控制使用哪些算法,可以获得确定性行为吗?

注意.它不一定要输出原始输入.

mst*_*sjo 8

这取决于压缩标准。现代标准,例如 H.264,有严格的规范和参考解码器,任何兼容的解码器都应该按位输出与参考解码器完全相同的输出(当然是模错误)。较旧的视频编解码器(例如 MPEG-4 第 2 部分)没有详细说明完整的过程,因此不同的实现可能会输出略有不同的数据(看起来大致相似,但舍入略有不同)。对于帧间编解码器,未来的帧依赖于更早的帧,但这种舍入误差可能会累积。

对于音频编解码器,兼容解码器通常需要接近参考信号,同时允许一些实现/舍入差异。

在大多数情况下,质量与速度的交易是在编码器中完成的,但一些解码器也有偏离标准的选项,以提高解码速度但不能输出准确正确的图像。

因此,这一切都取决于您使用的编解码器标准(它们是否编写得足够精确以允许独立、精确地实现它们)和实际的解码器实现。

  • 不,使用帧间的编解码器本身不应该添加任何不确定性,因此原则上它们应该总是在给定相同输入数据的情况下返回相同的输出数据。如果它是非 bitexact 编解码器,您可能会在不同的硬件上得到不同的结果(或者是由于浮点舍入,或者使用不同的代码路径,例如 SIMD,具体取决于硬件的功能),但这也可能在解码器中进行配置. (2认同)
  • 如果您的意思是,如果可以预测接收器将解码的内容 - 这在很大程度上取决于使用的流媒体协议的类型。有些运行在 TCP 上,该层将负责任何重传。在 UDP 上运行的协议更容易受到攻击,并且需要使用许多不同的技术来获得某种可靠性(前向纠错、请求重传的丢包指示等),在这些情况下,很难猜测是什么接收器会得到。 (2认同)