williamfzc / stagesepx

detect stages in video automatically
MIT License
432 stars 125 forks source link

报告中Stages和Others中的帧时间戳不一致 #115

Closed wanmich closed 4 years ago

wanmich commented 4 years ago

在html报告中,Stages和Others下的同一帧对应的时间戳不相同(如图1),最终计算出的区间耗时也会不同。一般地,手工测试会基于Stages下的数据计算耗时,自动化测试时会基于Other下的数据计算耗时。

在实验中,还发现Stages中第1帧的时间戳为负的情况,假设是时间偏移量,用下一个稳定阶段的第一帧时间戳减去偏移量得到的值与Others下对应的时间戳一致(如图2)。但稳定阶段的最后一帧时间戳两边是一致的,不能以同样的方式相减。推断应该是bug吧

示例截图: image (图1)

image (图2)

williamfzc commented 4 years ago

在html报告中,Stages和Others下的同一帧对应的时间戳不相同(如图1),最终计算出的区间耗时也会不同。一般地,手工测试会基于Stages下的数据计算耗时,自动化测试时会基于Other下的数据计算耗时。

还发现Stages中第1帧的时间戳为负的情况

用 ffmpeg 刷一下帧率一般就不会发生这种情况。如果还有的话我再看看,这种之前似乎偶现过但是没怎么关注。

wanmich commented 4 years ago

关于用ffmpeg刷帧率,有些疑问:

  1. 对于软件录制的视频,如何确定帧率? 载入视频时,VideoObject()默认是使用视频原始帧率吗?在不指定fps值时得到的报告中,用总帧数/总时间长(Stages最底部的最后一帧和对应时间戳)得到的帧率与录制视频时指定的帧率不一样? 比如用ADV Screen Recorder录制时指定帧率是60fps,但基于报告Stages页数据算出的帧率是另一个值:(基于这个帧率算出的耗时 与 基于时间戳算出的耗时 也不相同) image (也许应该用一款视频播放软件查一下视频帧率,再把得到帧率传入VideoObject()?)

  2. 用ffmpeg刷帧率后,是否影响引入误差? 如视频的帧率是20,按30/60去刷,视频还能否还原录制时的各阶段的耗时?

williamfzc commented 4 years ago

对于软件录制的视频,如何确定帧率?

软件录制会得到不稳定的帧率。https://www.infoq.cn/article/KJaBBAaXpWER0rbwtRvq

视频还能否还原录制时的各阶段的耗时?

能的

wanmich commented 4 years ago

others属于历史遗留问题了,现在我们不看这个,以Stages为准。自动化一般建议自行处理数据 ClassifierResult,这个也是准的。后面会考虑将others修改下,以免误导;

有些疑惑,到目前为止已经处理过几十个视频了,发现:

https://www.infoq.cn/article/KJaBBAaXpWER0rbwtRvq 对于 fps 不稳定的问题,有个前提是,虽然 fps 不稳定,但每一帧的时间戳是准确的。那么,我们可以利用 ffmpeg 对这些视频进行补帧,使整个视频的 fps 维持在一个固定值。经过这种方法处理之后,opencv 就能够正确地处理视频的时间。

williamfzc commented 4 years ago

Others下的时间戳与ClassifierResult是一致的

是不是,理论上讲,刷帧后,视频fps固定了,数帧得来的耗时等于时间戳耗时?

williamfzc commented 4 years ago

image

在 others tab 中添加了 warning 与 该 issue 的链接; 后续有空时去除无效部分,close。