ffmpeg ts固定码率个人见解

编码ts的固定码率时候,也许你会遇见这样的问题。

pcr < dts 的 warning,或者vbv的overflow。这时,十分诡异的问题来了,如果你输入不同的输入,编码参数都是一样。但一个可以,一个不行。通过观察,你会发现,不行的那个出现一个明显的画面晃动,或者画质本身较高。

这时,你猜想是不是哪里出现了问题了呢?

通过查看源码在mpegtsenc.c里我们可以看到那个异常

 

 

 

pcr的计算是通过了get_pcr(ts,s->pb)计算所得的。

 

 

这里我们不难看到计算方式就是通过计算文件的写入的偏移,通过转换成ts的muxrate的timebase下,加上一开始的pcr得到。这时,注意到,如果偏移量跟本身你写入的dts的时间对比就知道一个关键问题了。那就是在那个ts的码率下,我们本身的写入的大小这时对应的dts应该是一个大于等于pcr的存在的。因为你要知道那时的pcr代表了当前由文件偏移计算出来的时间dtstmp,而你却小于上一个dtstmp。这样不出warning才怪!

这时我们知道问题来源了。

要么你当前的pts是自己计算错了,如果不是。恭喜你,获得跟我一样的处境。

就是x264编码出来的质量高于你本身的封装的质量了。说到这里,相信你也知道了解决方案了。至此,困扰了接近2个星期的问题close。

 

posted @ 2017-11-28 10:26  ouyang_hang  阅读(915)  评论(0编辑  收藏  举报