Chr*_*ris 10 ffmpeg frame-rate video-recording libavcodec libavformat
我正在使用FFmpeg录制视频,我希望它写入的帧速率至少在正确的球场.现在我采用输入声称拥有的帧速率,并使用它来设置输出视频流的帧速率(time_base).然而,这有时与我得到的实际帧速率大不相同(我看到一个流声称50 fps但以9 fps发布).
我想要做的是使用经过时间的计时器并计算我记录的帧数来计算我在完成录制时记录的实际帧速率.我似乎在我编写任何帧之前,我在AVStream中设置的帧速率在avcodec_open2中使用.如果我稍后设置它(例如在我写帧的时候),而ffplay可以播放它(抱怨时间增量位是6而不是4)其他视频播放器不能.有没有办法在写入帧后设置整个文件的帧速率?如果没有办法在我录制时告诉帧本身某种时间戳或帧速率会产生有效的录制文件?
诀窍似乎是以比我更智能的方式使用AVCodecContext time_base和AVFrame pts 。如果您使用固定帧速率进行录制,则 time_base 将设置为 1/framerate,并且 pts 只是录制帧的递增数字。
现在,当我开始录制时,我会启动一个经过的计时器,并将 time_base 设置为超过计时器粒度的 1(在我的例子中,它的精度为毫秒,因此为 1000)。我将帧点数设置为编码之前经过的时间量。这种组合会产生具有可变帧速率且可以正确播放的视频文件。