【问题标题】:How libx264 and ffmpeg encode and decode H.264libx264 和 ffmpeg 如何编码和解码 H.264
【发布时间】:2017-06-23 15:10:03
【问题描述】:

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

【问题讨论】:

  • 大多数有损压缩算法不保证使用相同参数解码和重新编码会产生相同的输出。
  • 有没有官方参考可以解决这个问题?
  • 是什么让你认为这是个问题?
  • 我的意思是这个主题!

标签: video encoding ffmpeg libx264


【解决方案1】:

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

【讨论】:

  • 谢谢。你能解释一下除了量化步骤,其他部分如何处理信息丢失?
  • 关于这个主题的书籍很多,网上也有资源,你应该从这些开始,然后在stackoverflow上提出具体问题。
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2014-09-08
  • 2015-07-19
  • 2011-10-30
  • 1970-01-01
  • 2013-02-06
  • 2011-08-11
  • 2017-04-19
相关资源
最近更新 更多