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

标签 video ffmpeg frame-rate

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 帧/秒 持续时间: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 毫秒,播放器会延长视频的持续时间以匹配这一点,因此从算术上讲,有效帧速率稍微小一些。

关于video - ffmpeg 中显示的 FPS 与总帧数/持续时间不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62353384/

相关文章:

image - 有没有办法使用 ffmpeg 将 GIF 的所有帧保存到 PNG 中?

jquery - 使用 jQuery 跟踪 FPS

iphone - 捕获视频时在开始时检测相机旋转

video - 在 j2me 开发中是否可以调用 native 播放器并播放视频?

jquery - 由于嵌入的视频太多,我的网站加载缓慢

css - 在视频缩略图上制作一个CSS播放按钮

php - 已安装 ffmpeg 但我收到 "no such file or directory"错误

Windows 服务器上的 FFMPEG "Unknown encoder ' libfaac'"

ios - 如何在 sprite kit 中设置 FPS

c++ - 如何获取和更改 OGRE 应用程序的帧率?