ffmpeg中显示的FPS与总帧数/持续时间不匹配

问题描述 投票:1回答:1

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不同]

哪个值更可靠?差异是否意味着一帧的持续时间可能与其他帧不同(帧分布不均匀)?

video ffmpeg frame-rate
1个回答
1
投票

请注意,持续时间和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毫秒,并且播放器将延长视频的持续时间以使其匹配,因此从算术上讲,有效帧率会略小。

© www.soinside.com 2019 - 2024. All rights reserved.