C语言 Libav (ffmpeg)容器编解码器时基和流时基的目的是什么?



我看到了这个答案,Libav (ffmpeg)复制解码的视频时间戳到编码器

但是我仍然不明白为什么我们需要流时基和编解码器时基。目前,我正在尝试编写一些代码来确定从我的解码器的视频中显示帧的时间所以我认为正确的方法是这样做

aVFrame.best_effort_timestamp * stream.time_base.num * stream.time_base.den是正确的吗?

"为什么我们需要两者";是一个加载语句。我们不需要两者都需要。你的问题应该是为什么我们两者都有。

这不是ffmpeg/libav的发明,它是媒体文件工作方式的副作用。一些(但不是全部)编解码器具有将时基编码到编解码器比特流中的机制(例如h.264)。然后可以将这些位流写入/混合到也编码时基的容器(例如mp4)中。理论上这些应该是匹配的,但实际上往往不匹配。Libav只是解析文件,然后用里面的内容填充结构体。

相关内容

最新更新