c - Libav(ffmpeg)容器编解码器时基和流时基的目的是什么?
问题描述
我看到了这个答案,Libav (ffmpeg) copying decoded video timestamps to encoder
但我仍然不明白为什么我们需要流时基和编解码器时基。目前我正在尝试编写一些代码来确定从我的解码器的视频中显示一帧的时间,所以我认为正确的方法是这样的
aVFrame.best_effort_timestamp * stream.time_base.num * stream.time_base.den
那是对的吗?
解决方案
“为什么我们需要两者”是一个加载语句。我们不需要两者。你的问题应该是为什么我们两者都有。
这不是 ffmpeg/libav 的发明,它是媒体文件工作方式的副作用。一些(但不是全部)编解码器具有将时基编码到编解码器比特流中的机制(例如 h.264)。然后可以将这些比特流写入/混合到也编码时基的容器(例如 mp4)中。理论上这些应该匹配,但实际上它们通常不匹配。libav 只是解析文件并用那里的内容填充结构。
推荐阅读
- angular - 无法使用翻译构建测试模块
- xml - Importxml 函数停止在谷歌表格上工作
- c# - 自动验证并检查用户名是否被使用。ASP 网络核心
- python - 从 Qt 中删除复选框
- rsa - iText7 和 C# - X509Certificate2Signature 端口无法使用 RSAcng 进行签名
- python - 检查某些条件后如何使按钮在odoo中可见?
- ruby-on-rails - 在 x 框架选项中只允许一个 url
- html - 如何使用车把在一条路线上提交多个表单
- python - 检索句子的注意力权重?最用心的句子是零向量
- python - 替换RDD中的最后一个元素