2017-02-06 84 views
1

我想知道在H.264编码中丢失了什么。我使用libx264对视频进行编码,并用ffmpeg对其进行解码,然后使用相同的参数对结果视频进行编码,并使用相同的参数对其进行解码,然后再对其进行第二次解码。我预计第一个和第二个解码视频的大小和外观必须相同,但是,它不是!例如,我在第一个编码帧中的第一个片NAL单元中有13000个字节,在第二个编码帧中有12000个字节,这是奇数。因为在第一个编码过程中,帧中存在的任何有损信息都应该被消除,并且第二个编码应该是其结果相同的NAL单元的过程。我错了,还是在我的实现中我错了?libx264和ffmpeg如何对H.264进行编码和解码

+0

大多数有损压缩算法并不能保证使用相同参数进行解码和重新编码将产生相同的输出。 – cdhowie

+0

有没有任何官方的参考文件发布过这个问题? –

+0

是什么让你觉得这是一个问题? – cdhowie

回答

6

这个问题是不可能回答的。有损编解码器实际上应该被称为世代有损。像复印机一样,有史以来的一代都稍有改动。要“确切”知道将会丢失什么的唯一方法是实际运行该算法。现代压缩由几个步骤组成。运动估计/补偿,量化,环路滤波和解块。并且在每个步骤去除多少信息由速率控制算法决定。根据参数和内容,这些步骤中的每一个都可能会丢失甚至添加信息。编解码器的实现甚至可能不同。

+0

谢谢。除量化步骤外,你能解释一下,其他部分如何处理信息丢失? –

+0

有很多关于这个主题的书籍,以及可能在互联网上的资源,你应该从那些开始,然后问在stackoverflow上的具体问题。 – szatmary