如何解决ffmpeg 编码的 h.264 帧率略有错误
我有一些代码可以将视频编码为 MP4/H.264 文件。它与 this example 基本相同,但编码为 MP4/H.264,没有音频。
我这样设置 time_base
/framerate
:
codecContext->time_base = AVRational{1,30};
codecContext->framerate = AVRational{30,1};
...
stream->time_base = codecContext->time_base;
而且一切正常(质量很差,但这是另一个问题)。然而奇怪的是,帧速率出现在 30.303030,而不是 30。VLC 和 ffmpeg 本身都证实了这一点。
30.303030 是 30 * 100/99,但我不明白为什么会发生这种情况。
我确实发现其他一些人报告了这种奇怪的帧速率 here、here 和 here,但似乎没有人弄清楚原因。
这个帧率是怎么回事?
编辑:其中一个问题让我想到了 MediaInfo,它实际上报告的帧速率为 30.000 FPS,而 FFMPEG 报告的帧速率为 30.30,大概是从 VLC 的值 30.303030 取整。
编辑 2: 啊哈!我认为这是因为我编码了 100 帧。我想知道VLC和ffmpeg是否通过将总帧数除以第一帧和最后一帧的呈现时间之间的差异来计算帧率。那肯定会产生 30.303030:
100 / (99/30 - 0/30) = 30.303030
我通过编码 200 帧和帧速率更改为 30.15 来确认这一点。所以这可能只是VLC和ffmpeg的帧率计算的一个bug。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。