Python:What';将视频文件加载到内存中的最快方法是什么? 首先是一些背景

Python:What';将视频文件加载到内存中的最快方法是什么? 首先是一些背景,python,opencv,video,ffmpeg,Python,Opencv,Video,Ffmpeg,我正在尝试编写自己的一套视频分析工具,主要用于检测渲染错误,如闪烁帧和未来可能的其他内容 我们(显然)的目标是编写一个脚本,它比我实时查看文件更快、更准确。 使用OpenCV,我得到了如下结果: import cv2 vid = cv2.VideoCapture("Video/OpenCV_Testfile.mov", cv2.CAP_FFMPEG) width = 1024 height = 576 length = vid.get(cv2.CAP_PROP_FRAME_COUNT) f

我正在尝试编写自己的一套视频分析工具,主要用于检测渲染错误,如闪烁帧和未来可能的其他内容

我们(显然)的目标是编写一个脚本,它比我实时查看文件更快、更准确。

使用OpenCV,我得到了如下结果:

import cv2


vid = cv2.VideoCapture("Video/OpenCV_Testfile.mov", cv2.CAP_FFMPEG)
width = 1024
height = 576
length = vid.get(cv2.CAP_PROP_FRAME_COUNT)

for f in range(length):
    blue_values = []
    vid.set(cv2.CAP_PROP_POS_FRAMES, f)
    is_read, frame = vid.read()
    if is_read:
        for row in range(height):
            for col in range(width):
                blue_values.append(frame[row][col][0])
    print(blue_values)
vid.release()
这只是打印出每帧的所有蓝色值的列表。 -为了简单起见(我的实际脚本在每个帧上比较了几个值,并且仅在所有值相等时保存帧编号)

虽然这是可行的,但它不是一个很快的操作。(嵌套循环,但最重要的是,必须为每一帧调用
read()
方法,这相当慢。 我尝试使用多处理,但基本上最终出现了与此处所述相同的崩溃:

我有一个20多岁的孩子1024x576@25fps执行如下操作的测试文件:

  • mov、ProRes:15s
  • mp4,h.264:30s(太慢)
我的机器可以在任何情况下播放h.2641920x1080@50fps有了mplayer(它使用ffmpeg解码)。所以,我应该能够从中获得更多。这让我

我的问题 如何解码视频并简单地将所有像素值转储到列表中以进行进一步的(可能是多线程的)操作?速度才是真正重要的。注意:我并不专注于OpenCV。任何效果最好的都可以


谢谢!

你为什么只从视频中读取前100帧啊,我把它保留在100帧,因为我不想使用length=vid.get(cv2.CAP\u PROP\u FRAME\u COUNT)我应该注意这一点。谢谢,我会编辑我的文章。不要计算你不需要它来循环视频的长度。只需运行一段时间的真循环,当iSyRead是Fals20fPS时,使用断言是Python所能想到的最大值。如果你需要更多的性能,试试C++。ce(我的for循环是21秒对15秒)。很有趣。