FPS定义为每秒的帧数。但是,当我尝试使用总帧数/持续时间来计算FPS时,我得到的数字与ffmpeg中显示的FPS略有不同:
对于此视频http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4使用ffmpeg,我们可以获得其FPS,持续时间和总帧数:
ffprobe -select_streams v -show_streams ForBiggerFun.mp4 | grep nb_frames
nb_frames = 1440
ffmpeg -i ForBiggerFun.mp4
23.98 fps持续时间:00:01:00.07
如果我们使用nb_frames计算每帧的持续时间,我们得到fps = nb_frames / Duration = 1440 / 60.07 = 23.972032628599965,与23.98不同]
哪个值更可靠?差异是否意味着一帧的持续时间可能与其他帧不同(帧分布不均匀)?
请注意,持续时间和fps均四舍五入到小数点后两位。
要获得更精确的阅读,请运行
ffprobe -v 0 -select_streams v -show_entries stream=duration_ts,time_base,nb_frames ForBiggerFun.mp4
将产生
[STREAM]
time_base=1/48000
duration_ts=2881920
nb_frames=1440
[/STREAM]
您的精确帧速率为nb_frames / (duration_ts / time_base)
=1440 / (2881920 / 48000)
= 23.9840
。但是请注意,所有流都不会具有相同的持续时间。实际上,音频流要长30毫秒,并且播放器将延长视频的持续时间以使其匹配,因此从算术上讲,有效帧率会略小。