【问题标题】:ffmpeg FPS information mismatch with the videoffmpeg FPS 信息与视频不匹配
【发布时间】:2018-05-17 10:41:12
【问题描述】:

我有一堆视频,其中包含视频中发生的一些统计数据。一条这样的信息以视频时间的形式给出,以秒为单位,精确到小数点后一位。

为了获得视频的 FPS,我使用ffmpeg -i

但是当我使用给定的 FPS 手动计算一个特定帧的时间时,它不匹配。

例如,ffmpeg 输出 FPS = 30。

我看视频统计,156.8 = 2.368处的帧必须是 4704'th 框架。我使用“skvideo”打开视频,读取所有帧,然后查看4704'th 帧。这是 2.12 左右的某个帧?我在多个视频中检查了多个此类实例,这是一种常见行为。

我不明白为什么会这样,我该如何解决这个问题?

因此,我不受 ffmpeg 的限制。 Skvideo 被用于阅读视频。我尝试了opencv,到目前为止它不适用于VideoCapture,并且重新安装它对我来说时间成本很高。但我想“opencv/skvideo”应该没关系,也可以手动计算帧数。

所以,在解决方案中,我正在寻找 -

  1. 给定视频内部的时间戳,我如何找到该特定时间位置的帧?

  2. 如果有人可能已经在此工作,这与 THUMOS 数据集有关。我在 Ubuntu 16.04

EDIT_1

实际上我可以更具体,因为它是公开可用的数据。时间界限是一项重要的活动。例如,在视频中,篮球扣篮发生在什么时候?它成对给出 - [开始结束]。有些视频有多个活动,有些只有一个。

Here是一个示例视频,以下是活动时间。

[[  16.5, 20.8],
[  26.6, 32.2],
[  34.8, 42.1],
[  47.8, 50.0],
[  58.1, 62.9],
[  65.6, 67.2],
[  68.5, 74.0],
[  76.4, 78.3],
[  78.7, 79.8],
[  80.8, 82.1],
[  85.0, 87.3],
[  90.1, 91.4],
[  98.5, 100.3]]

我也尝试过手动检查,32.87 FPS“几乎”适用于少数视频,但并非适用于所有视频。几乎意味着它偏离了约 10 帧。这对我的任务来说是一个巨大的差异,我需要精确的框架。

此外,必须有某种方式,因为可以通过多个视频播放器直观地观察到数据集中的时间是正确的。

【问题讨论】:

  • 大多数视频编解码器都依赖于根据播放时间计算的不完整(差异图像等)图像。根据您的素材的解释方式,可以对其进行插值。因此,您要确保在所有领域中您都在按原样解释镜头。您是否有看到此问题发生的示例视频文件?
  • @user1767754,添加了示例视频和更多信息
  • 视频播放器是否以正确的 fps 播放视频?也许只是录制或视频编辑是错误的。

标签: opencv video ffmpeg video-processing frame-rate


【解决方案1】:

如果您的目标是提取与时间戳对应的帧,请使用

ffmpeg -i in.mp4 -vf select='lt(t,TS)*lt(TS-t,1/FPS)' -vsync 0 frame.png

TS 应替换为您的时间戳,FPS 应替换为帧率,例如'lt(t,78.7)*lt(78.7-t,1/30)'

如果视频的帧率像您的那样可变,则帧索引是不可靠的。

【讨论】:

    【解决方案2】:

    使用 ffmpeg 在给定时间戳获取帧的简单帧精确方法是使用 ffmpeg seek -ss 选项。 如果这就是你要找的,你可以在这里找到描述 - https://trac.ffmpeg.org/wiki/Seeking

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2018-07-05
      • 2022-12-28
      • 1970-01-01
      相关资源
      最近更新 更多