【发布时间】:2016-08-04 20:00:25
【问题描述】:
我正在使用 FFmpeg 录制视频,我希望它所使用的帧速率至少在正确的范围内。现在我采用我的输入声称拥有的帧速率并使用它来设置我的输出视频流的帧速率(time_base)。然而,这有时与我得到的实际帧速率大不相同(我看到一个流声称 50 fps 但以 9 fps 发布)。
我想做的是使用经过的计时器并计算我录制的帧数,以计算我在完成录制时录制的实际帧速率。在我写任何帧之前,我似乎在 avcodec_open2 中使用了我的 AVStream 中设置的帧速率。如果我稍后设置它(例如在我写帧时),而 ffplay 可以播放它(抱怨时间增量位是 6 而不是 4)其他视频播放器不能。有没有办法在写入帧之后设置整个文件的帧速率?如果没有,有没有办法在我录制时告诉帧本身某种时间戳或帧速率,这将导致有效的录制文件?
【问题讨论】:
-
嗨,我会看更多,但只是想问一下 avconv。在快速谷歌搜索后找到它,看起来它可以改变文件的帧速率。也许您可以以任意帧速率写入文件,然后在检测到实际速率后,完成写入并以新速率运行 avconv?只是一个想法,而不是一个真正的答案;)会继续寻找。让我知道。
-
avconv 是 libav 项目的二进制名称。 (superuser.com/questions/507386/…) 对所有让我困惑了一段时间的名字进行了相当不错的总结。 avconv 所做的任何事情都应该可以通过它使用的库来实现。
-
你能解决这个问题吗?我也有同样的问题(
-
@Irina 请参阅下面的答案。基本上,您将时基设置为计时器的粒度,然后每一帧都将 PTS 设置为经过的时间。
标签: ffmpeg frame-rate video-recording libavcodec libavformat