当前位置: 首页 > 知识库问答 >
问题:

如何使用openCV python改变现有视频的帧率FPS

双志强
2023-03-14

我试图改变帧率,即使用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()

共有1个答案

王经赋
2023-03-14

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

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

如果你真的想改变现有文件的回放率,并将其保存到该文件中,我不确定OpenCV是否真的支持这一点,我想这将取决于你使用的后端--OpenCV使用不同的第三方后端实现VideoCapture类…根据videocapture.set()的文档,我将研究video.set(Cv2.cap_prop_fps,int(60))的返回值,因为文档建议,如果这改变了一些东西,它将返回true。

 类似资料:
  • 这是到目前为止我遇到的最好的解决方案(可以在这里找到): 将帧提取为RawVideo: FFMPEG-i input.mov-f rawvideo-b 50000000-pix_fmt yuv420p-vcodec rawvideo-s 1920x1080-y temp.raw 注2:尽管它完全符合我的要求,但我后来才意识到使用这种方法会造成质量损失,我希望避免这种情况。 提前感谢大家!

  • 我正在尝试提取几个视频上的所有帧。这些视频是在以可变帧速率保存输出的摄像机上拍摄的,因此,一些帧在时间上比其他帧更接近(根据mediainfo,每秒27到30帧) 这些帧将与一些元数据同步,因此我不仅需要提取它们,还需要保留视频每帧拍摄的[相对]时间信息。 我一直在使用ffmpeg来提取视频帧,当视频帧速率不再恒定时,挑战就来了。任何其他不同于ffmpeg的方法或程序都可以完成任务。

  • 问题内容: 我想获得视频的帧速率,但是我不想使用FFMPEG,JAVACV lib。是否有可能在Android中获取视频的帧率? 我读到KEY_FRAME_RATE时说,“具体地说,MediaExtractor提供了一个与轨道的帧速率信息相对应的整数值(如果已指定且非零)。” 但我不知道如何使用它? 如果您知道如何从视频中获取帧频,请在此处回答。 问题答案: 注意: 尝试在辅助线程中运行以上代码。

  • 问题内容: 我想在特定时间从视频中抓取帧。我正在将我的抓取帧函数调用为Float64,将时间指定为秒。问题在于它没有抓取当前帧。似乎忽略了小数点。如果我用例如1.22和1.70调用该函数,它将返回同一帧。关于Swift,我是一个新手,所以我想我没有正确使用CMTime对象。那么,谁能看到这是怎么回事? 问题答案: 我设法找出添加: …对我的职能将达到目的。 我更新的函数如下所示:

  • 问题内容: 我是OpenCV的初学者。我想对要上传到服务器的视频帧进行一些图像处理。我只想读取可用的框架并将它们写入目录中。然后,等待视频的另一部分上载并将帧写入目录。并且,我应该等待每个帧都完全上传,然后将其写入文件。 您能告诉我如何使用OpenCV(Python)吗? 编辑1: 我编写了这段代码,用于从文件中捕获视频,而新数据将附加在文件末尾。换句话说,该文件不是完整的视频,并且另一个程序正在