我目前正在尝试创建一个程序,需要一个视频文件,通常是AVI,并试图将其转换为图像。到目前为止,我让这个过程工作得很好,如果需要的话,可以不去管它。然而,我想看看是否有可能优化它的速度。所以我的问题是,是否有可能将视频文件的一部分逐块加载到内存中,而不是流式传输。也许可以将2-3分钟的剪辑加载到缓冲区中,对其进行处理,然后在接下来的2-3分钟内重复使用它。我已经研究了Direct Show和OpenCV来加载和播放视频文件,但到目前为止还没有找到任何关于将视频加载到缓冲区中的内容。任何到教程或概念的链接都是非常感谢的。
如果有帮助,这将在Windows XP/7机器上开发。
发布于 2011-05-05 02:56:48
您可以做的是从磁盘加载几个帧,让我们称之为N个帧的块,到一个队列中。一旦设置了缓冲区的限制,就可以拉出帧并对其进行处理。您可以使用两个队列(Q1和Q2)和两个线程(T1和T2)并行执行此操作。使用T2处理来自Q1的帧时,可以使用T1加载Q2。您将在一个队列已满时执行上下文切换,并在另一个队列从磁盘加载帧的同时拉出帧并对其进行处理。当然,您将需要处理与这种方法相关的线程化/并行化的复杂性,在这种情况下,BOOST线程可能会有所帮助。
发布于 2011-05-05 02:47:26
这样的应用程序的瓶颈是从磁盘读取文件,然后将每个帧转换为图像。你不能逃避这些任务。除非您使用了错误的方式,否则无法显著加快应用程序的执行速度。
希望您不必将这些图像写回磁盘。
https://stackoverflow.com/questions/5888316
复制相似问题