用MATLAB实现多个视频的同步播放

用MATLAB实现多个视频的同步播放,matlab,video,video-processing,Matlab,Video,Video Processing,我搜索了internet和堆栈溢出,但找不到解决方案,甚至找不到解决问题的有用提示 我需要在MATLAB中编写一个专门的视频注释软件,该软件必须能够在GUI上同时播放多个视频(至少2个)。视频文件是XVID编码的。到目前为止,我基本上只是调整了mathworks.com的视频播放示例(xylophon.avi,请参见电影()说明) 我熟悉mmreader、VideoReader、movie和implay功能,但仍面临两个问题: 即使我只读取少量帧(如在xylophon.avi示例中),我的程序也

我搜索了internet和堆栈溢出,但找不到解决方案,甚至找不到解决问题的有用提示

我需要在MATLAB中编写一个专门的视频注释软件,该软件必须能够在GUI上同时播放多个视频(至少2个)。视频文件是XVID编码的。到目前为止,我基本上只是调整了mathworks.com的视频播放示例(xylophon.avi,请参见电影()说明)

我熟悉mmreader、VideoReader、movie和implay功能,但仍面临两个问题:

  • 即使我只读取少量帧(如在xylophon.avi示例中),我的程序也很快超过可用内存。而且,即使在相对较少的帧(比如100帧)中阅读也需要相当长的时间

  • movie()函数是synchronous函数,因此在第一个视频完成之前,第二个视频不会启动。如何同时调用两个movie()-函数?或者有没有其他方法可以同时显示两个(或更多)视频


  • 有什么建议吗?谢谢

    首先,MATLAB不是多线程的。同时做两件事是困难的。尝试突破到Java。Matlab使用JIDE作为基于Swing的图形前端。用于将MATLAB代码编译为Java,或将您自己的“面板”添加到IDE中,如所示。

    原则上,您可以将每个视频帧显示为图像,并交替更新每个视频,但要以正确的帧速率播放可能会很困难

    试试下面的方法。这可能无法正常工作,但您应该能够更新它

    v1 = VideoReader(firstVideo)
    v2 = VideoReader(secondVideo)
    
    i1 = 0;
    i2 = 0;
    while i1 < v1.NumberOfFrames && i2 < v2.NumberOfFrames
        if i1 < v1.NumberOfFrames
            i1 = i1+1;
            subplot(1,2,1)
            image(v1.read(i1))
        end
    
        if i2 < v2.NumberOfFrames
            i2 = i2+1;
            subplot(1,2,2)
            image(v2.read(i2))
        end
    
        drawnow
    end
    
    v1=视频阅读器(第一视频)
    v2=视频阅读器(第二视频)
    i1=0;
    i2=0;
    而i1
    您可以在两个不同的窗口中显示视频,并通过给视频一个句柄并调用其未记录的播放功能来同时开始播放。这也消除了你可能与长度不等的视频产生的任何冲突

    handle1 = implay('file1.mp4');
    handle2 = implay('file2.mp4');
    
    handle1.Parent.Position = [100 100 640 480];
    handle2.Parent.Position = [740 100 640 480];
    
    play(handle1.DataSource.Controls)
    play(handle2.DataSource.Controls)
    

    我在考虑是否可以使用并行工具箱完成多线程处理。然而,我决定用另一种语言实现这个工具。无论如何谢谢你!