gpt4 book ai didi

ffmpeg - ffmpeg av 库可以返回准确的 PTS 吗?

转载 作者:行者123 更新时间:2023-12-01 15:11:39 26 4
gpt4 key购买 nike

我正在使用一个使用 IBBP... GOP 序列的 mpeg 流。 (DTS,PTS)前 4 个 AVPackets 的返回值如下:I=(0,3) B=(1,1) B=(2,2) P=(3,6)
I 帧上的 PTS 看起来是合法的,但 B 帧上的 PTS 不可能正确,因为 B 帧不应显示在 I 帧之前,如其 PTS 值所示。我还尝试解码数据包并在生成的 AVFrame 中使用 pts 值,将 PTS 始终设置为零。

有什么方法可以从 ffmpeg 中获得准确的 PTS 吗?如果没有,那么同步音频的最佳方式是什么?

最佳答案

我想我终于根据 http://www.dranger.com/ffmpeg/tutorial05.html 中的评论弄清楚了发生了什么:

ffmpeg reorders the packets so that the DTS of the packet being processed by avcodec_decode_video() will always be the same as the PTS of the frame it returns



翻译:如果我向 avcodec_decode_video() 提供一个 PTS 为 12 的数据包,avcodec_decode_video() 将不会返回包含在该数据包中的解码帧,直到我向它提供一个 DTS 为 12 的后续数据包。如果数据包的 PTS 是与它的 DTS 相同,则给定的数据包与返回的帧相同。如果数据包的 PTS 比其 DTS 晚 2 帧,则 avcodec_decode_video() 将延迟该帧并且在我再提供 2 个数据包之前不会返回它。

基于这种行为,我猜测 av_read_frame() 可能正在将数据包从 IPBB 重新排序到 IBBP,因此 avcodec_decode_video() 只需将 P 帧缓冲 3 帧而不是 5 帧。例如,输入和具有此排序的 P 帧的输出为 3 (6 - 3):
|                  I B B P B B P
| DTS: 0 1 2 3 4 5 6
| decode() result: I B B P

与标准排序 (6 - 1) 的差异为 5:
|                  I P B B P B B
| DTS: 0 1 2 3 4 5 6
| decode() result: I B B P

但这纯粹是猜想。

关于ffmpeg - ffmpeg av 库可以返回准确的 PTS 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/96107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com