问题描述
我有一些代码可以将视频编码为 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 (将#修改为@)