首页 > 解决方案 > Libav(ffmpeg)容器编解码器时基和流时基的目的是什么?

问题描述

我看到了这个答案,Libav (ffmpeg) copying decoded video timestamps to encoder

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

aVFrame.best_effort_timestamp * stream.time_base.num * stream.time_base.den那是对的吗?

标签: cvideoffmpegcodeclibav

解决方案


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

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


推荐阅读