【问题标题】:How to change frame rate FPS of an existing video using openCV python如何使用openCV python更改现有视频的帧速率FPS
【发布时间】:2020-01-07 11:33:45
【问题描述】:

我正在尝试使用 python 中的 openCV 库更改帧速率,即现有视频的 FPS。下面是我试图执行的代码。即使在使用 cv2.CAP_PROP_FPS 设置 FPS 属性后,在 cv2.imshow() 方法中视频播放速度也不会更快。即使在设置 FPS 属性之后,getter 也会返回旧的 FPS 值。那么如何将 FPS 值设置得更高,让视频播放更快呢?

使用过的版本: python = 3.7.4 和 opencv-python - 4.1.0.25

import cv2

video = cv2.VideoCapture("yourVideoPath.mp4");
video.set(cv2.CAP_PROP_FPS, int(60))

if __name__ == '__main__':
    print("Frame rate : {0}".format(video.get(cv2.CAP_PROP_FPS)))
    while video.isOpened():
        ret1, frame2 = video.read()
        cv2.imshow("Changed", frame2)

        if cv2.waitKey(10) & 0xFF == ord('q'):  # press q to quit
            break

video.release()
cv2.destroyAllWindows()

【问题讨论】:

  • 如果我没听错 - 你想提高 FPS,对吗?如果是,那么-您需要更快的机器,这将更快地处理您的while 循环。你在那里做的是 - 你从你的视频文件中一次读取一帧,然后打印图像,覆盖它直到视频完成。缓慢是由处理此图像引起的,而不是由视频本身引起的。

标签: python python-3.x opencv opencv3.0


【解决方案1】:

如果您只是尝试在显示的窗口中播放视频,限制因素不是视频的 fps,而是使用代码 waitKey(10) 等待的时间,这使程序在每帧之间等待 10 毫秒。

VideoCapture 类的read() 方法只返回下一帧,没有等待或帧速率的概念。阻止此代码尽可能快地运行的唯一因素是waitKey(10) 部分,因此这是决定速度的主要因素。要更改通过imshow() 方法看到的帧速率,您需要编辑等待时间。这可能是主要因素,但不是唯一的因素,因为读取一帧确实需要时间。

如果您实际上是在尝试更改现有文件的播放速率并将其保存到该文件中,我不确定 OpenCV 是否真的支持这一点,我想这将取决于您使用的后端- OpenCV 使用不同的 3rd 方后端实现 VideoCapture 类。根据VideoCapture.set() 的文档,我将调查video.set(cv2.CAP_PROP_FPS, int(60)) 的返回值,因为documentation suggests 如果这发生了一些变化,它将返回true。

作为替代方案,您可以使用 FFMPEG 之类的东西进行调查,supports this 相对容易。如果您想坚持使用 OpenCV,我从个人经验中知道,您可以使用 VideoWriter class 来做到这一点。在此方法中,您将使用 VideoCapture 类逐帧读取视频,然后使用 VideoWriter 以所需的帧速率保存它。不过,我怀疑 FFMPEG 可能会满足您的需求!

【讨论】:

  • 感谢您的回复。我已经尝试过 waitKey(10) VideoWriter 类。实际上,我不想保存具有更高 FPS 的视频。在不使用 VideoWriter 类的情况下,我想更改视频文件的 FPS 属性并使用 cv2.imshow 播放得更快。 WaitKey(10) 工作正常,但我正在尝试另一种方式
  • 我要说的是 waitKey(10) 将代码暂停 10 毫秒。这就是使用 imshow 确定视频播放的原因,它只是将 cv2.Mat 放在屏幕上,而不关心来自具有某些 FPS 的视频的任何类似内容。代码的执行速度当然会有一些小的影响,但是显示的代码总是会播放帧时间为 10ms 的视频文件,即它会尝试以 100fps 的速度播放。
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 2017-03-19
  • 2020-05-27
  • 1970-01-01
  • 2016-04-04
  • 2019-01-26
  • 1970-01-01
  • 2019-06-28
相关资源
最近更新 更多